3.2. 部署推出部署


作为集群管理员,您可以将 Argo Rollouts 配置为逐渐将用户流量的子集路由到新应用程序版本。然后您可以测试应用程序是否部署并正常工作。

以下示例步骤会创建一个 rollouts-demo rollout 和 service。然后,推出部署会将 20% 的流量路由到应用程序的 canary 版本,等待手动提升,然后执行多个自动化提升,直到其将整个流量路由到新应用程序版本。

流程

  1. 在 Web 控制台的 Administrator 视角中,点 Operators Installed Operators Red Hat OpenShift GitOps Rollout
  2. Project 下拉菜单中选择您要创建和配置 Rollout 自定义资源(CR)的项目。
  3. Create Rollout,然后在 YAML 视图中输入以下配置:

    apiVersion: argoproj.io/v1alpha1
    kind: Rollout
    metadata:
      name: rollouts-demo
    spec:
      replicas: 5
      strategy:
        canary: 1
          steps: 2
          - setWeight: 20 3
          - pause: {}  4
          - setWeight: 40
          - pause: {duration: 45}  5
          - setWeight: 60
          - pause: {duration: 20}
          - setWeight: 80
          - pause: {duration: 10}
      revisionHistoryLimit: 2
      selector:
        matchLabels:
          app: rollouts-demo
      template: 6
        metadata:
          labels:
            app: rollouts-demo
        spec:
          containers:
          - name: rollouts-demo
            image: argoproj/rollouts-demo:blue
            ports:
            - name: http
              containerPort: 8080
              protocol: TCP
            resources:
              requests:
                memory: 32Mi
                cpu: 5m
    1
    rollout 必须使用的部署策略。
    2
    指定推出部署的步骤。这个示例逐步将 20%、40%、60% 和 80% 的流量路由到 Canary 版本。
    3
    必须定向到 Canary 版本的流量百分比。20 表示 20% 的流量被定向到 Canary 版本。
    4
    指定 Argo Rollouts 控制器,以无限期暂停,直到找到用于提升的请求。
    5
    指定 Argo Rollouts 控制器在 45 秒期间暂停 45 秒。您可以以秒为单位设置持续时间值(s)、分钟(m)或小时(h)。例如,您可以指定 1h,表示一小时。如果没有指定值,则持续时间值默认为 seconds。
    6
    指定要创建的 pod。
  4. Create

    注意

    为确保推出部署在创建时快速可用,Argo Rollouts 控制器会自动将 argoproj/rollouts-demo:blue 初始容器镜像(在 .spec.template.spec.containers.image 字段中指定)视为稳定版本。在初始实例中,Rollout 资源的创建会将所有流量路由到应用程序的稳定版本,并跳过流量发送到 canary 版本的部分。但是,对于所有后续应用程序升级,对 .spec.template.spec.containers.image 字段进行修改,Argo Rollouts 控制器照常执行 canary 步骤。

  5. 运行以下命令验证您的 rollout 是否已正确创建:

    $ oc argo rollouts list rollouts -n <namespace> 1
    1
    指定定义 Rollout 资源的命名空间。

    输出示例

    NAME           STRATEGY   STATUS        STEP  SET-WEIGHT  READY  DESIRED  UP-TO-DATE  AVAILABLE
    rollouts-demo  Canary     Healthy       8/8   100         5/5    5        5           5

  6. 创建以 rollouts-demo rollout 为目标的 Kubernetes 服务。

    1. 在 Web 控制台的 Administrator 视角中,点 Networking Services
    2. Create Service,然后在 YAML 视图中输入以下配置:

      apiVersion: v1
      kind: Service
      metadata:
        name: rollouts-demo
      spec:
        ports: 1
        - port: 80
          targetPort: http
          protocol: TCP
          name: http
      
        selector: 2
          app: rollouts-demo
      1
      指定应用程序用来在容器内运行的端口名称。
      2
      确保 selector 字段的内容与 Rollout 自定义资源(CR)中的相同。
    3. Create

      rollouts 会自动使用 canary ReplicaSet 的 pod 模板哈希更新创建的服务。例如: rollouts-pod-template-hash: 687d76d795

  7. 运行以下命令监控推出部署的进度:

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
    1
    指定定义 Rollout 资源的命名空间。

    输出示例

    Name:            rollouts-demo
    Namespace:       spring-petclinic
    Status:          ✔ Healthy
    Strategy:        Canary
      Step:          8/8
      SetWeight:     100
      ActualWeight:  100
    Images:          argoproj/rollouts-demo:blue (stable)
    Replicas:
      Desired:       5
      Current:       5
      Updated:       5
      Ready:         5
      Available:     5
    
    NAME                                       KIND        STATUS     AGE    INFO
    ⟳ rollouts-demo                            Rollout     ✔ Healthy  4m50s
    └──# revision:1
       └──⧉ rollouts-demo-687d76d795           ReplicaSet  ✔ Healthy  4m50s  stable
          ├──□ rollouts-demo-687d76d795-75k57  Pod         ✔ Running  4m49s  ready:1/1
          ├──□ rollouts-demo-687d76d795-bv5zf  Pod         ✔ Running  4m49s  ready:1/1
          ├──□ rollouts-demo-687d76d795-jsxg8  Pod         ✔ Running  4m49s  ready:1/1
          ├──□ rollouts-demo-687d76d795-rsgtv  Pod         ✔ Running  4m49s  ready:1/1
          └──□ rollouts-demo-687d76d795-xrmrj  Pod         ✔ Running  4m49s  ready:1/1

    创建推出部署后,您可以验证 rollout 的 Status 字段显示 Phase: Healthy

  8. Rollout 选项卡中,验证 rollouts-demo rollout 的 Status 字段显示为 Phase: Healthy

    提示

    另外,您可以运行以下命令来验证 rollout 是否健康:

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

    输出示例

    Healthy

现在,您可以执行 Rollout CR 的 Canary 部署。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.