Argo Rollouts


Red Hat OpenShift GitOps 1.13

请在这里输入简短描述。

Red Hat OpenShift Documentation Team

摘要

本书的主题和目的的简短概述,一般不多于一个段落。

第 1 章 Argo Rollouts 概述

在 GitOps 上下文中,进度交付是一个以受控和逐步方式发布应用程序更新的过程。通过只向用户的子集公开新版本的应用更新,从而降低了发行版本的风险。这个过程涉及持续观察和分析这个新应用程序版本,以验证其行为是否与要求和预期集匹配。验证过程会逐渐向更广泛的和更广泛的受众公开应用程序更新。

OpenShift Container Platform 通过使用路由来分隔不同服务间的网络数据来实现渐进式交付的功能,但这通常需要人工的干预和管理。

使用 Argo Rollouts 作为集群管理员,您可以自动化进度部署交付,并管理 Kubernetes 和 OpenShift Container Platform 集群上托管的应用程序的进度部署。Argo Rollouts 是一个具有自定义资源定义(CRD)的控制器,它提供高级部署功能,如蓝绿、canary、canary Canary 分析和实验等高级部署功能。

1.1. 为什么使用 Argo Rollouts?

作为集群管理员,在传统基础架构中管理和协调高级部署策略通常涉及长时间维护窗口。使用 OpenShift Container Platform 和 Red Hat OpenShift GitOps 等工具实现自动化可以减少这些窗口,但设置这些策略仍具有挑战性。

使用 Argo Rollouts 通过允许应用程序团队以声明性方式定义其 rollout 策略来简化进度交付。团队不再需要定义多个部署和服务,或为测试的流量控制和集成创建自动化。

您可以使用以下原因来使用 Argo Rollouts:

  • 您的用户可以在最终用户环境中更轻松地采用进度交付。
  • 通过 Argo Rollouts 的可用结构和指南,您的团队不必了解流量管理器和复杂基础架构。
  • 在更新过程中,您可以根据部署策略,通过逐步将流量转换为新版本来优化已部署应用程序版本的现有流量限制能力。
  • 您可以将 Argo Rollouts 与 Prometheus 等指标供应商相结合,根据参数集进行基于指标和策略驱动的推出部署和回滚。
  • 您的最终用户环境可获取 Red Hat OpenShift GitOps Operator 的安全性,并帮助管理资源、成本和时间。
  • 您的现有用户使用 Argo CD 进行安全性和自动化部署的用户会提前获得相应的反馈,以避免对它们造成影响的问题。

1.1.1. Argo Rollouts 的好处

在 Red Hat OpenShift GitOps 中使用 Argo Rollouts 作为默认工作负载提供以下优点:

  • 作为 GitOps 工作流的一部分的自动化进度交付
  • 高级部署功能
  • 优化现有的高级部署策略,如 blue-green 或 canary
  • 部署可以实现零停机时间更新
  • 细粒度、加权流量转换
  • 能够在没有达到生产环境的新流量的情况下进行测试
  • 自动回滚和提升
  • 手工调整
  • 可自定义的指标查询和分析业务关键性能指标 (KPI)
  • 与 ingress 控制器和 Red Hat OpenShift Service Mesh 集成用于高级流量路由
  • 与指标供应商集成以进行部署策略分析
  • 使用多个供应商

1.2. 关于 RolloutManager 自定义资源和规格

要使用 Argo Rollouts,您必须在集群中安装 Red Hat OpenShift GitOps Operator,然后在您选择的命名空间中创建 RolloutManager 自定义资源 (CR) 并将其提交到 Operator。您可以为单个或多个命名空间限定 RolloutManager CR。Operator 创建一个带有以下命名空间范围的支持资源的 argo-rollouts 实例:

  • Argo Rollouts 控制器
  • Argo Rollouts 指标服务
  • Argo Rollouts 服务帐户
  • Argo Rollouts 角色
  • Argo Rollouts 角色绑定
  • Argo Rollouts secret

