19.16. 为多个受管集群创建 ZTP 自定义资源


如果您要安装多个受管集群,则 ZTP 使用 ArgoCD 和 SiteConfig 来管理创建自定义资源 (CR) 的进程,并使用 GitOps 方法为多个集群 (每次批处理不超过 100 个) 生成并应用策略。

安装和部署集群分为两个阶段,如下所示:

19.16.1. 部署 ZTP 管道的先决条件

  • OpenShift Container Platform 集群版本 4.8 或更高版本,并安装 Red Hat GitOps Operator。
  • 已安装 Red Hat Advanced Cluster Management(RHACM)版本 2.3 或更高版本。
  • 对于断开连接的环境,请确保您的源数据 Git 存储库和 ztp-site-generator 容器镜像可从 hub 集群中访问。
  • 如果您需要额外的自定义内容,如额外安装清单或策略的自定义资源(CR),请将它们添加到 /usr/src/hook/ztp/source-crs/extra-manifest/ 目录中。同样,您可以将从 PolicyGenTemplate 引用的额外配置 CR 添加到 /usr/src/hook/ztp/source-crs/ 目录中。

    • 创建一个将额外清单添加到红帽提供的镜像的 Containerfile,例如:

      FROM <registry fqdn>/ztp-site-generator:latest 
      1
      
      COPY myInstallManifest.yaml /usr/src/hook/ztp/source-crs/extra-manifest/
      COPY mySourceCR.yaml /usr/src/hook/ztp/source-crs/
      Copy to Clipboard Toggle word wrap
      1
      <registry fqdn> 必须指向包含红帽提供的 ztp-site-generator 容器镜像的 registry。
    • 构建包含这些额外文件的新容器镜像:

      $> podman build Containerfile.example
      Copy to Clipboard Toggle word wrap

19.16.2. 安装 GitOps ZTP 管道

本节中的步骤告诉您如何完成以下任务:

  • 准备托管站点配置数据所需的 Git 存储库。
  • 配置 hub 集群以生成所需的安装和策略自定义资源 (CR)。
  • 使用 ZTP 部署受管集群。

19.16.2.1. 准备 ZTP Git 存储库

创建用于托管站点配置数据的 Git 存储库。ZTP 管道需要读取此存储库。

流程

  1. 使用 SiteConfigPolicyGenTemplate 自定义资源 (CR) 的单独路径创建一个目录结构。
  2. pre-sync.yamlpost-sync.yamlresource-hook-example/<policygentemplates>/ 添加到 PolicyGenTemplate CR 的路径。
  3. pre-sync.yamlpost-sync.yamlresource-hook-example/<siteconfig>/ 添加到 SiteConfig CR 的路径。

    注意

    如果您的 hub 集群在断开连接的环境中工作,则必须为所有四个 pre 和 post 同步 hook CR 更新 镜像

  4. 应用 policygentemplates.ran.openshift.iositeconfigs.ran.openshift.io CR 定义。

19.16.2.2. 为 ZTP 准备 hub 集群

您可以使用一组 ArgoCD 应用程序来配置 hub 集群,这些应用程序会根据 ZTP GitOps 流为每个站点生成所需的安装和策略自定义资源 (CR)。

