了解 OpenShift GitOps
OpenShift GitOps 简介
摘要
第 1 章 什么是 GitOps?
GitOps 是为云原生应用程序实施持续部署的一种声明方式。您可以使用 GitOps 创建可重复进程,用于在多集群 Kubernetes 环境间管理 OpenShift Container Platform 集群和应用程序。GitOps 以快速的速度处理和自动化复杂部署,节省部署和发行周期期间的时间。
GitOps 工作流通过开发、测试、临时和生产环境来推送应用程序。GitOps 部署新应用程序或更新现有应用程序,因此您只需要更新存储库,GitOps 会自动执行所有操作。
GitOps 是一组使用 Git 拉取请求来管理基础架构和应用程序配置的实践。GitOps 中的 Git 存储库是系统和应用程序配置的唯一来源。此 Git 存储库包含指定环境中所需的基础架构声明描述,并包含自动流程,以使您的环境与上述状态匹配。它还包含该系统的完整状态,以便可查看并可审核更改到系统状态。通过使用 GitOps,您可以处理基础架构和应用程序配置 sprawl 的问题。
GitOps 将基础架构和应用程序定义定义为代码。然后,它会使用此代码来管理多个工作区和集群来简化基础架构和应用程序配置的创建过程。根据代码原则,您可以在 Git 存储库中存储集群和应用程序的配置,然后按照 Git 工作流将这些存储库应用到所选集群中。您可以将在 Git 存储库中开发和维护软件的核心原则应用到创建和管理集群和应用程序配置文件。
第 2 章 关于 Red Hat OpenShift GitOps
Red Hat OpenShift GitOps 是一个使用 Argo CD 作为声明性 GitOps 引擎的 Operator。它启用了多集群 OpenShift 和 Kubernetes 基础架构的 GitOps 工作流。使用 Red Hat OpenShift GitOps,管理员可以在集群和开发生命周期中一致地配置和部署基于 Kubernetes 的基础架构和应用程序。Red Hat OpenShift GitOps 基于开源项目 Argo CD,为上游提供的内容提供类似的功能,并提供额外的自动化、集成到 Red Hat OpenShift Container Platform 以及 Red Hat Enterprise 支持、质量保证和专注于企业安全性的好处。
因为 Red Hat OpenShift GitOps 的发行节奏与 OpenShift Container Platform 不同,所以 Red Hat OpenShift GitOps 文档现在作为每个次版本的单独文档集提供。
Red Hat OpenShift GitOps 文档包括在 https://docs.openshift.com/gitops/。
特定版本的文档使用版本选择器下拉列表,或者直接将版本添加到 URL,例如 https://docs.openshift.com/gitops/1.8。
另外,Red Hat OpenShift GitOps 文档也包括在 Red Hat Portal https://access.redhat.com/documentation/zh-cn/red_hat_openshift_gitops/ 中。
如需有关 Red Hat OpenShift GitOps 生命周期和支持的平台的更多信息,请参阅平台生命周期政策。
当应用程序部署到不同环境中的不同集群时,Red Hat OpenShift GitOps 可确保应用程序的一致性,如开发、临时和生产环境。Red Hat OpenShift GitOps 整理与配置仓库相关的部署过程,并将其作为核心元素。它总会保持至少有两个软件仓库:
- 源代码的应用程序仓库
- 定义应用程序所需状态的环境配置仓库
这些软件仓库包含您指定环境中所需的基础架构声明信息。它们还包含可让您的环境与上述状态匹配的自动过程。
Red Hat OpenShift GitOps 使用 Argo CD 来维护集群资源。Argo CD 是一个开源声明工具,用于应用程序的持续部署(CD)。Red Hat OpenShift GitOps 将 Argo CD 实现作为一个控制器,以便持续监控 Git 存储库中定义的应用程序定义和配置。然后,Argo CD 将这些配置的指定状态与集群中的实时状态进行比较。
Argo CD 报告与指定状态不同的配置。报告允许管理员自动或者手动将配置重新同步到定义的状态。因此,ArgoCD 可让您提供全局自定义资源,如用于配置 OpenShift Container Platform 集群的资源。
2.1. 主要特性
Red Hat OpenShift GitOps 可帮助您自动执行以下任务:
- 确保集群具有类似的配置、监控和存储状态
- 对多个 OpenShift Container Platform 集群应用或恢复配置更改
- 将模板配置与不同环境关联
- 在集群间(从调试到生产阶段)推广应用程序。
2.2. OpenShift GitOps 常用术语表
此术语表定义了常见的 OpenShift GitOps 术语。
- 应用程序控制器(Argo CD 应用程序控制器)
执行以下操作的控制器:
- 持续监控 Git 存储库的更改
- 监控正在运行的应用程序
- 将 live 状态与所需的目标状态进行比较
- 部署新更改
示例包括 Argo CD Application Controller 检测
OutOfSync
应用程序状态,并选择性地采取纠正操作。应用程序
自定义资源(CR)- 描述如何部署 Argo CD 应用程序的资源的 YAML 清单。
应用程序
自定义资源定义(CRD)- 代表环境中部署的 Argo CD 应用程序实例的资源对象。
ApplicationSet
CRD (Argo CD 应用程序集)-
根据
ApplicationSet
CR 的内容自动生成 Argo CD 应用程序的资源对象和 CRD。集群管理员使用此 CRD 定义单个ApplicationSet
CR,以生成和更新多个对应的 Argo CDApplication
CR。 - ApplicationSet Controller (Argo CD ApplicationSet Controller)
-
Argo CD 中存在并处理
ApplicationSet
CR 的自定义 Kubernetes 控制器。此控制器会根据ApplicationSet
CR 的内容自动创建、更新和删除 Argo CD 应用程序。 AppProject
CRD-
CRD 代表项目内应用程序的逻辑分组,它们管理允许应用程序管理资源的位置和方式。您可以使用
AppProject
CRD 来限制允许 Argo CD 用户访问这些应用程序的位置和方式。管理AppProject
实例通常仅限于 Argo CD 管理员。 - Argo CD API 服务器
- 公开 Web UI、CLI、持续集成(CI)和持续部署(CD)系统使用的 API 的 gRPC/REST 服务器。
- Argo CD
- 开源声明工具,可在集群和开发生命周期中自动部署基于 Kubernetes 的基础架构和应用程序。
- Argo CD 应用程序
- 一个应用程序,用于跟踪 GitOps 存储库中的单个 Kubernetes 资源(将资源定义为清单)到目标 Kubernetes 集群的应用程序。
ArgoCD
CRD- 描述给定 Argo CD 集群的预期状态的 Kubernetes CRD,允许您配置组成 Argo CD 集群的组件。
- Argo CD 实例
-
在命名空间中安装 Argo CD,它会封装正在运行的 Argo CD 的所有有状态方面。每个 Argo CD 实例通常都有一个带有
ArgoCD
CR 的一对一映射。 - Argo CD 项目
Argo CD 中的实体,引用 Argo CD 开源项目的 特定项目概念,以及对应的
AppProject
CR。Argo CD 项目允许您定义多个命名空间,甚至集群作为允许的目的地。相反,OpenShift 项目 仅限于一个命名空间,相当于一个命名空间的概念。
Argo CD 项目通过限制对 Git 存储库和远程集群的访问来控制 Argo CD 的行为。示例包括使用 Argo CD 项目来控制用户,方法是限制能够通过 Argo CD UI 或 Argo CD CLI 访问某些 Argo CD 应用程序或集群资源。
- Argo CD 仓库服务器(Argo CD-repo-server)
执行以下操作的 Argo CD 组件:
- 从源仓库(如 Git、Helm 或开放容器项目(OCI))读取
- 生成对应的应用程序清单
- 运行自定义配置管理工具
- 将结果返回到 Argo CD Application Controller
- Argo CD 资源(
ArgoCD
CR) -
描述给定 Argo CD 实例的预期状态的 CR。它允许您配置组成 Argo CD 实例的组件和设置。在任意给定时间,一个命名空间中只能有一个
ArgoCD
CR。 - Argo CD 服务器(Argo CD-server)
- 为 Argo CD 提供 API 和 UI 的服务器。
- Argo Rollouts
- 一个控制器,可用于管理在 Kubernetes 和 OpenShift Container Platform 集群上托管的应用程序的进度部署。此控制器具有一组 CRD,提供一组高级部署功能,如蓝绿、canary、canary 分析和实验等高级部署功能。
- 集群范围的实例
- Argo CD 配置为管理集群中的所有资源的模式,包括某些特定于集群的资源,如集群配置、集群 RBAC、Operator 资源、平台 Operator 或 secret。
- control plane (GitOps control plane)
在 GitOps 上下文中,您可以为每个安装的 Argo CD 有一个 control plane。GitOps control plane 是您可以安装 Argo CD 的任何命名空间。此 control plane 允许您在网络、实例和集群间置备、管理和操作 Argo CD。
在 control plane 命名空间中,Argo CD 维护一组以下 Kubernetes 资源,这些资源定义源 Git 存储库和目标集群之间的持续部署:
-
Argo CD
Application
CR -
ConfigMap
API 对象 -
代表部署目标的 GitOps 存储库凭证的 secret 对象
openshift-gitops
是默认 Argo CD 实例的 control plane 命名空间。-
Argo CD
- 声明性设置
- 有关系统和应用程序设置或配置所需的基础架构声明描述。您可以在 Git 存储库中的 YAML 配置文件中指定此描述。声明性设置包含一个自动化过程,使您的环境和基础架构与上述状态匹配。例如,使用 YAML 清单以声明性方式定义 Argo CD 应用程序、项目和设置。
- 默认 Argo CD 实例(默认的集群范围的实例)
-
Red Hat OpenShift GitOps Operator 在安装后立即实例化的默认实例,在
openshift-gitops
命名空间中,具有管理某些集群范围资源的额外权限。 - GitOps
- 为云原生应用实施持续部署的一种声明方式。在 GitOps 中,Git 存储库包含部署资源,Argo CD 与其集群状态保持同步。
- GitOps CLI (GitOps
argocd
CLI) - 从命令行配置和管理 Red Hat OpenShift GitOps 和 Argo CD 资源的工具。
- 实例范围
- 决定如何操作 Argo CD 实例的模式。可用的模式 是集群范围的实例和命名空间范围的实例。
- 实时状态
- 目标集群中的应用程序资源的实时状态。
- 本地集群
- 安装 Argo CD 的集群。
- 清单(Manifest)
-
在 GitOps 上下文中,清单是 GitOps 存储库中定义的 Kubernetes 资源的 YAML 表示,旨在将这些资源部署到目标 Kubernetes 集群。示例包括
Deployment
、ConfigMap
或Secret
等资源的 YAML 表示。 - 多租户
- 软件架构,单一软件实例为多个不同的用户组提供服务。
- 命名空间范围的实例(应用程序交付实例)
- Argo CD 配置为仅在集群中的特定命名空间中管理资源,并使用资源交付。
- 通知控制器(Argo CD 通知控制器)
- 持续监控 Argo CD 应用程序的控制器,并提供灵活的方法来通知用户有关应用程序状态的重要更改。
- 进度交付
- 在 GitOps 上下文中,进度交付是一个以受控和逐步方式发布应用程序更新的过程。
- Red Hat OpenShift GitOps
- 使用 Argo CD 作为声明性 GitOps 引擎的 Operator,用于在多集群 OpenShift 和 Kubernetes 基础架构上启用 GitOps 工作流。
- 刷新
- 将 Git 存储库中的最新代码与 live 状态进行比较和确定区别的过程。例如,在 Argo CD UI 中,当点 Refresh 时,Argo CD 连接到应用程序的目标 Git 存储库,检索内容,然后从该内容生成清单。然后 Argo CD 将该目标状态与 live 集群状态进行比较。
- 远程集群
- 您可以声明性或使用 GitOps CLI 添加到 Argo CD 的集群。远程集群与安装 Argo CD 的本地集群不同。
- resource Exclusion
- 用于从发现和同步中排除资源的配置,以便 Argo CD 不知道它们。
- resource Inclusion
- 用于包含资源的配置,用于全局发现、同步和限制受管资源列表。
- 单一租期
- 软件架构,单一软件实例为单个用户或一组用户提供服务。
- 同步
- 将应用集群资源的实时状态与 Git 存储库中定义的目标状态同步,以确保一致性。示例包括通过使用 Argo CD UI 将更改应用到集群来同步应用程序。
- 同步状态
- 指明 live 状态是否与目标状态匹配的应用程序状态。
- 目标状态
- 想要的应用程序资源的状态,如 Git 存储库中的文件表示。
- 用户定义的 Argo CD 实例
安装和部署的自定义 Argo CD 实例来管理集群配置或部署应用程序。默认情况下,任何新的用户定义实例都只能管理部署它的命名空间中的资源。
您可以在任何命名空间中创建用户定义的 Argo CD 实例,而不是
openshift-gitops
命名空间。- Workload
-
任何进程通常在资源内定义,如
Deployment
、StatefulSet
、ReplicaSet
、Job
或Pod
,在容器内运行。示例包括 Spring Boot 应用、NodeJS Express 应用或 Ruby on Rails 应用。
2.3. 其他资源
第 3 章 为支持收集诊断信息
当创建一个支持问题单时,您必须为红帽支持团队提供有关集群的调试信息。您可以使用 must-gather
工具来收集项目级别资源、集群级别资源和 Red Hat OpenShift GitOps 组件的诊断信息。
为了获得快速支持,请提供 OpenShift Container Platform 和 Red Hat OpenShift GitOps 的诊断信息。
3.1. 关于 must-gather 工具
oc adm must-gather
CLI 命令可收集最有助于解决问题的集群信息,包括:
- 资源定义
- 服务日志
默认情况下,oc adm must-gather
命令使用默认的插件镜像,并写入 ./must-gather.local
。
另外,您可以使用适当的参数运行命令来收集具体信息,如以下部分所述:
要收集与一个或多个特定功能相关的数据,请使用
--image
参数和镜像,如以下部分所述。示例命令
$ oc adm must-gather --image=registry.redhat.io/openshift-gitops-1/must-gather-rhel8:v1.10.0
要收集审计日志,请使用
-- /usr/bin/gather_audit_logs
参数,如以下部分所述。示例命令
$ oc adm must-gather -- /usr/bin/gather_audit_logs
注意作为默认信息集合的一部分,不会收集审计日志来减小文件的大小。
当您运行 oc adm must-gather
时,集群的新项目中会创建一个带有随机名称的新 pod。在该 pod 上收集数据,并保存至以 must-gather.local
开头的一个新目录中。此目录在当前工作目录中创建。
Pod 示例
NAMESPACE NAME READY STATUS RESTARTS AGE ... openshift-must-gather-5drcj must-gather-bklx4 2/2 Running 0 72s openshift-must-gather-5drcj must-gather-s8sdh 2/2 Running 0 72s ...
另外,您可以使用 --run-namespace
选项在特定命名空间中运行 oc adm must-gather
命令。
示例命令
$ oc adm must-gather --image=registry.redhat.io/openshift-gitops-1/must-gather-rhel8:v1.10.0
3.2. 为 Red Hat OpenShift GitOps 收集调试数据
使用 oc adm must-gather
CLI 命令收集有关与 Red Hat OpenShift GitOps 关联的集群的以下详情:
- Red Hat OpenShift GitOps Operator 的订阅和命名空间。
-
ArgoCD 对象可用的命名空间,以及这些命名空间中的对象,如
ArgoCD
,Applications
,ApplicationSets
,AppProjects
, 和configmaps
。 - 由 Red Hat OpenShift GitOps Operator 管理的命名空间列表,以及来自这些命名空间中的资源。
- 所有与 GitOps 相关的自定义资源对象和定义。
- Operator 和 Argo CD 日志。
- 警告和错误级事件。
先决条件
- 以管理员身份登录到 OpenShift Container Platform 集群。
-
已安装 OpenShift Container Platform CLI (
oc
)。 - 已安装 Red Hat OpenShift GitOps Operator。
流程
- 进入到要存储调试信息的目录。
使用 Red Hat OpenShift GitOps
must-gather
镜像运行oc adm must-gather
命令:$ oc adm must-gather --image=registry.redhat.io/openshift-gitops-1/must-gather-rhel8:<image_version_tag> 1
- 1
- GitOps 的 must-gather 镜像。
示例命令
$ oc adm must-gather --image=registry.redhat.io/openshift-gitops-1/must-gather-rhel8:v1.10.0
must-gather
工具会创建一个以当前目录中./must-gather.local
开头的新目录。例如,./must-gather.local.4157245944708210399
。从刚才创建的目录中创建压缩文件。例如,在使用 Linux 操作系统的计算机上运行以下命令:
$ tar -cvaf must-gather.tar.gz must-gather.local.4157245944708210399 1
- 1
- 将
must-gather-local.4157245944708210399
替换为实际目录名称。
- 在红帽客户门户中为您的问题单附上压缩文件。