您可以在 RolloutsManager CR 的 spec 中指定命令参数、环境变量、自定义镜像名称等。RolloutManager CR spec 定义 Argo Rollouts 的所需状态。

示例: RolloutManager CR

apiVersion: argoproj.io/v1alpha1
kind: RolloutManager
metadata:
  name: argo-rollout
  labels:
    example: basic
spec: {}
Copy to Clipboard Toggle word wrap

1.2.1. Argo Rollouts 控制器

使用 Argo Rollouts 控制器资源,您可以管理命名空间中的渐进式应用程序交付。Argo Rollouts 控制器资源监控集群的事件,并在任何与 Argo Rollouts 相关的资源有变化时做出反应。控制器读取所有推出部署详情,并将集群引入相同的状态,如 rollout 定义中所述。

1.3. Argo Rollouts 架构概述

通过安装 Red Hat OpenShift GitOps Operator 并配置 RolloutManager 自定义资源(CR)实例,在集群中启用了 Argo Rollouts 支持。

创建 RolloutManager CR 后,Red Hat OpenShift GitOps Operator 会将 Argo Rollouts 安装到同一命名空间中。此步骤包括安装 Argo Rollouts 控制器,以及处理 Argo Rollouts 所需的资源,如 CR、角色、角色绑定和配置数据。

Argo Rollouts 控制器以两种不同的模式安装:

  • 集群范围的模式 (默认):控制器在集群的所有命名空间中超载资源。
  • 命名空间范围的模式 :控制器监控部署 Argo Rollouts 的命名空间中的资源。

Argo Rollouts 的架构构建为组件和资源。组件用于管理资源。例如,A AnalysisRun 控制器管理 AnalysisRun CR。

Argo Rollouts 包括收集分析指标的多个机制,以验证是否部署了新应用程序版本:

  • Prometheus metrics: AnalysisTemplate CR 配置为连接到 Prometheus 实例,以评估一个或多个指标的成功或失败。
  • Kubernetes 作业指标 :Argo Rollouts 支持 Kubernetes 任务 资源,对资源指标运行分析。您可以根据成功运行 Kubernetes 作业,验证应用程序是否成功部署。

1.3.1. Argo Rollouts 组件

Argo Rollouts 由多个组件组成,允许用户在 OpenShift Container Platform 中练习进度交付。

Expand
表 1.1. Argo Rollouts 组件
Name描述

Argo Rollouts 控制器

Argo Rollouts Controller 是标准 Deployment 资源的替代方案,并与之合作。此控制器只响应 Argo Rollouts 资源中的更改,并管理 Rollout CR。Argo Rollouts Controller 不会修改标准部署资源。

AnalysisRun 控制器

AnalysisRun 控制器管理并执行 AnalysisRunAnalysisTemplate CR 的分析。它将推出部署连接到指标提供程序,并为指标定义阈值,来确定应用程序的部署更新是否成功。

试用控制器

Experiment 控制器在短期副本集上运行分析,并管理 Experiment 自定义资源。控制器也可以通过在 canary 部署策略 字段中的 试验 步骤与 Rollout 资源集成。

服务和 Ingress 控制器

Service 控制器管理 Service 资源,Ingress 控制器管理由 Argo Rollouts 修改的 Ingress 资源。这些控制器在应用程序实例中注入额外的元数据注解,以进行流量管理。

Argo Rollouts CLI 和 UI

Argo Rollouts 支持名为 Argo Rollouts CLI 的 oc/kubectl 插件。您可以从命令行与 rollouts、analyses 和 experiments 等资源交互。它可以执行操作,如 暂停提升重试。Argo Rollouts CLI 插件可以在浏览器中启动本地 Web UI 仪表板,以增强视觉化 Argo Rollouts 资源的体验。

1.3.2. Argo Rollouts 资源

Argo Rollout 组件管理几个资源以启用进度交付:

  • 特定于推出部署的资源 :例如,Rollout、AAnalysisRunExperiment
  • Kubernetes 网络资源 :例如,用于网络流量的 ServiceIngressRoute。Argo Rollouts 与这些资源集成,称为流量管理。

