部署流程
每个服务独立部署。服务上的 部署(或 重新部署)会构建或拉取这个服务,并以当前设置重启它;项目中的其他服务保持原样运行。添加服务时会自动部署它,网络设置的修改会重新部署对应的服务。
要一次发布所有服务(例如修改了好几个之后),使用项目 设置 中的 全部部署。全部部署还会移除你从项目中删除的服务。
步骤
每个服务会经历以下状态,显示在它的概览和侧边栏中:
| 状态 | 正在发生什么 |
|---|---|
| 等待中 | 在本次部署中排队 |
| 构建中 | Git 服务正在 Zenavo 的构建机上构建 |
| 部署中 | 正在把 Kubernetes 对象应用到服务器 |
| 启动中 | 容器正在启动,等待通过健康检查 |
| 运行中 | 所有实例都已就绪 |
| 失败 / 已崩溃 | 构建或发布失败,或者容器反复退出。打开 日志 查看原因。 |
- 构建。 Git 服务会被克隆并构建(构建方案),镜像存入 Zenavo 的镜像存储,每个服务一个仓库,服务器从这里拉取(中国大陆的服务器从上海的副本拉取)。镜像服务会被解析为 digest,所以回滚时运行的是完全相同的镜像。
- 应用。 应用服务配置;全部部署时,服务按依赖顺序应用,每个服务等待它的依赖就绪。
- 发布。 没有数据卷的服务零停机更新:新实例必须健康之后,旧实例才会停止。有数据卷的服务先停止再启动,确保不会有两个实例同时写同一份数据。
- 初始化。 如果服务有初始化命令(来自模板),会在服务启动前,用相同的镜像、变量和数据卷在一个任务中运行一次。
构建队列
Git 构建在 Zenavo 的构建机上运行,所有团队共享。一个团队同时运行的构建数取决于它的套餐(见用量与账单);更多的构建会等待,日志中会说明。
构建机繁忙时,空出来的构建机会分给套餐最高的等待中的构建:Team、Pro、Dev、Free 依次排列,同一套餐内先到先得。等待满 10 分钟的构建无论套餐都会排到下一个,所以不会有构建等太久。部署 Docker 镜像或数据库不需要构建,也不会在这里排队。
部署时 Zenavo 重启
Zenavo 的控制面偶尔会重启,比如在更新时。正在进行的部署会从中断的地方继续,日志里会写明(Control plane restarted; resuming from …):
- 构建时: 部署重新排队,再构建一次。
- 构建完成后: 直接部署已经构建好的镜像,不再重新构建。
- 发布时: 服务器会自己把发布做完。Zenavo 只应用还没轮到的服务,等其余服务就绪,然后照常把部署标记为成功或失败,并通知你。
如果当时某个服务的初始化命令(比如数据库迁移)正在运行,Zenavo 不会中止它,也不会再运行一次:部署会被标记为已中断,方便你确认命令的结果后再重新部署。一次部署最多在 2 次重启后继续,第 3 次重启时同样标记为已中断。其他操作(如备份、迁移项目)不会自动重做,而是标记为已中断,由你检查。
日志
每次部署的输出在 日志 → 构建日志 中,运行期间和结束后都可以查看。详见日志。