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 概述"。

流程

  1. 创建 Route 对象。

    1. 在 Web 控制台的 Administrator 视角中,点 Networking Routes
    2. 点击 Create Route
    3. 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
      1
      指定应用程序用来在容器内运行的端口名称。
      2
      指定用于保护路由的 TLS 配置。
      3
      目标稳定服务的名称。
      4
      使用 Route Rollout 插件自动将此字段修改为稳定的权重。
      5
      目标 canary 服务的名称。
      6
      使用 Route Rollout 插件自动将此字段修改为 canary weight。
    4. 单击 Create 以创建路由。然后,它会在 Routes 页面中显示。
  2. 创建要在路由中引用的服务 Canary 和 stable。

    1. 在 Web 控制台的 Administrator 视角中,点 Networking Services
    2. Create Service
    3. 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
      1
      指定应用程序用来在容器内运行的端口名称。
      2
      确保 selector 字段的内容与 stable 服务和 Rollout 自定义资源(CR)相同。
      重要

      确保 Route 对象中指定的 canary 服务的名称与 Service 对象中指定的 Canary 服务的名称匹配。

    4. 单击 Create 以创建 Canary 服务。

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

    5. 重复这些步骤以创建 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
      1
      指定应用程序用来在容器内运行的端口名称。
      2
      确保 selector 字段的内容与 canary service 和 Rollout CR 相同。
      重要

      确保 Route 对象中指定的稳定服务名称与 Service 对象中指定的 stable 服务的名称匹配。

    6. Create 创建 stable 服务。

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

  3. 创建 Rollout CR 以引用 RouteService 对象。

    1. 在 Web 控制台的 Administrator 视角中,进入 Operators Installed Operators Red Hat OpenShift GitOps Rollout
    2. Create Rollout 页面上,点 YAML view 并添加以下代码片段:以下示例创建一个名为 rollouts-demoRollout 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
      1
      指定要创建的 pod。
      2
      这个值必须与创建的 canary Service 的名称匹配。
      3
      这个值必须与创建的 stable Service 的名称匹配。
      4
      这个值必须与创建的 Route CR 的名称匹配。
      5
      指定推出部署的步骤。这个示例逐步将 30%、60% 和 100% 流量路由到 Canary 版本。
      6
      确保 selector 字段的内容与 Canary 和 stable 服务中的相同。
    3. Create
    4. Rollout 选项卡中,验证 rollout 的 Status 字段显示 Phase: Healthy
  4. 验证路由是否将 100% 的流量定向到应用程序的稳定版本。

    注意

    创建 Rollout 资源的第一个实例时,rollout 规定了定向到 stable 和 canary 应用程序版本的流量数量。在初始实例中,Rollout 资源的创建会将所有流量路由到应用程序的稳定版本,并跳过流量发送到 canary 版本的部分。

    1. 进入 Networking Routes,并查找您要验证 的路由 资源。
    2. 选择 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

      1
      0 表示 0% 的流量被定向到 Canary 版本。
      2
      100 表示 100% 的流量被定向到稳定版本。
  5. 通过修改推出部署中部署的容器镜像,模拟应用程序的新 canary 版本。

    1. 在 Web 控制台的 Administrator 视角中,进入 Operators Installed Operators Red Hat OpenShift GitOps Rollout
    2. 选择现有的 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

  6. 在 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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.