这些资源对于通过 Rollout CR 自定义应用程序部署至关重要。

Argo Rollouts 支持以下操作:

  • 路由 canary 部署基于百分比的流量。
  • 使用 ServiceIngress 资源将传入的用户流量转发到正确的应用程序版本。
  • 使用多个机制来收集分析指标,以验证应用的部署。
Expand
表 1.2. Argo Rollouts 资源
Name描述

rollout

此 CR 使用 Canary 或蓝绿部署策略启用应用程序的部署。它取代了内置的 Kubernetes Deployment 资源。

AnalysisRun

此 CR 用于执行分析,并汇总分析结果,将用户指导用户成功部署应用程序。AnalysisRun CR 是 AnalysisTemplate CR 的实例。

AnalysisTemplate

AnalysisTemplate CR 是一个模板文件,提供有关如何查询指标的说明。这些指令的结果以 AnalysisRun CR 的形式附加到推出部署中。AnalysisTemplate CR 可以在集群或特定推出部署上进行全局定义。您可以通过创建 Experiment 自定义资源来链接要在副本集上使用的 AnalysisTemplate 列表。

试用

Experiment CR 用于在部署过程中对应用程序运行简短分析,以确保正确部署应用程序。Experiment CR 可以独立使用,或作为 Rollout CR 的一部分运行。

服务和 Ingress

Argo Rollouts 使用 Service 和 Ingress 控制器通过服务和入口控制器原生支持路由流量。

RouteVirtualService

OpenShift Route 和 Red Hat OpenShift Service Mesh VirtualService 资源用于在不同应用程序版本间执行流量分割。

1.4. Argo Rollouts CLI 概述

您可以使用 Argo Rollouts CLI (是可选的插件)直接管理和监控 Argo Rollouts 资源,绕过使用 OpenShift Container Platform Web 控制台或 CLI (oc)的需求。

使用 Argo Rollouts CLI 插件,您可以执行以下操作:

  • 更改 Argo Rollouts 镜像。
  • 监控 Argo Rollouts 提升的进度。
  • 在 canary 部署中继续执行提升步骤。
  • 终止失败的 Argo Rollouts 部署。

Argo Rollouts CLI 插件直接与 ockubectl 命令集成。

要使用 Argo Rollouts 并管理进度交付,请在集群上安装 {gitops-titel} Operator 后,您可以在您选择的命名空间中创建和配置 RolloutManager 自定义资源(CR)实例。您可以为单个或多个命名空间限定 RolloutManager CR。

2.1. 先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 访问 OpenShift Container Platform web 控制台。
  • 在集群中安装了 Red Hat OpenShift GitOps 1.9.0 或更新的版本。

2.2. 创建 RolloutManager 自定义资源

要使用 Red Hat OpenShift GitOps 中的 Argo Rollouts 管理部署的进度交付,您必须在您选择的命名空间中创建并配置 RolloutManager 自定义资源 (CR)。默认情况下,任何新的 argo-rollouts 实例都只能管理部署它的命名空间中的资源,但您可以根据需要在多个命名空间中使用 Argo Rollouts。

先决条件

  • 在集群中安装了 Red Hat OpenShift GitOps 1.9.0 或更新的版本。

流程

  1. 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
  2. Administrator 视角中,点 OperatorsInstalled Operators
  3. Project 下拉菜单中选择您要创建和配置 RolloutManager 自定义资源 (CR) 的项目。
  4. 从安装的 Operator 中选择 Red Hat OpenShift GitOps
  5. Details 选项卡中,在 Provided APIs 部分下,点 RolloutManager 窗格中的 Create instance
  6. Create RolloutManager 页面中,选择 YAML 视图,并使用默认 YAML 或根据您的要求编辑它:

    示例: RolloutManager CR

    apiVersion: argoproj.io/v1alpha1
    kind: RolloutManager
    metadata:
      name: argo-rollout
      labels:
        example: basic
    spec: {}
    Copy to Clipboard Toggle word wrap

  7. Create
  8. RolloutManager 选项卡中,在 RolloutManagers 部分下,验证 RolloutManager 实例的 Status 字段显示为 Phase: Available
  9. 在左侧导航窗格中,验证命名空间范围的支持资源的创建:

    • WorkloadsDeployments 来验证 argo-rollouts 部署是否可用,Status 显示为 1 of 1 pods running。
    • WorkloadsSecrets 来验证 argo-rollouts-notification-secret secret 是否可用。
    • NetworkingServices 来验证 argo-rollouts-metrics 服务是否可用。
    • User ManagementRoles 来验证 argo-rollouts 角色和 argo-rollouts-aggregate-to-adminargo-rollouts-aggregate-to-edit 以及 argo-rollouts-aggregate-to-view 集群角色是否可用。
    • User ManagementRoleBindings 来验证 argo-rollouts 角色绑定是否可用。

