3.5. 手动中止推出部署


在使用 canary 部署时,推出部署会部署一个应用程序的初始 Canary 版本。您可以手动或以编程方式验证它。验证 Canary 版本并将其提升到 stable 后,会为所有用户提供新的稳定版本。

但是,有时在 canary 版本中发现错误、错误或部署问题,您可能需要中止 canary rollout 并回滚到应用程序的稳定版本。

中止 canary rollout 会删除新 canary 版本的资源,并恢复应用程序的以前的稳定版本。所有被定向到 canary 的入口流量,如 ingress、route 或虚拟服务都将返回到原始稳定版本。

以下示例步骤部署应用程序的新 红色 Canary 版本,然后在完全提升为 stable 前中止它。

流程

  1. 更新容器镜像版本,并通过在 Argo Rollouts CLI 中运行以下命令 来修改 argoproj/rollouts-demo:yellowargoproj/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 部署。

  2. 等待推出部署到达暂停状态。
  3. 运行以下命令,验证 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

  4. 运行以下命令中止推出部署的更新:

    $ oc argo rollouts abort rollouts-demo -n <namespace> 1
    1
    指定定义 Rollout CR 的命名空间。

    输出示例

    rollout 'rollouts-demo' aborted

    Argo Rollouts 控制器删除应用程序的 canary 资源,并回滚到稳定版本。

  5. 运行以下命令,在中止推出部署后验证 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 状态不反映应用程序的健康状况。它仅表示想要和运行容器镜像版本之间存在不匹配。

  6. 运行以下命令,将容器镜像版本更新至以前的稳定版本 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 会跳过分析和提升步骤,回滚到以前的稳定版本,黄色,并快速跟踪 stable ReplicaSet 的部署。

  7. 运行以下命令,验证 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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.