17.12. 更新 GitOps ZTP

您可以独立于 hub 集群、Red Hat Advanced Cluster Management (RHACM) 和受管 OpenShift Container Platform 集群更新 Gitops 零接触置备 (ZTP) 基础架构。

注意

当新版本可用时,您可以更新 Red Hat OpenShift GitOps Operator。更新 GitOps ZTP 插件时,请查看参考配置中的更新文件,并确保更改满足您的要求。

17.12.1. GitOps ZTP 更新过程概述

您可以为运行较早版本的 GitOps ZTP 集群更新 GitOps 零接触置备 (ZTP)。更新过程可避免对受管集群的影响。

注意

对策略设置的任何更改(包括添加推荐内容)都会生成要应用到受管集群并协调的更新策略。

在高级别上,更新 GitOps ZTP 基础架构的策略如下:

  1. 使用 ztp-done 标签标记所有现有集群。
  2. 停止 ArgoCD 应用程序。
  3. 安装新的 GitOps ZTP 工具。
  4. 更新 Git 存储库中的所需内容和可选更改。
  5. 更新并重启应用程序配置。

17.12.2. 准备升级

使用以下步骤为 GitOps 零接触置备(ZTP)升级准备您的站点。

步骤

  1. 获取具有用于配置 Red Hat OpenShift GitOps 的自定义资源 (CR) 的 GitOps ZTP 容器的最新版本,以用于 GitOps ZTP。
  2. 使用以下命令提取 argocd/deployment 目录:

    $ mkdir -p ./update
    $ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.12 extract /home/ztp --tar | tar x -C ./update

    /update 目录包含以下子目录:

    • update/extra-manifest: 包含 SiteConfig CR 用来生成额外清单 configMap 的源 CR 文件。
    • update/source-crs :包含 PolicyGenTemplate CR 用于生成 Red Hat Advanced Cluster Management(RHACM)策略的源 CR 文件。
    • update/argocd/deployment: 包含要在 hub 集群上应用的补丁和 YAML 文件,以便在此过程的下一步中使用。
    • update/argocd/example 包含代表推荐的配置的 siteConfigPolicyGenTemplate 文件的示例。
  3. 更新 cluster-app.yamlpolicies-app.yaml 文件,以反映应用程序的名称以及 Git 仓库的 URL、分支和路径。

    如果升级包含导致过时的策略的更改,则应该在执行升级前删除过时的策略。

  4. /update 文件夹和 Git 仓库(您管理团队站点 CR)中的配置和部署源 CR 之间的更改进行 diff 操作。应用所需的更改并将其推送到您的站点存储库。

    重要

    当您将 GitOps ZTP 更新至最新版本时,您必须将 update/argocd/deployment 目录中的更改应用到您的站点存储库。不要使用旧版本的 argocd/deployment/ 文件。

17.12.3. 标记现有集群

为确保现有集群由工具更新保持不变,请使用 ztp-done 标签标记所有现有的受管集群。

注意

此流程仅在更新没有使用 Topology Aware Lifecycle Manager (TALM) 置备的集群时应用。使用 TALM 置备的集群会使用 ztp-done 自动标记。

步骤

  1. 找到列出使用零接触置备(ZTP)部署的受管集群的标签选择器,如 local-cluster!=true

    $ oc get managedcluster -l 'local-cluster!=true'
  2. 确保生成的列表中包含使用 ZTP 部署的所有受管集群,然后使用该选择器添加 ztp-done 标签:

    $ oc label managedcluster -l 'local-cluster!=true' ztp-done=

17.12.4. 停止现有的 GitOps ZTP 应用程序

删除现有的应用程序可确保在有新版本工具可用前,不会推出对 Git 存储库中现有内容的任何更改。

使用 deployment 目录中的应用文件。如果您为应用程序使用自定义名称,则首先更新这些文件中的名称。

流程

  1. clusters 应用程序上执行非级联删除以保留所有生成的资源:

    $ oc delete -f update/argocd/deployment/clusters-app.yaml
  2. policies 应用程序上执行级联删除以删除所有之前的策略:

    $ oc patch -f policies-app.yaml -p '{"metadata": {"finalizers": ["resources-finalizer.argocd.argoproj.io"]}}' --type merge
    $ oc delete -f update/argocd/deployment/policies-app.yaml

17.12.5. 对 Git 存储库进行所需的更改