2.3. 删除 RolloutManager 自定义资源

卸载 Red Hat OpenShift GitOps Operator 不会删除在安装过程中创建的资源。在卸载 Red Hat OpenShift GitOps Operator 前,您必须手动删除 RolloutManager 自定义资源(CR)。

先决条件

  • 在集群中安装了 Red Hat OpenShift GitOps 1.9.0 或更新的版本。
  • 命名空间中已存在 RolloutManager CR。

流程

  1. 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
  2. Administrator 视角中,点 OperatorsInstalled Operators
  3. Project 下拉菜单,再选择包含 RolloutManager CR 的项目。
  4. 从安装的 Operator 中选择 Red Hat OpenShift GitOps
  5. RolloutManager 选项卡,以查找 RolloutManagers 部分下的 RolloutManager 实例。
  6. 点实例。
  7. 从下拉菜单中选择 ActionsDelete RolloutManager,然后点 Delete 在对话框中进行确认。
  8. RolloutManager 选项卡中,在 RolloutManagers 部分下,验证 RolloutManager 实例已不再可用。
  9. 在左侧导航窗格中,验证删除命名空间范围的支持资源:

    • WorkloadsDeployments 来验证 argo-rollouts 部署已被删除。
    • WorkloadsSecrets 来验证 argo-rollouts-notification-secret secret 已被删除。
    • NetworkingServices 来验证 argo-rollouts-metrics 服务已被删除。
    • User ManagementRoles 来验证 argo-rollouts 角色和 argo-rollouts-aggregate-to-adminargo-rollouts-aggregate-to-edit 以及 argo-rollouts-aggregate-to-view 集群角色已被删除。
    • User ManagementRoleBindings 来验证 argo-rollouts 角色绑定已被删除。

2.4. 在 Linux 上安装 Argo Rollouts CLI

您可以在 Linux 上安装 Argo Rollouts CLI。

先决条件

  • 已安装 OpenShift Container Platform CLI (oc)。

流程

  1. 运行以下命令,下载 Argo Rollouts CLI 二进制文件 kubectl-argo-rollouts 的最新版本:

    $ curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,确保 kubectl-argo-rollouts 二进制文件可执行:

    $ chmod +x ./kubectl-argo-rollouts-linux-amd64
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,将 kubectl-argo-rollouts 二进制文件移到系统路径中:

    # mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
    Copy to Clipboard Toggle word wrap
    重要

    确保您有超级用户权限来运行这个命令。

  4. 运行以下命令并收到类似的输出来验证插件是否已正确安装:

    $ oc argo rollouts version
    Copy to Clipboard Toggle word wrap

    输出示例

    kubectl-argo-rollouts: v1.6.6+737ca89
      BuildDate: 2024-02-13T15:39:31Z 
    1
    
      GitCommit: 737ca89b42e4791e96e05b438c2b8540737a2a1a
      GitTreeState: clean
      GoVersion: go1.20.14 
    2
    
      Compiler: gc
      Platform: linux/amd64 
    3
    Copy to Clipboard Toggle word wrap

    1
    Argo Rollouts 二进制文件的构建日期信息。
    2
    用于构建 Argo Rollouts 二进制文件的 Go 语言版本。
    3
    用于构建 Argo Rollouts 二进制文件的平台。

