Argo Rollouts
第 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
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:
AnalysisTemplateCR 配置为连接到 Prometheus 实例,以评估一个或多个指标的成功或失败。 -
Kubernetes 作业指标 :Argo Rollouts 支持 Kubernetes
任务资源,对资源指标运行分析。您可以根据成功运行 Kubernetes 作业,验证应用程序是否成功部署。
1.3.1. Argo Rollouts 组件 复制链接链接已复制到粘贴板!
Argo Rollouts 由多个组件组成,允许用户在 OpenShift Container Platform 中练习进度交付。
| Name | 描述 |
|---|---|
| Argo Rollouts 控制器 |
Argo Rollouts Controller 是标准 |
| AnalysisRun 控制器 |
AnalysisRun 控制器管理并执行 |
|
|
|
|
|
Service 控制器管理 |
| Argo Rollouts CLI 和 UI |
Argo Rollouts 支持名为 Argo Rollouts CLI 的 |
1.3.2. Argo Rollouts 资源 复制链接链接已复制到粘贴板!
Argo Rollout 组件管理几个资源以启用进度交付:
-
特定于推出部署的资源 :例如,
Rollout、AAnalysisRun或Experiment。 -
Kubernetes 网络资源 :例如,用于网络流量的
Service、Ingress或Route。Argo Rollouts 与这些资源集成,称为流量管理。
这些资源对于通过 Rollout CR 自定义应用程序部署至关重要。
Argo Rollouts 支持以下操作:
- 路由 canary 部署基于百分比的流量。
-
使用
Service和Ingress资源将传入的用户流量转发到正确的应用程序版本。 - 使用多个机制来收集分析指标,以验证应用的部署。
| Name | 描述 |
|---|---|
|
|
此 CR 使用 Canary 或蓝绿部署策略启用应用程序的部署。它取代了内置的 Kubernetes |
|
|
此 CR 用于执行分析,并汇总分析结果,将用户指导用户成功部署应用程序。 |
|
|
|
|
|
|
|
| Argo Rollouts 使用 Service 和 Ingress 控制器通过服务和入口控制器原生支持路由流量。 |
|
|
OpenShift |
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 插件直接与 oc 和 kubectl 命令集成。
第 2 章 使用 Argo Rollouts 进行渐进式部署交付 复制链接链接已复制到粘贴板!
要使用 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 或更新的版本。
流程
- 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
- 在 Administrator 视角中,点 Operators → Installed Operators。
-
从 Project 下拉菜单中选择您要创建和配置
RolloutManager自定义资源 (CR) 的项目。 - 从安装的 Operator 中选择 Red Hat OpenShift GitOps。
- 在 Details 选项卡中,在 Provided APIs 部分下,点 RolloutManager 窗格中的 Create instance。
在 Create RolloutManager 页面中,选择 YAML 视图,并使用默认 YAML 或根据您的要求编辑它:
示例:
RolloutManagerCRCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create。
- 在 RolloutManager 选项卡中,在 RolloutManagers 部分下,验证 RolloutManager 实例的 Status 字段显示为 Phase: Available。
在左侧导航窗格中,验证命名空间范围的支持资源的创建:
-
点 Workloads → Deployments 来验证
argo-rollouts部署是否可用,Status 显示为1 of 1 podsrunning。 -
点 Workloads → Secrets 来验证
argo-rollouts-notification-secretsecret 是否可用。 -
点 Networking → Services 来验证
argo-rollouts-metrics服务是否可用。 -
点 User Management → Roles 来验证
argo-rollouts角色和argo-rollouts-aggregate-to-admin、argo-rollouts-aggregate-to-edit以及argo-rollouts-aggregate-to-view集群角色是否可用。 -
点 User Management → RoleBindings 来验证
argo-rollouts角色绑定是否可用。
-
点 Workloads → Deployments 来验证
2.3. 删除 RolloutManager 自定义资源 复制链接链接已复制到粘贴板!
卸载 Red Hat OpenShift GitOps Operator 不会删除在安装过程中创建的资源。在卸载 Red Hat OpenShift GitOps Operator 前,您必须手动删除 RolloutManager 自定义资源(CR)。
先决条件
- 在集群中安装了 Red Hat OpenShift GitOps 1.9.0 或更新的版本。
-
命名空间中已存在
RolloutManagerCR。
流程
- 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
- 在 Administrator 视角中,点 Operators → Installed Operators。
-
点 Project 下拉菜单,再选择包含
RolloutManagerCR 的项目。 - 从安装的 Operator 中选择 Red Hat OpenShift GitOps。
- 点 RolloutManager 选项卡,以查找 RolloutManagers 部分下的 RolloutManager 实例。
- 点实例。
- 从下拉菜单中选择 Actions → Delete RolloutManager,然后点 Delete 在对话框中进行确认。
- 在 RolloutManager 选项卡中,在 RolloutManagers 部分下,验证 RolloutManager 实例已不再可用。
在左侧导航窗格中,验证删除命名空间范围的支持资源:
-
点 Workloads → Deployments 来验证
argo-rollouts部署已被删除。 -
点 Workloads → Secrets 来验证
argo-rollouts-notification-secretsecret 已被删除。 -
点 Networking → Services 来验证
argo-rollouts-metrics服务已被删除。 -
点 User Management → Roles 来验证
argo-rollouts角色和argo-rollouts-aggregate-to-admin、argo-rollouts-aggregate-to-edit以及argo-rollouts-aggregate-to-view集群角色已被删除。 -
点 User Management → RoleBindings 来验证
argo-rollouts角色绑定已被删除。
-
点 Workloads → Deployments 来验证
2.4. 在 Linux 上安装 Argo Rollouts CLI 复制链接链接已复制到粘贴板!
您可以在 Linux 上安装 Argo Rollouts CLI。
先决条件
-
已安装 OpenShift Container Platform CLI (
oc)。
流程
运行以下命令,下载 Argo Rollouts CLI 二进制文件
kubectl-argo-rollouts的最新版本:curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
$ curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,确保
kubectl-argo-rollouts二进制文件可执行:chmod +x ./kubectl-argo-rollouts-linux-amd64
$ chmod +x ./kubectl-argo-rollouts-linux-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将
kubectl-argo-rollouts二进制文件移到系统路径中:mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
# mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rolloutsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要确保您有超级用户权限来运行这个命令。
运行以下命令并收到类似的输出来验证插件是否已正确安装:
oc argo rollouts version
$ oc argo rollouts versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. 在 Mac OS 上安装 Argo Rollouts CLI 复制链接链接已复制到粘贴板!
如果您是 macOS 用户,您可以使用 Homebrew 软件包管理器安装 Argo Rollouts CLI。
先决条件
-
已安装 Homebrew (
brew)软件包管理器。
流程
运行以下命令来安装 Argo Rollouts CLI:
brew install argoproj/tap/kubectl-argo-rollouts
$ brew install argoproj/tap/kubectl-argo-rolloutsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 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 版本,等待手动提升,然后执行多个自动化提升,直到其将整个流量路由到新应用程序版本。
流程
- 在 Web 控制台的 Administrator 视角中,点 Operators → Installed Operators → Red Hat OpenShift GitOps → Rollout。
-
从 Project 下拉菜单中选择您要创建和配置
Rollout自定义资源(CR)的项目。 点 Create Rollout,然后在 YAML 视图中输入以下配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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>
$ oc argo rollouts list rollouts -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
NAME STRATEGY STATUS STEP SET-WEIGHT READY DESIRED UP-TO-DATE AVAILABLE rollouts-demo Canary Healthy 8/8 100 5/5 5 5 5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以
rollouts-demorollout 为目标的 Kubernetes 服务。- 在 Web 控制台的 Administrator 视角中,点 Networking → Services。
点 Create Service,然后在 YAML 视图中输入以下配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 点 Create。
rollouts 会自动使用 canary
ReplicaSet的 pod 模板哈希更新创建的服务。例如:rollouts-pod-template-hash: 687d76d795。
运行以下命令监控推出部署的进度:
oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
Rollout资源的命名空间。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建推出部署后,您可以验证 rollout 的 Status 字段显示 Phase: Healthy。
在 Rollout 选项卡中,验证
rollouts-demorollout 的 Status 字段显示为 Phase: Healthy。提示另外,您可以运行以下命令来验证 rollout 是否健康:
oc argo rollouts status rollouts-demo -n <namespace>
$ oc argo rollouts status rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
Rollout资源的命名空间。
输出示例
Healthy
HealthyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以执行 Rollout CR 的 Canary 部署。
3.3. 更新推出部署 复制链接链接已复制到粘贴板!
当您使用对 .spec.template.spec 字段的修改来更新 Rollout 自定义资源(CR)时,例如容器镜像版本,然后使用更新的容器镜像版本通过 ReplicaSet 创建新的 pod。
流程
通过修改推出部署中部署的容器镜像,模拟应用程序的新 canary 版本。
- 在 Web 控制台的 Administrator 视角中,进入 Operators → Installed Operators → Red Hat OpenShift GitOps → Rollout。
-
选择现有的
rollouts-demorollout,并在 YAML 视图中修改.spec.template.spec.containers.image值从argoproj/rollouts-demo:blue改为argoproj/rollouts-demo:yellow。 单击 Save,然后单击 Reload。
在 rollout 中部署的容器镜像会被修改,rollout 会启动新的 canary 部署。
注意根据
RolloutCR 的.spec.strategy.canary.steps字段中定义的setWeight属性,最初到路由的 20% 到达 canary 版本,并且 rollout 会无限期暂停,直到收到提升请求为止。带有 20% 的流量路由到 canary 版本和 rollout 的路由会无限期暂停,直到后续步骤中指定用于提升的请求
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令监控推出部署的进度:
oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
RolloutCR 的命名空间。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rollout 现在处于暂停状态,因为 rollout 的更新策略配置中没有指定暂停持续时间。
重复上一步来测试新部署的应用程序版本,并确保它按预期工作。例如,通过浏览器与应用交互并尝试运行测试或观察容器日志来验证应用。
推出部署将保持暂停,直到您将其提升到下一步。
验证新版本应用程序是否按预期工作后,您可以决定是否继续提升或中止推出部署。因此,请按照 "Promoting the rollout" 或 "Manually abort the rollout" 中的说明进行操作。
3.4. 提升推出部署 复制链接链接已复制到粘贴板!
因为您的推出部署现在处于暂停状态,作为集群管理员,因此您必须手动提升推出部署以允许其进入下一步。
流程
在 Argo Rollouts CLI 中运行以下命令来模拟另一个新的 canary 版本:
oc argo rollouts promote rollouts-demo -n <namespace>
$ oc argo rollouts promote rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
Rollout资源的命名空间。
输出示例
rollout 'rollouts-demo' promoted
rollout 'rollouts-demo' promotedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在 canary 版本中将流量权重增加到 40%。
运行以下命令,验证推出部署是否通过步骤的其余部分:
oc argo rollouts get rollout rollouts-demo -n <namespace> --watch
$ oc argo rollouts get rollout rollouts-demo -n <namespace> --watch1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
Rollout资源的命名空间。
因为
RolloutCR 中定义的其余步骤设置了持续时间,例如pause: {duration: 45},所以 Argo Rollouts 控制器会等待该持续时间,然后自动移到下一步。成功完成所有步骤后,新的
ReplicaSet对象会被标记为 stable 副本集。输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5. 手动中止推出部署 复制链接链接已复制到粘贴板!
在使用 canary 部署时,推出部署会部署一个应用程序的初始 Canary 版本。您可以手动或以编程方式验证它。验证 Canary 版本并将其提升到 stable 后,会为所有用户提供新的稳定版本。
但是,有时在 canary 版本中发现错误、错误或部署问题,您可能需要中止 canary rollout 并回滚到应用程序的稳定版本。
中止 canary rollout 会删除新 canary 版本的资源,并恢复应用程序的以前的稳定版本。所有被定向到 canary 的入口流量,如 ingress、route 或虚拟服务都将返回到原始稳定版本。
以下示例步骤部署应用程序的新 红色 Canary 版本,然后在完全提升为 stable 前中止它。
流程
更新容器镜像版本,并通过在 Argo Rollouts CLI
中运行以下命令来修改argoproj/rollouts-demo:yellow到argoproj/rollouts-demo:red:oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:red -n <namespace>
$ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:red -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
Rollout自定义资源(CR)的命名空间。
输出示例
rollout "rollouts-demo" image updated
rollout "rollouts-demo" image updatedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 rollout 中部署的容器镜像会被修改,rollout 会启动新的 canary 部署。
- 等待推出部署到达暂停状态。
运行以下命令,验证
rollouts-demo:redcanary 版本是否部署了 paused 状态:oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
RolloutCR 的命名空间。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令中止推出部署的更新:
oc argo rollouts abort rollouts-demo -n <namespace>
$ oc argo rollouts abort rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
RolloutCR 的命名空间。
输出示例
rollout 'rollouts-demo' aborted
rollout 'rollouts-demo' abortedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Argo Rollouts 控制器删除应用程序的 canary 资源,并回滚到稳定版本。
运行以下命令,在中止推出部署后验证 canary
ReplicaSet是否已扩展到 0 个副本:oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
RolloutCR 的命名空间。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rollout 状态标记为
Degraded,这表示即使应用程序已回滚到以前的稳定版本yellow,但 rollout 目前不在所需的版本red中,它已在.spec.template.spec.containers.image字段中设置。注意Degraded状态不反映应用程序的健康状况。它仅表示想要和运行容器镜像版本之间存在不匹配。运行以下命令,将容器镜像版本更新至以前的稳定版本
yellow,并修改.spec.template.spec.containers.image值:oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow -n <namespace>
$ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
RolloutCR 的命名空间。
输出示例
rollout "rollouts-demo" image updated
rollout "rollouts-demo" image updatedCopy to Clipboard Copied! Toggle word wrap Toggle overflow rollout 会跳过分析和提升步骤,回滚到以前的稳定版本,
黄色,并快速跟踪 stableReplicaSet的部署。运行以下命令,验证 rollout 状态是否马上标记为
Healthy:oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
RolloutCR 的命名空间。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 使用 Argo Rollouts 路由流量 复制链接链接已复制到粘贴板!
您可以使用 Argo Rollouts 及其流量分割机制,逐步将用户流量的子集路由到一个新的应用程序版本。然后您可以测试应用程序是否部署并正常工作。
使用 Openshift Routes,您可以配置 Argo Rollouts,以减少或增加流量数量,方法是将其定向到集群环境中的各种应用程序。
您可以使用 OpenShift Routes 在两个应用程序版本间分割流量:
- Canary 版本 :您逐步路由流量的应用程序的新版本。
- 稳定版本 :应用程序的当前版本。在 canary 版本稳定并且所有用户流量定向到它后,它会成为新的稳定版本。之前的稳定版本将被丢弃。
4.1. 先决条件 复制链接链接已复制到粘贴板!
- 以管理员身份登录到 OpenShift Container Platform 集群。
- 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps。
- 您已在 OpenShift Container Platform 集群中安装了 Argo Rollouts。
- 您已在系统上安装了 Red Hat OpenShift GitOps CLI。
- 您已在系统中安装了 Argo Rollouts CLI。
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的路由:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 单击 Create 以创建路由。然后,它会在 Routes 页面中显示。
创建要在路由中引用的服务 Canary 和 stable。
- 在 Web 控制台的 Administrator 视角中,点 Networking → Services。
- 点 Create Service。
在 Create Service 页面上,单击 YAML 视图 并添加以下代码片段:以下示例创建一个名为
argo-rollouts-canary-service的 canary 服务。Canary 流量定向到此服务。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要确保
Route对象中指定的 canary 服务的名称与Service对象中指定的 Canary 服务的名称匹配。单击 Create 以创建 Canary 服务。
rollouts 会自动使用 canary
ReplicaSet的 pod 模板哈希更新创建的服务。例如:rollouts-pod-template-hash: 7bf84f9696。重复这些步骤以创建 stable 服务:以下示例创建一个名为
argo-rollouts-stable-service的 stable 服务。稳定的流量定向到此服务。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要确保
Route对象中指定的稳定服务名称与Service对象中指定的 stable 服务的名称匹配。点 Create 创建 stable 服务。
rollouts 会自动使用 stable
ReplicaSet的 pod 模板哈希更新创建的服务。例如:rollouts-pod-template-hash: 1b6a7733。
创建
RolloutCR 以引用Route和Service对象。- 在 Web 控制台的 Administrator 视角中,进入 Operators → Installed Operators → Red Hat OpenShift GitOps → Rollout。
在 Create Rollout 页面上,点 YAML view 并添加以下代码片段:以下示例创建一个名为
rollouts-demo的RolloutCR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create。
- 在 Rollout 选项卡中,验证 rollout 的 Status 字段显示 Phase: Healthy。
验证路由是否将 100% 的流量定向到应用程序的稳定版本。
注意创建
Rollout资源的第一个实例时,rollout 规定了定向到 stable 和 canary 应用程序版本的流量数量。在初始实例中,Rollout资源的创建会将所有流量路由到应用程序的稳定版本,并跳过流量发送到 canary 版本的部分。通过修改推出部署中部署的容器镜像,模拟应用程序的新 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% 定向到稳定版本。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 Argo Rollouts CLI 中运行以下命令来模拟另一个新的 canary 版本:
oc argo rollouts promote rollouts-demo -n <namespace>
$ oc argo rollouts promote rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
Rollout资源的命名空间。
在 stable 版本中,这会将 canary 版本和 40% 的流量权重增加到 60%。
带有 60% 的流量的路由定向到 Canary 版本,40% 定向到稳定版本。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将 canary 版本中的流量权重增加到 100%,并丢弃应用程序的旧稳定版本中的流量:
oc argo rollouts promote rollouts-demo -n <namespace>
$ oc argo rollouts promote rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定定义
Rollout资源的命名空间。
带有 0% 的流量的示例路由定向到 Canary 版本,100% 定向到稳定版本。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 启用对命名空间范围的 Argo Rollouts 安装的支持 复制链接链接已复制到粘贴板!
Red Hat OpenShift GitOps 支持 Argo Rollouts 安装的两种模式:
- 集群范围的安装 (默认):任何命名空间中定义的 Argo Rollouts 自定义资源(CR)由 Argo Rollouts 实例协调。因此,您可以在集群的任意命名空间中使用 Argo Rollouts CR。
命名空间范围的安装 :Argo Rollouts 实例安装在特定命名空间中,并只处理同一命名空间中的 Argo Rollouts CR。这个安装模式包括以下优点:
-
这个模式不需要集群范围的
ClusterRole或ClusterRoleBinding权限。您可以在单一命名空间中安装和使用 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。
流程
- 在 Web 控制台的 Administrator 视角中,进入 Administration → CustomResourceDefinitions。
-
搜索
Subscription并点 Subscription CRD。 - 点 Instances 选项卡,然后点 openshift-gitops-operator 订阅。
点 YAML 选项卡并编辑 YAML 文件。
指定
NAMESPACE_SCOPED_ARGO_ROLLOUTS环境变量,并在.spec.config.env属性中设置为true。配置命名空间范围的 Argo Rollouts 安装示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 设置为
'true'可启用命名空间范围的安装。如果值设为'false'或没有指定安装,则默认为集群范围的模式。
点击 Save。
Red Hat OpenShift GitOps Operator 有助于协调命名空间范围的安装中的 Argo Rollouts 自定义资源。
通过查看 GitOps 容器的日志来验证 Red Hat OpenShift GitOps Operator 是否已启用了命名空间范围的 Argo Rollouts 安装:
- 在 Web 控制台的 Administrator 视角中,进入 Workloads → Pods。
- 点 openshift-gitops-operator-controller-manager pod,然后点 Logs 选项卡。
-
查找以下日志语句:
在全命名空间范围模式中运行。此声明表示 Red Hat OpenShift GitOps Operator 启用了命名空间范围的 Argo Rollouts 安装。
创建一个
RolloutManager资源,以完成命名空间范围的 Argo Rollouts 安装:- 进入 Operators → Installed Operators → Red Hat OpenShift GitOps,然后点击 RolloutManager 选项卡。
- 单击 Create RolloutManager。
选择 YAML 视图 并输入以下片断:
命名空间范围的 Argo Rollouts 安装的
RolloutManagerCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要安装命名空间范围的 Argo Rollouts 实例的项目名称。
点 Create。
创建
RolloutManagerCR 后,Red Hat OpenShift GitOps 开始将命名空间范围的 Argo Rollouts 实例安装到所选命名空间中。
验证命名空间范围的安装是否成功。
-
在
RolloutManager选项卡中,确保 RolloutManagers 部分下的 Status 字段是Phase: Available。 在 RolloutManagers 部分下的 YAML 标签页中检查以下输出,以确保安装成功:
命名空间范围的 Argo Rollouts 安装 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 此状态表示命名空间范围 Argo Rollouts 安装已被成功启用。
如果您试图在集群范围的安装已存在于集群中时安装特定于命名空间的 Argo Rollouts 实例,则会显示错误消息:
出错信息安装示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 此状态表示命名空间范围的 Argo Rollouts 安装没有成功启用。安装默认为集群范围的模式。
-
在