流程

  1. 在 hub 集群上安装 Red Hat OpenShift GitOps Operator。
  2. 提取 ArgoCD 的管理员密码:

    $ oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d
    Copy to Clipboard Toggle word wrap
  3. 准备 ArgoCD 管道配置:

    1. 使用最新的容器镜像版本从 ZTP 站点生成器容器中提取 ArgoCD 部署 CR:

      $ mkdir ztp
      $ podman run --rm -v `pwd`/ztp:/mnt/ztp:Z registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.9.0-1 /bin/bash -c "cp -ar /usr/src/hook/ztp/* /mnt/ztp/"
      Copy to Clipboard Toggle word wrap

      本节中剩余的步骤与 ztp/gitops-subscriptions/argocd/ 目录相关。

    2. 使用适当的 URL、targetRevision 分支和路径值修改两个 ArgoCD 应用程序 deployment/clusters-app.yamldeployment/policies-app.yaml 的源值。路径值必须与 Git 存储库中使用的值匹配。

      修改 deployment/clusters-app.yaml

      apiVersion: v1
      kind: Namespace
      metadata:
           name: clusters-sub
      ---
      apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
           name: clusters
           namespace: openshift-gitops
      spec:
          destination:
               server: https://kubernetes.default.svc
               namespace: clusters-sub
        project: default
        source:
            path: ztp/gitops-subscriptions/argocd/resource-hook-example/siteconfig 
      1
      
            repoURL: https://github.com/openshift-kni/cnf-features-deploy 
      2
      
            targetRevision: master 
      3
      
        syncPolicy:
            automated:
                prune: true
                selfHeal: true
             syncOptions:
             - CreateNamespace=true
      Copy to Clipboard Toggle word wrap
      1
      ztp/gitops-subscriptions/argocd/ 文件路径,其中包含集群的 siteconfig CR。
      2
      包含 siteconfig 自定义资源的 Git 存储库的 URL,用于定义安装集群的站点配置。
      3
      包含相关站点配置数据的 Git 存储库的分支。
    3. 修改 deployment/policies-app.yaml

      apiVersion: v1
      kind: Namespace
      metadata:
                name: policies-sub
      ---
      apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
            name: policies
            namespace: openshift-gitops
      spec:
        destination:
              server: https://kubernetes.default.svc
              namespace: policies-sub
        project: default
        source:
             directory:
                 recurse: true
              path: ztp/gitops-subscriptions/argocd/resource-hook-example/policygentemplates 
      1
      
              repoURL: https://github.com/openshift-kni/cnf-features-deploy 
      2
      
              targetRevision: master 
      3
      
        syncPolicy:
            automated:
                prune: true
                selfHeal: true
             syncOptions:
             - CreateNamespace=true
      Copy to Clipboard Toggle word wrap
      1
      ztp/gitops-subscriptions/argocd/ 文件路径,其中包含集群的 policygentemplates CR。
      2
      包含 policygentemplates 自定义资源的 Git 存储库的 URL,用于指定站点的配置数据。
      3
      Git 存储库中的分支,其中包含相关的配置数据。
  4. 要将管道配置应用到 hub 集群,请输入以下命令:

    $ oc apply -k ./deployment
    Copy to Clipboard Toggle word wrap

19.16.3. 创建站点 secret

将站点所需的 secret 添加到 hub 集群。这些资源必须位于带有与集群名称匹配的名称的命名空间中。

流程

  1. 创建用于向站点 Baseboard Management Controller (BMC) 进行身份验证的 secret。确保 secret 名称与 SiteConfig 中使用的名称匹配。在本例中,secret 名称为 test-sno-bmh-secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: test-sno-bmh-secret
      namespace: test-sno
    data:
      password: dGVtcA==
      username: cm9vdA==
    type: Opaque
    Copy to Clipboard Toggle word wrap
  2. 为站点创建 pull secret。pull secret 必须包含安装 OpenShift 和所有附加组件 Operator 所需的所有凭证。在本例中,secret 名称是 assisted-deployment-pull-secret

    apiVersion: v1
    kind: Secret
    metadata:
      name: assisted-deployment-pull-secret
      namespace: test-sno
    type: kubernetes.io/dockerconfigjson
    data:
      .dockerconfigjson: <Your pull secret base64 encoded>
    Copy to Clipboard Toggle word wrap
注意

secret 根据名称从 SiteConfig 自定义资源 (CR) 引用。命名空间必须与 SiteConfig 命名空间匹配。

19.16.4. 创建 SiteConfig 自定义资源

ArgoCD 充当站点部署的 GitOps 方法引擎。完成包含站点安装所需自定义资源的站点计划后,策略生成器会创建清单并将其应用到 hub 集群。

