1.4. 使用 Push 和 Pull 模型部署 Argo CD
使用 Push 模型,hub 集群上的 Argo CD 服务器会在受管集群中部署应用程序资源。对于 Pull 模型,应用程序资源由 Propagation 控制器传播到受管集群,使用 manifestWork 。
对于这两种模型,相同的 ApplicationSet CRD 用于将应用程序部署到受管集群。
需要的访问权限:集群管理员
1.4.1. 先决条件 复制链接链接已复制到粘贴板!
查看 Argo CD Pull 模型的以下先决条件:
重要:
-
重要:如果您的 openshift-gitops-ArgoCD-application-controller 服务帐户 没有 作为集群管理员分配,GitOps 应用程序控制器可能无法部署资源。应用程序状态可能会发送类似以下错误的错误:
cannot create resource "services" in API group "" in the namespace "mortgage",deployments.apps is forbidden: User "system:serviceaccount:openshift-gitops:openshift-gitops-Argo CD-application-controller"
cannot create resource "services" in API group "" in the namespace
"mortgage",deployments.apps is forbidden: User
"system:serviceaccount:openshift-gitops:openshift-gitops-Argo CD-application-controller"
-
在受管集群中安装
OpenShift GitopsOperator 后,您必须在同一受管集群中创建ClusterRoleBinding集群管理员特权。 要将
ClusterRoleBinding集群管理员特权添加到受管集群,请参阅以下 YAML 示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您不是集群管理员,需要解决这个问题,请完成以下步骤:
- 在部署 Argo CD 应用程序的每个受管集群中创建所有命名空间。
将
managed-by标签添加到每个命名空间。如果 Argo CD 应用程序部署到多个命名空间,则每个命名空间都应该由 Argo CD 管理。请参见以下带有
managed-by标签的示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
您必须在存储库中声明应用程序的所有应用程序目的地命名空间,并在命名空间中包含
managed-by标签。请参阅附加资源以了解如何声明命名空间。
请参阅以下要求来使用 Argo CD Pull 模型:
-
GitOps Operator 必须安装到 hub 集群和
openshift-gitops命名空间中的目标受管集群。 - 所需的 hub 集群 OpenShift Container Platform GitOps operator 必须是版本 1.9.0 或更高版本。
- 中心集群上的 Red Hat OpenShift GitOps Operator 的版本必须等于或更新于托管集群上的操作员的版本。
- 您需要 ApplicationSet 控制器 为受管集群传播 Argo CD 应用程序模板。
每个受管集群都必须在 hub 集群上的 Argo CD 服务器命名空间中有一个集群 secret,而 ArgoCD 应用程序设置控制器需要该 secret 来为受管集群传播 Argo CD 应用程序模板。
要创建集群 secret,请创建一个
gitOpsCluster资源,其中包含对placement资源的引用。placement资源选择所有需要支持 Pull 模型的受管集群。当 GitOps 集群控制器协调时,它会在 Argo CD 服务器命名空间中为受管集群创建集群 secret。
1.4.2. 架构 复制链接链接已复制到粘贴板!
对于 Push 和 Pull 模型,hub 集群上的 Argo CD ApplicationSet 控制器会协调为每个目标受管集群创建应用程序资源。有关这两种模型的架构,请查看以下信息:
1.4.2.1. 架构推送模型 复制链接链接已复制到粘贴板!
- 使用 Push 模型时,OpenShift Container Platform GitOps 将资源直接从集中 hub 集群应用到受管集群。
- 在 hub 集群上运行的 Argo CD 应用程序与 GitHub 存储库通信,并将清单直接部署到受管集群。
- 推送模型实现仅包含 hub 集群上的 Argo CD 应用程序,其中包含受管集群的凭证。hub 集群上的 Argo CD 应用程序可将应用程序部署到受管集群。
- 重要: 对于需要资源应用程序的大量受管集群,请考虑 OpenShift Container Platform GitOps 控制器内存和 CPU 用量的可能性。要优化资源管理,请参阅 Red Hat OpenShift GitOps 文档中的配置资源配额或请求。
-
默认情况下,Push 模型用于部署应用程序,除非您将
apps.open-cluster-management.io/ocm-managed-cluster和apps.open-cluster-management.io/pull-to-ocm-managed-cluster注解添加到ApplicationSet的 template 部分。
1.4.2.2. 架构 Pull 模型 复制链接链接已复制到粘贴板!
- 拉取模型可以通过减少 hub 集群中的控制器的压力与推送模型提供可扩展性,但需要更多请求和状态报告。
- 使用 Pull 模型时,OpenShift Container Platform GitOps 不会将资源直接从集中 hub 集群应用到受管集群。Argo CD Application 从 hub 集群传播到受管集群。
-
拉取模型实现应用 OpenShift Cluster Manager 注册、放置和
manifestWorkAPI,以便 hub 集群和受管集群之间可以使用安全通信频道来部署资源。 - 每个受管集群都单独与 GitHub 存储库通信,以便在本地部署资源清单,因此您必须在每个受管集群中安装和配置 GitOps operator。
-
Argo CD 服务器必须在每个目标受管集群中运行。Argo CD 应用程序资源在受管集群中复制,然后由本地 Argo CD 服务器部署。受管集群中的分布式 Argo CD 应用程序使用 hub 集群上的单个 Argo CD
ApplicationSet资源创建。 -
受管集群由
ocm-managed-cluster注解的值决定。 -
要成功实现 Pull 模型,Argo CD 应用程序控制器必须在
ApplicationSet的 template 部分中忽略带有argocd.argoproj.io/skip-reconcile注解的 Push 模型应用程序资源。 - 对于 Pull 模型,受管集群中的 Argo CD Application 控制器会 协调以部署应用程序。
- hub 集群上的 Pull model Resource sync 控制器 会定期查询 OpenShift Cluster Manager 在每个受管集群上搜索 V2 组件,以检索每个 Argo CD 应用程序的资源列表和错误消息。
-
hub 集群上的 聚合控制器 使用资源同步控制器的数据以及
manifestWork的状态信息,从集群间创建和更新MulticlusterApplicationSetReport。 - 部署的状态被收集回 hub 集群,但不会传输所有详细信息。定期提取其他状态更新以提供概述。状态反馈不是实时的,每个受管集群 GitOps operator 需要与 Git 存储库通信,这会导致多个请求。
1.4.3. 创建 ApplicationSet 自定义资源 复制链接链接已复制到粘贴板!
Argo CD ApplicationSet CRD 用于在用于获取受管集群列表的 generator 字段中使用带有 placement 资源的 Push 或 Pull 模型在受管集群中部署应用程序。
- 对于 Pull 模型,将应用程序的目的地设置为默认本地 Kubernetes 服务器,如下例所示。应用程序由受管集群上的应用程序控制器在本地部署。
添加覆盖默认 Push 模型所需的注解,如下例所示
ApplicationSetYAML,该 YAML 使用带有模板注解的 Pull 模型:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.4. MulticlusterApplicationSetReport 复制链接链接已复制到粘贴板!
-
对于 Pull 模型,
MulticlusterApplicationSetReport聚合受管集群中的应用程序状态。 - 该报告包括资源列表以及每个受管集群的应用程序的整体状态。
-
为每个 Argo CD ApplicationSet 资源创建一个单独的报告资源。该报告与
ApplicationSet在同一命名空间中创建。 该报告包括以下项目:
- Argo CD 应用程序的资源列表
- 每个 Argo CD 应用程序的整体同步和健康状况
-
每个集群的出错信息,其中整个状态为
sync或unhealthy - 受管集群的所有状态概述状态
- 资源同步控制器和聚合控制器每 10 秒运行一次,以创建报告。
两个控制器以及 Propagation 控制器,在同一
multicluster-integrationspod 中的独立容器中运行,如下例所示:NAMESPACE NAME READY STATUS open-cluster-management multicluster-integrations-7c46498d9-fqbq4 3/3 Running
NAMESPACE NAME READY STATUS open-cluster-management multicluster-integrations-7c46498d9-fqbq4 3/3 RunningCopy to Clipboard Copied! Toggle word wrap Toggle overflow
以下是 guestbook 应用程序的 MulticlusterApplicationSetReport YAML 文件示例:
注:如果资源无法部署,则资源不会包含在资源列表中。如需更多信息,请参阅错误消息。
1.4.5. 其他资源 复制链接链接已复制到粘贴板!
- 请参阅 Red Hat OpenShift GitOps 文档中的使用集群配置部署应用程序来配置 OpenShift 集群。
- 请参阅 Red Hat OpenShift GitOps 文档中的 设置 Argo CD 实例。