4.2. 使用 OpenShift 路由将 Argo Rollouts 配置为路由流量
您可以使用 OpenShift Routes 配置 Argo Rollouts 来创建路由、推出部署和服务。
以下示例步骤会创建一个路由、推出部署和两个服务。然后,它会将流量增加的百分比路由到应用的 canary 版本,然后该 Canary 状态标记为成功,并成为新的稳定版本。
先决条件
- 以管理员身份登录到 OpenShift Container Platform 集群。
- 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps。
- 您已在 OpenShift Container Platform 集群中安装了 Argo Rollouts。如需更多信息,请参阅"创建 RolloutManager 自定义资源"。
- 您已在系统上安装了 Red Hat OpenShift GitOps CLI。如需更多信息,请参阅"安装 GitOps CLI"。
- 您已在系统中安装了 Argo Rollouts CLI。如需更多信息,请参阅"Argo Rollouts CLI 概述"。
流程
创建
Route
对象。-
在 Web 控制台的 Administrator 视角中,点 Networking
Routes。 - 点击 Create Route。
在 Create Route 页面中,点 YAML 视图 并添加以下片断:以下示例创建一个名为
rollouts-demo-route
的路由:apiVersion: route.openshift.io/v1 kind: Route metadata: name: rollouts-demo-route spec: port: targetPort: http 1 tls: 2 insecureEdgeTerminationPolicy: Redirect termination: edge to: kind: Service name: argo-rollouts-stable-service 3 weight: 100 4 alternateBackends: - kind: Service name: argo-rollouts-canary-service 5 weight: 0 6
- 单击 Create 以创建路由。然后,它会在 Routes 页面中显示。
-
在 Web 控制台的 Administrator 视角中,点 Networking
创建要在路由中引用的服务 Canary 和 stable。
-
在 Web 控制台的 Administrator 视角中,点 Networking
Services。 - 点 Create Service。
在 Create Service 页面上,单击 YAML 视图 并添加以下代码片段:以下示例创建一个名为
argo-rollouts-canary-service
的 canary 服务。Canary 流量定向到此服务。apiVersion: v1 kind: Service metadata: name: argo-rollouts-canary-service spec: ports: 1 - port: 80 targetPort: http protocol: TCP name: http selector: 2 app: rollouts-demo
重要确保
Route
对象中指定的 canary 服务的名称与Service
对象中指定的 Canary 服务的名称匹配。单击 Create 以创建 Canary 服务。
rollouts 会自动使用 canary
ReplicaSet
的 pod 模板哈希更新创建的服务。例如:rollouts-pod-template-hash: 7bf84f9696
。重复这些步骤以创建 stable 服务:以下示例创建一个名为
argo-rollouts-stable-service
的 stable 服务。稳定的流量定向到此服务。apiVersion: v1 kind: Service metadata: name: argo-rollouts-stable-service spec: ports: 1 - port: 80 targetPort: http protocol: TCP name: http selector: 2 app: rollouts-demo
重要确保
Route
对象中指定的稳定服务名称与Service
对象中指定的 stable 服务的名称匹配。点 Create 创建 stable 服务。
rollouts 会自动使用 stable
ReplicaSet
的 pod 模板哈希更新创建的服务。例如:rollouts-pod-template-hash: 1b6a7733
。
-
在 Web 控制台的 Administrator 视角中,点 Networking
创建
Rollout
CR 以引用Route
和Service
对象。-
在 Web 控制台的 Administrator 视角中,进入 Operators
Installed Operators Red Hat OpenShift GitOps Rollout。 在 Create Rollout 页面上,点 YAML view 并添加以下代码片段:以下示例创建一个名为
rollouts-demo
的Rollout
CR:apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: rollouts-demo spec: template: 1 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 revisionHistoryLimit: 2 replicas: 5 strategy: canary: canaryService: argo-rollouts-canary-service 2 stableService: argo-rollouts-stable-service 3 trafficRouting: plugins: argoproj-labs/openshift: routes: - rollouts-demo-route 4 steps: 5 - setWeight: 30 - pause: {} - setWeight: 60 - pause: {} selector: 6 matchLabels: app: rollouts-demo
- 点 Create。
- 在 Rollout 选项卡中,验证 rollout 的 Status 字段显示 Phase: Healthy。
-
在 Web 控制台的 Administrator 视角中,进入 Operators
验证路由是否将 100% 的流量定向到应用程序的稳定版本。
注意创建
Rollout
资源的第一个实例时,rollout 规定了定向到 stable 和 canary 应用程序版本的流量数量。在初始实例中,Rollout
资源的创建会将所有流量路由到应用程序的稳定版本,并跳过流量发送到 canary 版本的部分。-
进入 Networking
Routes,并查找您要验证 的路由
资源。 选择 YAML 选项卡并查看以下片断:
示例:
Route
kind: Route metadata: name: rollouts-demo-route spec: alternateBackends: - kind: Service name: argo-rollouts-canary-service weight: 0 1 # (...) to: kind: Service name: argo-rollouts-stable-service weight: 100 2
-
进入 Networking
通过修改推出部署中部署的容器镜像,模拟应用程序的新 canary 版本。
-
在 Web 控制台的 Administrator 视角中,进入 Operators
Installed Operators Red Hat OpenShift GitOps Rollout。 选择现有的 Rollout 并将
.spec.template.spec.containers.image
值从argoproj/rollouts-demo:blue
改为argoproj/rollouts-demo:yellow
。因此,在 rollout 中部署的容器镜像会被修改,rollout 会启动新的 canary 部署。
注意根据
Rollout
资源的.spec.strategy.canary.steps
字段中定义的setWeight
属性,最初向路由的流量达到 canary 版本,70% 的流量被定向到稳定版本。rollout 在有 30% 的流量被定向到 Canary 版本后暂停。带有 30% 的流量的路由会定向到 Canary 版本,70% 定向到稳定版本。
spec: alternateBackends: - kind: Service name: argo-rollouts-canary-service weight: 30 # (...) to: kind: Service name: argo-rollouts-stable-service weight: 70
-
在 Web 控制台的 Administrator 视角中,进入 Operators
在 Argo Rollouts CLI 中运行以下命令来模拟另一个新的 canary 版本:
$ oc argo rollouts promote rollouts-demo -n <namespace> 1
- 1
- 指定定义
Rollout
资源的命名空间。
在 stable 版本中,这会将 canary 版本和 40% 的流量权重增加到 60%。
带有 60% 的流量的路由定向到 Canary 版本,40% 定向到稳定版本。
spec: alternateBackends: - kind: Service name: argo-rollouts-canary-service weight: 60 # (...) to: kind: Service name: argo-rollouts-stable-service weight: 40
运行以下命令,将 canary 版本中的流量权重增加到 100%,并丢弃应用程序的旧稳定版本中的流量:
$ oc argo rollouts promote rollouts-demo -n <namespace> 1
- 1
- 指定定义
Rollout
资源的命名空间。
带有 0% 的流量的示例路由定向到 Canary 版本,100% 定向到稳定版本。
spec: # (...) to: kind: Service name: argo-rollouts-stable-service weight: 100