流程

  1. 创建一个或多个 SiteConfig 自定义资源(site-config.yaml 文件),其中包含集群的站点计划数据。例如:

    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "test-sno"
      namespace: "test-sno"
    spec:
      baseDomain: "clus2.t5g.lab.eng.bos.redhat.com"
      pullSecretRef:
        name: "assisted-deployment-pull-secret"
      clusterImageSetNameRef: "openshift-4.9"
      sshPublicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDB3dwhI5X0ZxGBb9VK7wclcPHLc8n7WAyKjTNInFjYNP9J+Zoc/ii+l3YbGUTuqilDwZN5rVIwBux2nUyVXDfaM5kPd9kACmxWtfEWTyVRootbrNWwRfKuC2h6cOd1IlcRBM1q6IzJ4d7+JVoltAxsabqLoCbK3svxaZoKAaK7jdGG030yvJzZaNM4PiTy39VQXXkCiMDmicxEBwZx1UsA8yWQsiOQ5brod9KQRXWAAST779gbvtgXR2L+MnVNROEHf1nEjZJwjwaHxoDQYHYKERxKRHlWFtmy5dNT6BbvOpJ2e5osDFPMEd41d2mUJTfxXiC1nvyjk9Irf8YJYnqJgBIxi0IxEllUKH7mTdKykHiPrDH5D2pRlp+Donl4n+sw6qoDc/3571O93+RQ6kUSAgAsvWiXrEfB/7kGgAa/BD5FeipkFrbSEpKPVu+gue1AQeJcz9BuLqdyPUQj2VUySkSg0FuGbG7fxkKeF1h3Sga7nuDOzRxck4I/8Z7FxMF/e8DmaBpgHAUIfxXnRqAImY9TyAZUEMT5ZPSvBRZNNmLbfex1n3NLcov/GEpQOqEYcjG5y57gJ60/av4oqjcVmgtaSOOAS0kZ3y9YDhjsaOcpmRYYijJn8URAH7NrW8EZsvAoF6GUt6xHq5T258c6xSYUm5L0iKvBqrOW9EjbLw== root@cnfdc2.clus2.t5g.lab.eng.bos.redhat.com"
      clusters:
      - clusterName: "test-sno"
        clusterType: "sno"
        clusterProfile: "du"
        clusterLabels:
          group-du-sno: ""
          common: true
          sites : "test-sno"
        clusterNetwork:
          - cidr: 1001:db9::/48
            hostPrefix: 64
        machineNetwork:
          - cidr: 2620:52:0:10e7::/64
        serviceNetwork:
          - 1001:db7::/112
        additionalNTPSources:
          - 2620:52:0:1310::1f6
        nodes:
          - hostName: "test-sno.clus2.t5g.lab.eng.bos.redhat.com"
            bmcAddress: "idrac-virtualmedia+https://[2620:52::10e7:f602:70ff:fee4:f4e2]/redfish/v1/Systems/System.Embedded.1"
            bmcCredentialsName:
              name: "test-sno-bmh-secret"
            bmcDisableCertificateVerification: true 
    1
    
            bootMACAddress: "0C:42:A1:8A:74:EC"
            bootMode: "UEFI"
            rootDeviceHints:
              hctl: '0:1:0'
            cpuset: "0-1,52-53"
            nodeNetwork:
              interfaces:
                - name: eno1
                  macAddress: "0C:42:A1:8A:74:EC"
              config:
                interfaces:
                  - name: eno1
                    type: ethernet
                    state: up
                    macAddress: "0C:42:A1:8A:74:EC"
                    ipv4:
                      enabled: false
                    ipv6:
                      enabled: true
                      address:
                      - ip: 2620:52::10e7:e42:a1ff:fe8a:900
                        prefix-length: 64
                dns-resolver:
                  config:
                    search:
                    - clus2.t5g.lab.eng.bos.redhat.com
                    server:
                    - 2620:52:0:1310::1f6
                routes:
                  config:
                  - destination: ::/0
                    next-hop-interface: eno1
                    next-hop-address: 2620:52:0:10e7::fc
                    table-id: 254
    Copy to Clipboard Toggle word wrap
    1
    如果您使用 UEFI SecureBoot,请添加这一行以防止因为无效或本地证书而失败。
  2. 保存文件并将其推送到可从 hub 集群访问的 ZTP Git 存储库,并定义为 ArgoCD 应用程序的源存储库。