2.5. 在 Mac OS 上安装 Argo Rollouts CLI

如果您是 macOS 用户,您可以使用 Homebrew 软件包管理器安装 Argo Rollouts CLI。

先决条件

  • 已安装 Homebrew (brew)软件包管理器。

流程

  • 运行以下命令来安装 Argo Rollouts CLI:

    $ brew install argoproj/tap/kubectl-argo-rollouts
    Copy to Clipboard Toggle word wrap

第 3 章 Argo Rollouts 入门

Argo Rollouts 支持 Canary蓝绿部署 策略。本指南提供了使用 canary 部署策略来帮助您部署、更新、提升和手动中止推出部署的示例。

使用基于 canary 的部署策略,您可以在两个应用程序版本间分割流量:

  • Canary 版本 :您逐步路由流量的应用程序的新版本。
  • 稳定版本 :应用程序的当前版本。在 canary 版本稳定并且所有用户流量定向到它后,它会成为新的稳定版本。之前的稳定版本将被丢弃。

3.1. 先决条件

  • 以管理员身份登录到 OpenShift Container Platform 集群。
  • 访问 OpenShift Container Platform web 控制台。
  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps
  • 您已在 OpenShift Container Platform 集群中安装了 Argo Rollouts
  • 您已在系统中安装了 Argo Rollouts CLI

3.2. 部署推出部署

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

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

流程

  1. 在 Web 控制台的 Administrator 视角中,点 OperatorsInstalled OperatorsRed Hat OpenShift GitOpsRollout
  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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

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

    1. 在 Web 控制台的 Administrator 视角中,点 NetworkingServices
    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
      Copy to Clipboard Toggle word wrap
      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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

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

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

    提示

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

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

    输出示例

    Healthy
    Copy to Clipboard Toggle word wrap

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

3.3. 更新推出部署

当您使用对 .spec.template.spec 字段的修改来更新 Rollout 自定义资源(CR)时,例如容器镜像版本,然后使用更新的容器镜像版本通过 ReplicaSet 创建新的 pod。

流程

  1. 通过修改推出部署中部署的容器镜像,模拟应用程序的新 canary 版本。

    1. 在 Web 控制台的 Administrator 视角中,进入 OperatorsInstalled OperatorsRed Hat OpenShift GitOpsRollout
    2. 选择现有的 rollouts-demo rollout,并在 YAML 视图中修改 .spec.template.spec.containers.image 值从 argoproj/rollouts-demo:blue 改为 argoproj/rollouts-demo:yellow
    3. 单击 Save,然后单击 Reload

      在 rollout 中部署的容器镜像会被修改,rollout 会启动新的 canary 部署。

      注意

      根据 Rollout CR 的 .spec.strategy.canary.steps 字段中定义的 setWeight 属性,最初到路由的 20% 到达 canary 版本,并且 rollout 会无限期暂停,直到收到提升请求为止。

      带有 20% 的流量路由到 canary 版本和 rollout 的路由会无限期暂停,直到后续步骤中指定用于提升的请求

      spec:
        replicas: 5
        strategy:
          canary: 
      1
      
            steps: 
      2
      
            - setWeight: 20 
      3
      
            - pause: {}  
      4
      
        # (...)
      Copy to Clipboard Toggle word wrap

      1
      rollout 必须使用的部署策略。
      2
      推出部署的步骤。这个示例逐步将 20%、40%、60% 和 80% 的流量路由到 Canary 版本。
      3
      必须定向到 Canary 版本的流量百分比。20 表示 20% 的流量被定向到 Canary 版本。
      4
      Argo Rollouts 控制器的规格,以无限期暂停,直到找到用于提升的请求。
  2. 运行以下命令监控推出部署的进度:

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    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:blue (stable)
                     argoproj/rollouts-demo:yellow (canary)
    Replicas:
      Desired:       5
      Current:       5
      Updated:       1
      Ready:         5
      Available:     5
    
    NAME                                       KIND        STATUS     AGE    INFO
    ⟳ rollouts-demo                            Rollout     ॥ Paused   9m51s
    ├──# revision:2
    │  └──⧉ rollouts-demo-6cf78c66c5           ReplicaSet  ✔ Healthy  99s    canary
    │     └──□ rollouts-demo-6cf78c66c5-zrgd4  Pod         ✔ Running  98s    ready:1/1
    └──# revision:1
       └──⧉ rollouts-demo-687d76d795           ReplicaSet  ✔ Healthy  9m51s  stable
          ├──□ rollouts-demo-687d76d795-75k57  Pod         ✔ Running  9m50s  ready:1/1
          ├──□ rollouts-demo-687d76d795-jsxg8  Pod         ✔ Running  9m50s  ready:1/1
          ├──□ rollouts-demo-687d76d795-rsgtv  Pod         ✔ Running  9m50s  ready:1/1
          └──□ rollouts-demo-687d76d795-xrmrj  Pod         ✔ Running  9m50s  ready:1/1
    Copy to Clipboard Toggle word wrap

    rollout 现在处于暂停状态,因为 rollout 的更新策略配置中没有指定暂停持续时间。

  3. 重复上一步来测试新部署的应用程序版本,并确保它按预期工作。例如,通过浏览器与应用交互并尝试运行测试或观察容器日志来验证应用。

    推出部署将保持暂停,直到您将其提升到下一步。

