无停机变更部署
Goal
新镜像无缝接管流量,如果新镜像未通过健康检查,系统会自动回滚到旧版本。
Before you start
- 一个具有
exec类型健康检查且实际运行的部署。没有健康检查,就无法知晓就绪状态,且前置条件会被检查。 - 没有读写命名卷、没有可写绑定挂载、也没有发布节点端口:两个版本无法共享这些资源。
- 您自己证明两个版本可以短暂同时运行。这永远不会被推断出来。
Steps
- 打开部署并选择更新策略。
- 选择滚动策略,确认允许并发版本,并设置激增和不可用数量。
- 设置健康超时、驻留时间和整个滚动更新的截止时间。
- 选择如果未完成时的操作:暂停或回滚。
- 更改镜像并部署。

Steps
- 在 spec 中添加一个
update块,包含策略、证明和时间设置。 - 更改同一文档中的镜像。
- 应用它。字段名称和默认值请参阅 部署参考。
Steps
PUT /api/v1/deployments/{name}携带更新策略和新镜像。GET /api/v1/deployments/{name}以观察副本的切换过程。POST /api/v1/deployments/{name}/rollback以手动回滚到先前的修订版本。
Steps
odysseus rollback和odysseus history检查并回滚滚动更新。- 变更本身通过 API 或仪表板进行:
odysseus deploy会写入控制平面不再协调的旧式扁平路径,并在运行时告知这一点。
Verify
在变更期间,副本计数永远不会低于您设定的最小值,并且部署最终会使用新镜像,且每个副本都处于健康状态。
仅更改副本数不属于滚动更新,也无需执行滚动更新。扩大或缩小集群会增加或移除容器,而保持现有运行容器不变,因此唯一需要检查的是新的副本数。平台通过将现有容器与其构建时的规格进行比较来决定是否需要替换它,而副本数不属于该规格的一部分——它决定数量,而非内容。
Evidence this worked
GET /api/v1/deployments/{name}/history 列出了创建的修订版本,且部署的当前镜像已是新版本。若触发了回滚操作,则之前的修订版本将保持为当前状态——历史记录是区分“操作成功”与“已为您回滚”的依据。