×

在 GitOps 上下文中,渐进式交付是一个以受控和逐步的方式发布应用程序更新的过程。渐进式交付通过最初仅向一部分用户公开新版本的应用程序更新来降低发布风险。此过程涉及持续观察和分析此新应用程序版本,以验证其行为是否符合设定的要求和预期。随着该过程逐渐向更广泛的受众公开应用程序更新,验证将继续进行。

OpenShift Container Platform 通过使用路由在不同的服务之间拆分流量来提供一些渐进式交付功能,但这通常需要手动干预和管理。

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

为什么要使用 Argo Rollouts?

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

使用 Argo Rollouts 通过允许应用程序团队声明式地定义其发布策略来简化渐进式交付。团队不再需要定义多个部署和服务,也不需要为流量整形和测试集成创建自动化。

您可以出于以下原因使用 Argo Rollouts

  • 您的用户可以更轻松地在最终用户环境中采用渐进式交付。

  • 借助 Argo Rollouts 提供的结构和指南,您的团队无需学习流量管理器和复杂的底层架构。

  • 在更新期间,根据您的部署策略,您可以通过逐步将流量转移到新版本,来优化已部署应用程序版本的现有流量整形功能。

  • 您可以将 Argo Rollouts 与 Prometheus 等指标提供程序结合使用,根据设定的参数执行基于指标和策略的滚动部署和回滚。

  • 您的最终用户环境将获得 Red Hat OpenShift GitOps Operator 的安全性和帮助,从而有效地管理资源、成本和时间。

  • 使用 Argo CD 进行安全和自动化部署的现有用户,可以在流程早期获得反馈,从而避免影响他们的问题。

Argo Rollouts 的优势

在 Red Hat OpenShift GitOps 中使用 Argo Rollouts 作为默认工作负载,可带来以下优势:

  • 作为 GitOps 工作流一部分的自动化渐进式交付

  • 高级部署功能

  • 优化现有的高级部署策略,例如蓝绿部署或金丝雀部署

  • 零停机时间部署更新

  • 细粒度、加权流量切换

  • 能够在没有任何新流量到达生产环境的情况下进行测试

  • 自动化回滚和升级

  • 人工判断

  • 可自定义的指标查询和关键业务指标 (KPI) 分析

  • 与 Ingress 控制器和 Red Hat OpenShift Service Mesh 集成,实现高级流量路由

  • 与指标提供程序集成,用于部署策略分析

  • 使用多个提供程序

关于 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 密钥

您可以在 `RolloutManager` CR 的规范中为 Argo Rollouts 控制器资源指定命令参数、环境变量、自定义镜像名称等。`RolloutManager` CR 规范定义了 Argo Rollouts 的期望状态。

示例:`RolloutManager` CR
apiVersion: argoproj.io/v1alpha1
kind: RolloutManager
metadata:
  name: argo-rollout
  labels:
    example: basic
spec: {}

Argo Rollouts 控制器

使用 Argo Rollouts 控制器资源,您可以管理命名空间中的渐进式应用程序交付。Argo Rollouts 控制器资源监控集群中的事件,并在任何与 Argo Rollouts 相关的资源发生更改时做出反应。控制器读取所有滚动部署详细信息,并将集群带到与滚动部署定义中描述的状态相同的状态。

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 的架构由组件和资源构成。组件用于管理资源。例如,AnalysisRun 控制器管理 `AnalysisRun` CR。

Argo Rollouts 包含多种收集分析指标的机制,以验证新应用程序版本的部署。

  • Prometheus 指标:`AnalysisTemplate` CR 配置为连接到 Prometheus 实例以评估一个或多个指标的成功或失败。

  • Kubernetes 作业指标:Argo Rollouts 支持 Kubernetes `Job` 资源来对资源指标运行分析。您可以根据 Kubernetes 作业的成功运行来验证应用程序的成功部署。

Argo Rollouts 组件

Argo Rollouts 由多个组件组成,使用户能够在 OpenShift Container Platform 中实践渐进式交付。

表 1. Argo Rollouts 组件
名称 描述

Argo Rollouts 控制器

Argo Rollouts 控制器是标准 `Deployment` 资源的替代方案,并与其共存。此控制器仅响应 Argo Rollouts 资源中的更改并管理 `Rollout` CR。Argo Rollouts 控制器不会修改标准部署资源。

AnalysisRun 控制器

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

Experiment 控制器

`Experiment` 控制器对短暂的副本集运行分析,并管理 `Experiment` 自定义资源。通过在金丝雀部署 `strategy` 字段中指定 `experiment` 步骤,也可以将控制器与 `Rollout` 资源集成。

`Service` 和 `Ingress` 控制器

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

Argo Rollouts CLI 和 UI

Argo Rollouts 支持一个名为 Argo Rollouts CLI 的 `oc/kubectl` 插件。您可以使用它从命令行与资源(例如滚动部署、分析和实验)进行交互。它可以执行诸如 `pause`、`promote` 或 `retry` 等操作。Argo Rollouts CLI 插件可以在浏览器中启动本地 Web UI 仪表板,以增强可视化 Argo Rollouts 资源的体验。

Argo Rollouts 资源

Argo Rollout 组件管理多个资源以实现渐进式交付。

  • 滚动部署专用资源:例如,`Rollout`、`AnalysisRun` 或 `Experiment`。

  • Kubernetes 网络资源:例如,用于网络流量塑造的ServiceIngressRoute。Argo Rollouts 集成这些资源,这些资源被称为流量管理。

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

Argo Rollouts 支持以下操作:

  • 为金丝雀部署路由基于百分比的流量。

  • 使用ServiceIngress资源转发传入的用户流量到正确的应用程序版本。

  • 使用多种机制收集分析指标,以验证新版本应用程序的部署。

表 2. Argo Rollouts 资源
名称 描述

Rollout

此 CR 允许使用金丝雀或蓝绿部署策略部署应用程序。它替换了内置的 Kubernetes Deployment 资源。

AnalysisRun

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

AnalysisTemplate

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

Experiment

Experiment CR 用于在应用程序部署期间对其运行短暂的分析,以确保应用程序正确部署。Experiment CR 可以独立使用,也可以作为Rollout CR 的一部分运行。

ServiceIngress

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

RouteVirtualService

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

Argo Rollouts CLI 概述

您可以使用 Argo Rollouts CLI(一个可选插件)直接管理和监控 Argo Rollouts 资源,从而无需使用 OpenShift Container Platform Web 控制台或 CLI(oc)。

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

  • 更改 Argo Rollouts 镜像。

  • 监控 Argo Rollouts 推送的进度。

  • 在金丝雀部署中继续执行推送步骤。

  • 终止失败的 Argo Rollouts 部署。

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