3.2. 部署推出部署
作为集群管理员,您可以将 Argo Rollouts 配置为逐渐将用户流量的子集路由到新应用程序版本。然后您可以测试应用程序是否部署并正常工作。
以下示例步骤会创建一个 rollouts-demo
rollout 和 service。然后,推出部署会将 20% 的流量路由到应用程序的 canary 版本,等待手动提升,然后执行多个自动化提升,直到其将整个流量路由到新应用程序版本。
流程
-
在 Web 控制台的 Administrator 视角中,点 Operators
Installed Operators Red Hat OpenShift GitOps Rollout。 -
从 Project 下拉菜单中选择您要创建和配置
Rollout
自定义资源(CR)的项目。 点 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。
点 Create。
注意为确保推出部署在创建时快速可用,Argo Rollouts 控制器会自动将
argoproj/rollouts-demo:blue
初始容器镜像(在.spec.template.spec.containers.image
字段中指定)视为稳定版本。在初始实例中,Rollout
资源的创建会将所有流量路由到应用程序的稳定版本,并跳过流量发送到 canary 版本的部分。但是,对于所有后续应用程序升级,对.spec.template.spec.containers.image
字段进行修改,Argo Rollouts 控制器照常执行 canary 步骤。运行以下命令验证您的 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
创建以
rollouts-demo
rollout 为目标的 Kubernetes 服务。-
在 Web 控制台的 Administrator 视角中,点 Networking
Services。 点 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
点 Create。
rollouts 会自动使用 canary
ReplicaSet
的 pod 模板哈希更新创建的服务。例如:rollouts-pod-template-hash: 687d76d795
。
-
在 Web 控制台的 Administrator 视角中,点 Networking
运行以下命令监控推出部署的进度:
$ 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。
在 Rollout 选项卡中,验证
rollouts-demo
rollout 的 Status 字段显示为 Phase: Healthy。提示另外,您可以运行以下命令来验证 rollout 是否健康:
$ oc argo rollouts status rollouts-demo -n <namespace> 1
- 1
- 指定定义
Rollout
资源的命名空间。
输出示例
Healthy
现在,您可以执行 Rollout
CR 的 Canary 部署。