第 4 章 GitOps
4.1. Red Hat OpenShift GitOps 发行注记
Red Hat OpenShift GitOps 是为云原生应用程序实施持续部署的一种声明方法。当应用程序部署到不同环境中的不同集群时,Red Hat OpenShift GitOps 可确保应用程序的一致性,如开发、临时和生产环境。Red Hat OpenShift GitOps 可帮助您自动执行以下任务:
- 确保集群具有类似的配置、监控和存储状态
- 从已知状态恢复或重新创建集群
- 对多个 OpenShift Container Platform 集群应用或恢复配置更改
- 将模板配置与不同环境关联
- 在集群间(从调试到生产阶段)推广应用程序。
如需了解 Red Hat OpenShift GitOps 的概述,请参阅了解 OpenShift GitOps。
4.1.1. 使开源包含更多
红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。详情请查看 Red Hat CTO Chris Wright 信息。
4.1.2. Red Hat OpenShift GitOps 1.2.1 发行注记
Red Hat OpenShift GitOps 1.2.1 现在包括在 OpenShift Container Platform 4.7 和 4.8 中。
4.1.2.1. 支持列表
这个版本中的一些功能当前还处于技术预览状态。它们并不适用于在生产环境中使用。
在下表中,功能被标记为以下状态:
- TP: 技术预览
- GA: 正式发行
请参阅红帽门户网站中关于对技术预览功能支持范围的信息:
功能 | Red Hat OpenShift GitOps 1.2.1 |
---|---|
Argo CD | GA |
Argo CD ApplicationSet | TP |
Red Hat OpenShift GitOps Application Manager (kam) | TP |
4.1.2.2. 修复的问题
在当前发行版本中解决了以下问题:
-
在以前的版本中,应用程序控制器启动时会在应用程序控制器中观察到大量内存高峰。现在,应用程序控制器的
--kubectl-parallelism-limit
标志默认设置为 10,但可以通过在 Argo CD CR 规格中为.spec.controller.kubeParallelismLimit
指定数字来覆盖这个值。GITOPS-1255 -
最新的 Triggers API 会导致在使用
kam bootstrap
命令时因为 kustomization.yaml 中的重复条目导致 Kubernetes 构建失败。Pipelines 和 Tekton 会在 v0.24.2 和 v0.14.2 中分别更新来解决这个问题。GITOPS-1273 - 现在,当从源命名空间中删除 Argo CD 实例时,持久化 RBAC 角色和绑定会自动从目标命名空间中移除。GITOPS-1228
- 在以前的版本中,当将 Argo CD 实例部署到命名空间中时,Argo CD 实例会将"managed-by"标签更改为自己的命名空间。在这个版本中,命名空间会取消标记,同时确保为命名空间创建和删除所需的 RBAC 角色和绑定。GITOPS-1247
- 在以前的版本中,Argo CD 工作负载中的默认资源请求限制(特别是 repo-server 和应用程序控制器)被发现非常严格的限制。现有资源配额现已被删除,在仓库服务器中默认内存限值已增加到 1024M。请注意,这个更改只会影响新的安装;现有的 Argo CD 实例工作负载不会受到影响。GITOPS-1274
4.1.3. Red Hat OpenShift GitOps 1.2 发行注记
Red Hat OpenShift GitOps 1.2 现在包括在 OpenShift Container Platform 4.7 和 4.8 中。
4.1.3.1. 支持列表
这个版本中的一些功能当前还处于技术预览状态。它们并不适用于在生产环境中使用。
在下表中,功能被标记为以下状态:
- TP: 技术预览
- GA: 正式发行
请参阅红帽门户网站中关于对技术预览功能支持范围的信息:
功能 | Red Hat OpenShift GitOps 1.2 |
---|---|
Argo CD | GA |
Argo CD ApplicationSet | TP |
Red Hat OpenShift GitOps Application Manager (kam) | TP |
4.1.3.2. 新功能
除了包括修复和稳定性改进的信息外,以下小节突出介绍了 Red Hat OpenShift GitOps 1.2 中的新内容。
-
如果您没有对 openshift-gitops 命名空间的读写访问权限,现在可以使用 GitOps Operator 中的
DISABLE_DEFAULT_ARGOCD_INSTANCE
环境变量,并将值设置为TRUE
以防止默认的 Argo CD 实例从openshift-gitops
命名空间启动。 -
现在,在 Argo CD 工作负载中配置了资源请求和限制。在
openshift-gitops
命名空间中启用资源配额。因此,手动在 openshift-gitops 命名空间中部署的带外工作负载必须使用资源请求和限制进行配置,并且可能需要增加资源配额。 Argo CD 身份验证现已与红帽 SSO 集成,并在集群中自动配置 OpenShift 4 身份提供商。此功能默认为禁用。要启用红帽 SSO,请在
ArgoCD
CR 中添加 SSO 配置,如下所示。目前,keycloak
是唯一受支持的提供程序。apiVersion: argoproj.io/v1alpha1 kind: ArgoCD metadata: name: example-argocd labels: example: basic spec: sso: provider: keycloak server: route: enabled: true
现在,您可以使用路由标签定义主机名来支持路由器分片。现在,支持在
server
(argocd server)、grafana
和prometheus
路由上设置标签。要在路由上设置标签,请在ArgoCD
CR 中的服务器的路由配置下添加标签
。在 argocd 服务器上设置标签的
ArgoCD
CR YAML 示例apiVersion: argoproj.io/v1alpha1 kind: ArgoCD metadata: name: example-argocd labels: example: basic spec: server: route: enabled: true labels: key1: value1 key2: value2
-
GitOps Operator 现在会自动向 Argo CD 实例授予权限,以通过应用标签来管理目标命名空间中的资源。用户可以使用标签
argocd.argoproj.io/managed-by: <source-namespace>
标记目标命名空间,其中source-namespace
是部署 argocd 实例的命名空间。
4.1.3.3. 修复的问题
在当前发行版本中解决了以下问题:
-
在以前的版本中,如果用户在 openshift-gitops 命名空间中创建了由默认集群实例管理的 Argo CD 实例,则负责新 Argo CD 实例的应用程序会停留在
OutOfSync
状态。现在,通过添加对集群 secret 的所有者引用解决了这个问题。GITOPS-1025
4.1.3.4. 已知问题
Red Hat OpenShift GitOps 1.2 中已知的问题。
-
当从源命名空间中删除 Argo CD 实例时,目标命名空间中的
argocd.argoproj.io/managed-by
标签不会被删除。GITOPS-1228 Red Hat OpenShift GitOps 1.2 中的 openshift-gitops 命名空间中启用了资源配额。这会影响手动部署的带外工作负载,以及
openshift-gitops
命名空间中默认 Argo CD 实例部署的工作负载。当您从 Red Hat OpenShift GitOpsv1.1.2
升级到v1.2
时,此类工作负载必须使用资源请求和限制来配置。如果存在额外的工作负载,则必须增加 openshift-gitops 命名空间中的资源配额。openshift-gitops
命名空间的当前资源配额。资源 Requests Limits CPU
6688m
13750m
内存
4544Mi
9070Mi
您可以使用以下命令来更新 CPU 限值。
$ oc patch resourcequota openshift-gitops-compute-resources -n openshift-gitops --type='json' -p='[{"op": "replace", "path": "/spec/hard/limits.cpu", "value":"9000m"}]'
您可以使用以下命令来更新 CPU 请求。
$ oc patch resourcequota openshift-gitops-compute-resources -n openshift-gitops --type='json' -p='[{"op": "replace", "path": "/spec/hard/cpu", "value":"7000m"}]
您可以替换以上命令中的路径从
cpu
到memory
来更新内存。
4.1.4. Red Hat OpenShift GitOps 1.1 发行注记
Red Hat OpenShift GitOps 1.1 现在包括在 OpenShift Container Platform 4.7 中。
4.1.4.1. 支持列表
这个版本中的一些功能当前还处于技术预览状态。它们并不适用于在生产环境中使用。
在下表中,功能被标记为以下状态:
- TP: 技术预览
- GA: 正式发行
请参阅红帽门户网站中关于对技术预览功能支持范围的信息:
功能 | Red Hat OpenShift GitOps 1.1 |
---|---|
Argo CD | GA |
Argo CD ApplicationSet | TP |
Red Hat OpenShift GitOps Application Manager (kam) | TP |
4.1.4.2. 新功能
除了包括修复和稳定性改进的信息外,以下小节突出介绍了 Red Hat OpenShift GitOps 1.1 中的新内容:
-
现在添加了
ApplicationSet
功能(技术预览)。ApplicationSet
功能可在大量集群和 monorepos 中管理 Argo CD 应用程序时实现自动化和更大的灵活性。它还可在多租户 Kubernetes 集群中实现自助服务。 - Argo CD 现在与集群日志记录堆栈以及 OpenShift Container Platform Monitoring 和 Alerting 功能集成。
- Argo CD auth 现在与 OpenShift Container Platform 集成。
- Argo CD 应用程序控制器现在支持横向扩展。
- Argo CD Redis 服务器现在支持高可用性(HA)。
4.1.4.3. 修复的问题
在当前发行版本中解决了以下问题:
- 在以前的版本中,Red Hat OpenShift GitOps 在带有活跃全局代理设置的代理服务器设置中无法正常工作。这个问题已被解决。现在,Red Hat OpenShift GitOps Operator 会使用 pod 的完全限定域名(FQDN)配置 Argo CD,以启用组件间的通信。GITOPS-703
-
Red Hat OpenShift GitOps 后端依赖于 Red Hat OpenShift GitOps URL 中的
?ref=
查询参数来发出 API 调用。在以前的版本中,这个参数没有从 URL 中读取,从而导致后端始终考虑默认引用。这个问题已被解决。Red Hat OpenShift GitOps 后端现在从 Red Hat OpenShift GitOps URL 提取引用查询参数,且仅在未提供输入引用时使用默认引用。GITOPS-817 -
在以前的版本中,Red Hat OpenShift GitOps 后端无法找到有效的 GitLab 存储库。这是因为 Red Hat OpenShift GitOps 后端检查
main
作为分支引用,而不是 GitLab 存储库中的master
。这个问题现已解决。GITOPS-768 -
OpenShift Container Platform Web 控制台的 Developer 视角中的 Environments 页面现在显示应用程序列表和环境数量。本页还显示 Argo CD 链接,它将您定向到列出所有应用程序的 Argo CD Applications 页面。Argo CD Applications 页面带有 LABELS (如
app.kubernetes.io/name=appName
),它只帮助您过滤您选择的应用程序。GITOPS-544
4.1.4.4. 已知问题
Red Hat OpenShift GitOps 1.1 中已知的问题:
- Red Hat OpenShift GitOps 不支持 Helm v2 和 ksonnet。
- 在断开连接的集群中不支持 Red Hat SSO(RH SSO)Operator。因此,断开连接的集群中不支持 Red Hat OpenShift GitOps Operator 和 RH SSO 集成。
- 当您从 OpenShift Container Platform web 控制台删除 Argo CD 应用程序时,Argo CD 应用程序会从用户界面中删除,但部署仍存在于集群中。作为临时解决方案,请从 Argo CD 控制台删除 Argo CD 应用程序。GITOPS-830
4.1.4.5. 有问题的更改
4.1.4.5.1. 从 Red Hat OpenShift GitOps v1.0.1 升级
当您从 Red Hat OpenShift GitOps v1.0.1
升级到 v1.1
时,Red Hat OpenShift GitOps Operator 会将 openshift-gitops
命名空间中创建的默认 Argo CD 实例从 argocd-cluster
重命名到 openshift-gitops
。
这是一个有问题的变化,需要在升级前手动执行以下步骤:
进入 OpenShift Container Platform web 控制台,将
openshift-gitops
命名空间中的argocd-cm.yml
配置映射文件的内容复制到本地文件中。内容可能类似以下示例:argocd 配置映射 YAML 示例
kind: ConfigMap apiVersion: v1 metadata: selfLink: /api/v1/namespaces/openshift-gitops/configmaps/argocd-cm resourceVersion: '112532' name: argocd-cm uid: f5226fbc-883d-47db-8b53-b5e363f007af creationTimestamp: '2021-04-16T19:24:08Z' managedFields: ... namespace: openshift-gitops labels: app.kubernetes.io/managed-by: argocd-cluster app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocd data: "" 1 admin.enabled: 'true' statusbadge.enabled: 'false' resource.exclusions: | - apiGroups: - tekton.dev clusters: - '*' kinds: - TaskRun - PipelineRun ga.trackingid: '' repositories: | - type: git url: https://github.com/user-name/argocd-example-apps ga.anonymizeusers: 'false' help.chatUrl: '' url: >- https://argocd-cluster-server-openshift-gitops.apps.dev-svc-4.7-041614.devcluster.openshift.com "" 2 help.chatText: '' kustomize.buildOptions: '' resource.inclusions: '' repository.credentials: '' users.anonymous.enabled: 'false' configManagementPlugins: '' application.instanceLabelKey: ''
-
删除默认的
argocd-cluster
实例。 -
编辑新的
argocd-cm.yml
配置映射文件,手动恢复整个data
部分。 将配置映射条目中的 URL 值替换为新实例名称
openshift-gitops
。例如,在上例中将 URL 值替换为以下 URL 值:url: >- https://openshift-gitops-server-openshift-gitops.apps.dev-svc-4.7-041614.devcluster.openshift.com
- 登录到 Argo CD 集群,验证之前的配置是否存在。