当将 ztp-site-generate 容器从较早版本的 GitOps ZTP 升级到 v4.10 或更高版本时,Git 仓库的内容需要额外的要求。存储库中的现有内容必须更新,以反映这些更改。

  • PolicyGenTemplate 文件进行必要的更改:

    所有 PolicyGenTemplate 文件都必须在带有 ztp 前缀的命名空间中创建。这样可确保 GitOps 零接触置备(ZTP)应用程序可以管理由 GitOps ZTP 生成的策略 CR,而不与 Red Hat Advanced Cluster Management(RHACM)在内部管理策略冲突。

  • kustomization.yaml 文件添加到存储库中:

    所有 siteConfigPolicyGenTemplate CR 必须包含在其各自目录树下的 kustomization.yaml 文件中。例如:

    ├── policygentemplates
    │   ├── site1-ns.yaml
    │   ├── site1.yaml
    │   ├── site2-ns.yaml
    │   ├── site2.yaml
    │   ├── common-ns.yaml
    │   ├── common-ranGen.yaml
    │   ├── group-du-sno-ranGen-ns.yaml
    │   ├── group-du-sno-ranGen.yaml
    │   └── kustomization.yaml
    └── siteconfig
        ├── site1.yaml
        ├── site2.yaml
        └── kustomization.yaml
    注意

    generator 部分中列出的文件只能包含 site ConfigPolicyGenTemplate CR。如果现有 YAML 文件包含其他 CR,如 Namespace,则这些其他 CR 必须拉取到单独的文件中,并在 resources 部分列出。

    PolicyGenTemplate kustomization 文件必须包括 generator 部分中的所有 PolicyGenTemplate YAML 文件,以及 resources 部分中的 Namespace CR。例如:

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    generators:
    - common-ranGen.yaml
    - group-du-sno-ranGen.yaml
    - site1.yaml
    - site2.yaml
    
    resources:
    - common-ns.yaml
    - group-du-sno-ranGen-ns.yaml
    - site1-ns.yaml
    - site2-ns.yaml

    SiteConfig kustomization 文件必须包括 generator 部分中的所有 SiteConfig YAML 文件,以及资源中的任何其他 CR:

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    generators:
    - site1.yaml
    - site2.yaml
  • 删除 pre-sync.yamlpost-sync.yaml 文件。

    在 OpenShift Container Platform 4.10 及更新的版本中,不再需要 pre-sync.yamlpost-sync.yaml 文件。update/deployment/kustomization.yaml CR 管理 hub 集群上的策略部署。

    注意

    SiteConfigPolicyGenTemplate 树下都有一组 pre-sync.yamlpost-sync.yaml 文件。

  • 检查并纳入推荐的更改

    每个发行版本可能会包括对应用到已部署集群的配置进行额外的推荐更改。通常,这些更改由 OpenShift 平台、额外功能或改进对平台的调整带来较低的 CPU 使用。

    查看适用于您网络中的集群类型的参考 SiteConfigPolicyGenTemplate CR。这些示例可在从 GitOps ZTP 容器中提取的 argocd/example 目录中找到。

17.12.6. 安装新的 GitOps ZTP 应用程序

使用提取的 argocd/deployment 目录,并在确保应用程序指向 Git 存储库后应用部署目录的所有内容。应用目录的内容可确保正确配置应用程序的所有必要资源。

流程

  1. 要使用之前提取到 update/argocd/deployment/ 目录中的补丁文件来修补 hub 集群中的 ArgoCD 实例,请输入以下命令:

    $ oc patch argocd openshift-gitops \
    -n openshift-gitops --type=merge \
    --patch-file update/argocd/deployment/argocd-openshift-gitops-patch.json
  2. 要应用 argocd/deployment 目录的内容,请输入以下命令:

    $ oc apply -k update/argocd/deployment

17.12.7. 推出 GitOps ZTP 配置更改

如果因为实现推荐的更改而在升级过程中包括任何配置更改,升级过程会在 hub 集群上生成 Non-Compliant 状态的一组策略 CR。使用 ZTP GitOps v4.10 及之后的版本 ztp-site-generate 容器,这些策略被设置为 inform 模式,且不会为用户在没有额外步骤的情况下推送到受管集群。这样可保证在进行更改时可以管理对集群的破坏性更改,例如在维护窗口期间以及同时更新多少个集群。

要推出更改,请创建一个或多个 ClusterGroupUpgrade CR,如 TALM 文档所述。CR 必须包含您要推送到受管集群的 Non-Compliant 策略列表,以及应包含在更新中的集群的列表或选择器。

其他资源