验证新版本应用程序是否按预期工作后,您可以决定是否继续提升或中止推出部署。因此,请按照 "Promoting the rollout" 或 "Manually abort the rollout" 中的说明进行操作。

3.4. 提升推出部署

因为您的推出部署现在处于暂停状态,作为集群管理员,因此您必须手动提升推出部署以允许其进入下一步。

流程

  1. 在 Argo Rollouts CLI 中运行以下命令来模拟另一个新的 canary 版本:

    $ oc argo rollouts promote rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定定义 Rollout 资源的命名空间。

    输出示例

    rollout 'rollouts-demo' promoted
    Copy to Clipboard Toggle word wrap

    这会在 canary 版本中将流量权重增加到 40%。

  2. 运行以下命令,验证推出部署是否通过步骤的其余部分:

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

    因为 Rollout CR 中定义的其余步骤设置了持续时间,例如 pause: {duration: 45},所以 Argo Rollouts 控制器会等待该持续时间,然后自动移到下一步。

    成功完成所有步骤后,新的 ReplicaSet 对象会被标记为 stable 副本集。

    输出示例

    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     14m
    ├──# revision:2
    │  └──⧉ rollouts-demo-6cf78c66c5           ReplicaSet  ✔ Healthy     6m5s  stable
    │     ├──□ rollouts-demo-6cf78c66c5-zrgd4  Pod         ✔ Running     6m4s  ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-g9kd5  Pod         ✔ Running     2m4s  ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-2ptpp  Pod         ✔ Running     78s   ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-tmk6c  Pod         ✔ Running     58s   ready:1/1
    │     └──□ rollouts-demo-6cf78c66c5-zv6lx  Pod         ✔ Running     47s   ready:1/1
    └──# revision:1
       └──⧉ rollouts-demo-687d76d795           ReplicaSet  • ScaledDown  14m
    Copy to Clipboard Toggle word wrap

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
    Copy to Clipboard Toggle word wrap
    1
    指定定义 Rollout 自定义资源(CR)的命名空间。

    输出示例

    rollout "rollouts-demo" image updated
    Copy to Clipboard Toggle word wrap

    在 rollout 中部署的容器镜像会被修改,rollout 会启动新的 canary 部署。

  2. 等待推出部署到达暂停状态。
  3. 运行以下命令,验证 rollouts-demo:red canary 版本是否部署了 paused 状态:

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

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

    $ oc argo rollouts abort rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定定义 Rollout CR 的命名空间。

    输出示例

    rollout 'rollouts-demo' aborted
    Copy to Clipboard Toggle word wrap

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

  5. 运行以下命令,在中止推出部署后验证 canary ReplicaSet 是否已扩展到 0 个副本:

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

    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
    Copy to Clipboard Toggle word wrap
    1
    指定定义 Rollout CR 的命名空间。

    输出示例

    rollout "rollouts-demo" image updated
    Copy to Clipboard Toggle word wrap

    rollout 会跳过分析和提升步骤,回滚到以前的稳定版本,黄色,并快速跟踪 stable ReplicaSet 的部署。

  7. 运行以下命令,验证 rollout 状态是否马上标记为 Healthy

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