ArgoCD 检测到应用没有同步。同步后,ArgoCD 会自动或手动将 PolicyGenTemplate 与 hub 集群同步,并启动关联的资源 hook。这些 hook 负责生成应用到 spoke 集群的策略封装配置 CR。资源 hook 将站点定义转换为安装自定义资源,并将其应用到 hub 集群:

  • Namespace - 每个站点都是唯一的
  • AgentClusterInstall
  • BareMetalHost
  • ClusterDeployment
  • InfraEnv
  • NMStateConfig
  • ExtraManifestsConfigMap - Extra 清单。其他清单包括工作负载分区、chronyd、挂载点隐藏、sctp 启用等等。
  • ManagedCluster
  • KlusterletAddonConfig

Red Hat Advanced Cluster Management (RHACM) (ACM) 会部署 hub 集群。

19.16.5. 创建 PolicyGenTemplates

使用以下步骤创建在 hub 集群的 Git 仓库中生成策略所需的 PolicyGenTemplates

流程

  1. 创建 PolicyGenTemplates,并将其保存到可从 hub 集群访问 ZTP Git 存储库,并定义为 ArgoCD 应用程序的源存储库。
  2. ArgoCD 检测到应用没有同步。同步后,ArgoCD 会将新的 PolicyGenTemplate 应用到 hub 集群,并启动相关的资源 hook。这些 hook 负责生成应用到 spoke 集群的策略封装配置 CR 并执行以下操作:

    1. 根据基本分布式单元 (DU) 配置集和所需的自定义,创建 Red Hat Advanced Cluster Management (RHACM) 策略。
    2. 将生成的策略应用到 hub 集群。

ZTP 进程创建定向 ACM 的策略,以将所需的配置应用到集群节点。

19.16.6. 检查安装状态

ArgoCD 管道检测到 Git 存储库中的 SiteConfigPolicyGenTemplate 自定义资源 (CR),并将它们同步到 hub 集群。在此过程中,它会生成安装和策略 CR,并将其应用到 hub 集群。您可以在 ArgoCD 仪表板中监控此同步的进度。

流程

  1. 使用以下命令监控集群安装进度:

    $ export CLUSTER=<cluster_name>
    Copy to Clipboard Toggle word wrap
    $ oc get agentclusterinstall -n $CLUSTER $CLUSTER -o jsonpath='{.status.conditions[?(@.type=="Completed")]}' | jq
    Copy to Clipboard Toggle word wrap
    $ curl -sk $(oc get agentclusterinstall -n $CLUSTER $CLUSTER -o jsonpath='{.status.debugInfo.eventsURL}') | jq '.[-2,-1]'
    Copy to Clipboard Toggle word wrap
  2. 使用 Red Hat Advanced Cluster Management (RHACM) 仪表板来监控策略协调的进度。

19.16.7. 站点清理

要删除站点以及关联的安装和策略自定义资源 (CR),请从 Git 仓库中删除 SiteConfig 和特定于站点的 PolicyGenTemplate CR。Pipeline hook 删除生成的 CR。

注意

在删除 SiteConfig CR 前,您必须将集群从 ACM 分离。

19.16.7.1. 删除 ArgoCD 管道

如果要删除 ArgoCD 管道和所有生成的工件,请使用以下步骤。

流程

  1. 从 ACM 分离所有集群。
  2. 从 Git 仓库中删除所有 SiteConfigPolicyGenTemplate 自定义资源 (CR)。
  3. 删除以下命名空间:

    • 所有策略命名空间:

       $ oc get policy -A
      Copy to Clipboard Toggle word wrap
    • clusters-sub
    • policies-sub
  4. 使用 Kustomize 工具处理目录:

     $ oc delete -k cnf-features-deploy/ztp/gitops-subscriptions/argocd/deployment
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat