3.5. 手动中止推出部署
在使用 canary 部署时,推出部署会部署一个应用程序的初始 Canary 版本。您可以手动或以编程方式验证它。验证 Canary 版本并将其提升到 stable 后,会为所有用户提供新的稳定版本。
但是,有时在 canary 版本中发现错误、错误或部署问题,您可能需要中止 canary rollout 并回滚到应用程序的稳定版本。
中止 canary rollout 会删除新 canary 版本的资源,并恢复应用程序的以前的稳定版本。所有被定向到 canary 的入口流量,如 ingress、route 或虚拟服务都将返回到原始稳定版本。
以下示例步骤部署应用程序的新 红色
Canary 版本,然后在完全提升为 stable 前中止它。
流程
更新容器镜像版本,并通过在 Argo Rollouts CLI
中运行以下命令
来修改argoproj/rollouts-demo:yellow
到argoproj/rollouts-demo:red
:$ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:red -n <namespace> 1
- 1
- 指定定义
Rollout
自定义资源(CR)的命名空间。
输出示例
rollout "rollouts-demo" image updated
在 rollout 中部署的容器镜像会被修改,rollout 会启动新的 canary 部署。
- 等待推出部署到达暂停状态。
运行以下命令,验证
rollouts-demo:red
canary 版本是否部署了 paused 状态:$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
- 1
- 指定定义
Rollout
CR 的命名空间。
输出示例
Name: rollouts-demo Namespace: spring-petclinic Status: ॥ Paused Message: CanaryPauseStep Strategy: Canary Step: 1/8 SetWeight: 20 ActualWeight: 20 Images: argoproj/rollouts-demo:red (canary) argoproj/rollouts-demo:yellow (stable) Replicas: Desired: 5 Current: 5 Updated: 1 Ready: 5 Available: 5 NAME KIND STATUS AGE INFO ⟳ rollouts-demo Rollout ॥ Paused 17m ├──# revision:3 │ └──⧉ rollouts-demo-5747959bdb ReplicaSet ✔ Healthy 75s canary │ └──□ rollouts-demo-5747959bdb-fdrsg Pod ✔ Running 75s ready:1/1 ├──# revision:2 │ └──⧉ rollouts-demo-6cf78c66c5 ReplicaSet ✔ Healthy 9m45s stable │ ├──□ rollouts-demo-6cf78c66c5-zrgd4 Pod ✔ Running 9m44s ready:1/1 │ ├──□ rollouts-demo-6cf78c66c5-2ptpp Pod ✔ Running 4m58s ready:1/1 │ ├──□ rollouts-demo-6cf78c66c5-tmk6c Pod ✔ Running 4m38s ready:1/1 │ └──□ rollouts-demo-6cf78c66c5-zv6lx Pod ✔ Running 4m27s ready:1/1 └──# revision:1 └──⧉ rollouts-demo-687d76d795 ReplicaSet • ScaledDown 17m
运行以下命令中止推出部署的更新:
$ oc argo rollouts abort rollouts-demo -n <namespace> 1
- 1
- 指定定义
Rollout
CR 的命名空间。
输出示例
rollout 'rollouts-demo' aborted
Argo Rollouts 控制器删除应用程序的 canary 资源,并回滚到稳定版本。
运行以下命令,在中止推出部署后验证 canary
ReplicaSet
是否已扩展到 0 个副本:$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
- 1
- 指定定义
Rollout
CR 的命名空间。
输出示例
Name: rollouts-demo Namespace: spring-petclinic Status: ✖ Degraded Message: RolloutAborted: Rollout aborted update to revision 3 Strategy: Canary Step: 0/8 SetWeight: 0 ActualWeight: 0 Images: argoproj/rollouts-demo:yellow (stable) Replicas: Desired: 5 Current: 5 Updated: 0 Ready: 5 Available: 5 NAME KIND STATUS AGE INFO ⟳ rollouts-demo Rollout ✖ Degraded 24m ├──# revision:3 │ └──⧉ rollouts-demo-5747959bdb ReplicaSet • ScaledDown 7m38s canary ├──# revision:2 │ └──⧉ rollouts-demo-6cf78c66c5 ReplicaSet ✔ Healthy 16m stable │ ├──□ rollouts-demo-6cf78c66c5-zrgd4 Pod ✔ Running 16m ready:1/1 │ ├──□ rollouts-demo-6cf78c66c5-2ptpp Pod ✔ Running 11m ready:1/1 │ ├──□ rollouts-demo-6cf78c66c5-tmk6c Pod ✔ Running 11m ready:1/1 │ ├──□ rollouts-demo-6cf78c66c5-zv6lx Pod ✔ Running 10m ready:1/1 │ └──□ rollouts-demo-6cf78c66c5-mlbsh Pod ✔ Running 4m47s ready:1/1 └──# revision:1 └──⧉ rollouts-demo-687d76d795 ReplicaSet • ScaledDown 24m
rollout 状态标记为
Degraded
,这表示即使应用程序已回滚到以前的稳定版本yellow
,但 rollout 目前不在所需的版本red
中,它已在.spec.template.spec.containers.image
字段中设置。注意Degraded
状态不反映应用程序的健康状况。它仅表示想要和运行容器镜像版本之间存在不匹配。运行以下命令,将容器镜像版本更新至以前的稳定版本
yellow
,并修改.spec.template.spec.containers.image
值:$ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow -n <namespace> 1
- 1
- 指定定义
Rollout
CR 的命名空间。
输出示例
rollout "rollouts-demo" image updated
rollout 会跳过分析和提升步骤,回滚到以前的稳定版本,
黄色
,并快速跟踪 stableReplicaSet
的部署。运行以下命令,验证 rollout 状态是否马上标记为
Healthy
:$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
- 1
- 指定定义
Rollout
CR 的命名空间。
输出示例
Name: rollouts-demo Namespace: spring-petclinic Status: ✔ Healthy Strategy: Canary Step: 8/8 SetWeight: 100 ActualWeight: 100 Images: argoproj/rollouts-demo:yellow (stable) Replicas: Desired: 5 Current: 5 Updated: 5 Ready: 5 Available: 5 NAME KIND STATUS AGE INFO ⟳ rollouts-demo Rollout ✔ Healthy 63m ├──# revision:4 │ └──⧉ rollouts-demo-6cf78c66c5 ReplicaSet ✔ Healthy 55m stable │ ├──□ rollouts-demo-6cf78c66c5-zrgd4 Pod ✔ Running 55m ready:1/1 │ ├──□ rollouts-demo-6cf78c66c5-2ptpp Pod ✔ Running 50m ready:1/1 │ ├──□ rollouts-demo-6cf78c66c5-tmk6c Pod ✔ Running 50m ready:1/1 │ ├──□ rollouts-demo-6cf78c66c5-zv6lx Pod ✔ Running 50m ready:1/1 │ └──□ rollouts-demo-6cf78c66c5-mlbsh Pod ✔ Running 44m ready:1/1 ├──# revision:3 │ └──⧉ rollouts-demo-5747959bdb ReplicaSet • ScaledDown 46m └──# revision:1 └──⧉ rollouts-demo-687d76d795 ReplicaSet • ScaledDown 63m