第 4 章 使用 Argo Rollouts 路由流量

您可以使用 Argo Rollouts 及其流量分割机制,逐步将用户流量的子集路由到一个新的应用程序版本。然后您可以测试应用程序是否部署并正常工作。

使用 Openshift Routes,您可以配置 Argo Rollouts,以减少或增加流量数量,方法是将其定向到集群环境中的各种应用程序。

您可以使用 OpenShift Routes 在两个应用程序版本间分割流量:

  • Canary 版本 :您逐步路由流量的应用程序的新版本。
  • 稳定版本 :应用程序的当前版本。在 canary 版本稳定并且所有用户流量定向到它后,它会成为新的稳定版本。之前的稳定版本将被丢弃。

4.1. 先决条件

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

    1. 在 Web 控制台的 Administrator 视角中,点 NetworkingServices
    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
      Copy to Clipboard Toggle word wrap
      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
      Copy to Clipboard Toggle word wrap
      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 视角中,进入 OperatorsInstalled OperatorsRed Hat OpenShift GitOpsRollout
    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
      Copy to Clipboard Toggle word wrap
      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. 进入 NetworkingRoutes,并查找您要验证 的路由 资源。
    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
      Copy to Clipboard Toggle word wrap

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

    1. 在 Web 控制台的 Administrator 视角中,进入 OperatorsInstalled OperatorsRed Hat OpenShift GitOpsRollout
    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
      Copy to Clipboard Toggle word wrap

  6. 在 Argo Rollouts CLI 中运行以下命令来模拟另一个新的 canary 版本:

    $ oc argo rollouts promote rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

  7. 运行以下命令,将 canary 版本中的流量权重增加到 100%,并丢弃应用程序的旧稳定版本中的流量:

    $ oc argo rollouts promote rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定定义 Rollout 资源的命名空间。

    带有 0% 的流量的示例路由定向到 Canary 版本,100% 定向到稳定版本。

    spec:
      # (...)
      to:
        kind: Service
        name: argo-rollouts-stable-service
        weight: 100
    Copy to Clipboard Toggle word wrap

Red Hat OpenShift GitOps 支持 Argo Rollouts 安装的两种模式:

  • 集群范围的安装 (默认):任何命名空间中定义的 Argo Rollouts 自定义资源(CR)由 Argo Rollouts 实例协调。因此,您可以在集群的任意命名空间中使用 Argo Rollouts CR。
  • 命名空间范围的安装 :Argo Rollouts 实例安装在特定命名空间中,并只处理同一命名空间中的 Argo Rollouts CR。这个安装模式包括以下优点:

    • 这个模式不需要集群范围的 ClusterRoleClusterRoleBinding 权限。您可以在单一命名空间中安装和使用 Argo Rollouts,而无需集群权限。
    • 此模式通过将单个 Argo Rollouts 实例的集群范围限制为特定命名空间来提供安全优势。
注意

为了防止意外的权限升级,Red Hat OpenShift GitOps 一次只允许一个模式 Argo Rollout 安装。

要在集群范围的 Argo Rollouts 安装间切换,请完成以下步骤。

5.1. 配置命名空间范围的 Argo Rollouts 安装

要配置命名空间范围的实例 Argo Rollouts 安装,请完成以下步骤。

先决条件

  • 以管理员身份登录到 Red Hat OpenShift GitOps 集群。
  • 您已在 Red Hat OpenShift GitOps 集群上安装了 Red Hat OpenShift GitOps。

流程

  1. 在 Web 控制台的 Administrator 视角中,进入 AdministrationCustomResourceDefinitions
  2. 搜索 Subscription 并点 Subscription CRD。
  3. Instances 选项卡,然后点 openshift-gitops-operator 订阅。
  4. YAML 选项卡并编辑 YAML 文件。

    1. 指定 NAMESPACE_SCOPED_ARGO_ROLLOUTS 环境变量,并在 .spec.config.env 属性中设置为 true

      配置命名空间范围的 Argo Rollouts 安装示例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: openshift-gitops-operator
      spec:
        # (...)
        config:
          env:
            - name: NAMESPACE_SCOPED_ARGO_ROLLOUTS
              value: 'true' 
      1
      Copy to Clipboard Toggle word wrap

      1
      设置为 'true' 可启用命名空间范围的安装。如果值设为 'false' 或没有指定安装,则默认为集群范围的模式。
    2. 点击 Save

      Red Hat OpenShift GitOps Operator 有助于协调命名空间范围的安装中的 Argo Rollouts 自定义资源。

  5. 通过查看 GitOps 容器的日志来验证 Red Hat OpenShift GitOps Operator 是否已启用了命名空间范围的 Argo Rollouts 安装:

    1. 在 Web 控制台的 Administrator 视角中,进入 WorkloadsPods
    2. openshift-gitops-operator-controller-manager pod,然后点 Logs 选项卡。
    3. 查找以下日志语句: 在全命名空间范围模式中运行。此声明表示 Red Hat OpenShift GitOps Operator 启用了命名空间范围的 Argo Rollouts 安装。
  6. 创建一个 RolloutManager 资源,以完成命名空间范围的 Argo Rollouts 安装:

    1. 进入 OperatorsInstalled OperatorsRed Hat OpenShift GitOps,然后点击 RolloutManager 选项卡。
    2. 单击 Create RolloutManager
    3. 选择 YAML 视图 并输入以下片断:

      命名空间范围的 Argo Rollouts 安装的 RolloutManager CR 示例

      apiVersion: argoproj.io/v1alpha1
      kind: RolloutManager
      metadata:
        name: rollout-manager
        namespace: my-application 
      1
      
      spec:
        namespaceScoped: true
      Copy to Clipboard Toggle word wrap

      1
      指定要安装命名空间范围的 Argo Rollouts 实例的项目名称。
    4. Create

      创建 RolloutManager CR 后,Red Hat OpenShift GitOps 开始将命名空间范围的 Argo Rollouts 实例安装到所选命名空间中。

  7. 验证命名空间范围的安装是否成功。

    1. RolloutManager 选项卡中,确保 RolloutManagers 部分下的 Status 字段是 Phase: Available
    2. RolloutManagers 部分下的 YAML 标签页中检查以下输出,以确保安装成功:

      命名空间范围的 Argo Rollouts 安装 YAML 文件示例

      spec:
        namespaceScoped: true
      status:
        conditions:
          lastTransitionTime: '2024-07-10T14:20:5z`
          message: ''
          reason: Success
          status: 'True' 
      1
      
          type: 'Reconciled'
        phase: Available
        rolloutController: Available
      Copy to Clipboard Toggle word wrap

      1
      此状态表示命名空间范围 Argo Rollouts 安装已被成功启用。

      如果您试图在集群范围的安装已存在于集群中时安装特定于命名空间的 Argo Rollouts 实例,则会显示错误消息:

      出错信息安装示例

      spec:
        namespaceScoped: true
      status:
        conditions:
         lastTransitionTime: '2024-07-10T14:10:7z`
         message: 'when Subscription has environment variable NAMESPACE_SCOPED_ARGO_ROLLOUTS set to False, there may not exist any namespace-scoped RolloutManagers: only a single cluster-scoped RolloutManager is supported'
         reason: InvalidRolloutManagerScope
         status: 'False' 
      1
      
         type: 'Reconciled'
        phase: Failure
        rolloutController: Failure
      Copy to Clipboard Toggle word wrap

      1
      此状态表示命名空间范围的 Argo Rollouts 安装没有成功启用。安装默认为集群范围的模式。

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat