19.16. 複数のマネージドクラスターの ZTP カスタムリソースの作成

複数のマネージドクラスターをインストールする場合、zero touch provisioning (ZTP) は ArgoCD と SiteConfig を使用して、GitOps アプリローチで、100 未満のバッチにおいて、カスタムリソース (CR) を作成するプロセス作成して、複数のクラスターにポリシーを適用するプロセスを管理します。

以下に示すように、クラスターのインストールとデプロイプロセスは 2 段階的プロセスで実行できます。

クラスターのインストールおよびデプロイの GitOps アプローチ

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 コンテナーイメージがハブクラスターからアクセスできるようにしてください。
  • ポリシーの追加のインストールマニフェストまたはカスタムリソース (CR) などの追加のカスタムコンテンツを /usr/src/hook/ztp/source-crs/extra-manifest/ ディレクトリーに追加します。同様に、PolicyGenTemplate から参照されている設定 CR を /usr/src/hook/ztp/source-crs/ ディレクトリーに追加できます。

    • 以下のように、追加のマニフェストを Red Hat が提供するイメージに追加する 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/
      1
      <registry fqdn> は、Red Hat が提供する ztp-site-generator コンテナーイメージを含むレジストリーを参照する必要があります。
    • これらの追加ファイルが含まれる新しいコンテナーイメージをビルドします。

      $> podman build Containerfile.example

19.16.2. GitOps ZTP パイプラインのインストール

本セクションの手順では、以下のタスクを実行する方法を説明します。

  • サイト設定データをホストするために必要な Git リポジトリーを準備します。
  • 必要なインストールおよびポリシーカスタムリソース (CR) を生成するハブクラスターを設定します。
  • ゼロタッチプロビジョニング (ZTP) を使用してマネージドクラスターをデプロイします。

19.16.2.1. ZTP Git リポジトリーの準備

サイト設定データをホストするための Git リポジトリーを作成します。ゼロタッチプロビジョニング (ZTP) パイプラインには、このリポジトリーへの読み取りアクセスが必要です。

手順

  1. SiteConfig および PolicyGenTemplate カスタムリソース (CR) とは別のパスでディレクトリー構造を作成します。
  2. resource-hook-example/<policygentemplates>/ から PolicyGenTemplate CR のパスに pre-sync.yamlpost-sync.yaml を追加します。
  3. resource-hook-example/<siteconfig>/ から SiteConfig CR のパスに pre-sync.yamlpost-sync.yaml を追加します。

    注記

    ハブクラスターが非接続環境で動作する場合は、同期フック CR すべてとポスト同期フック CR の image を更新する必要があります。

  4. policygentemplates.ran.openshift.io および siteconfigs.ran.openshift.io CR 定義を適用します。

19.16.2.2. ZTP 用のハブクラスターの準備

ゼロタッチプロビジョニング (ZTP) GitOps フローに基づいて、各サイトに必要なインストールおよびポリシーカスタムリソース (CR) を生成する ArgoCD アプリケーションのセットを使用して、ハブクラスターを設定できます。

手順

  1. ハブクラスターに Red Hat OpenShift GitOps Operator をインストールします。
  2. ArgoCD の管理者パスワードを抽出します。

    $ oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d
  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/"

      このセクションの残りの手順は、ztp/gitops-subscriptions/argocd/ ディレクトリーに関連しています。

    2. 適切な URL、targetRevision ブランチ、およびパス値を使用して 2 つの ArgoCD アプリケーションのソース値である deployment/clusters-app.yaml および deployment/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
      1
      クラスターのsiteconfig CR を含む ztp/gitops-subscriptions/argocd/ ファイルパス。
      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
      1
      クラスターの policygentemplates CR を含む ztp/gitops-subscriptions/argocd/ ファイルパス。
      2
      サイトの設定データを指定する policygentemplates カスタムリソースを含む Git リポジトリーの URL。
      3
      関連する設定データを含む Git リポジトリーのブランチ。
  4. パイプライン設定をハブクラスターに適用するには、以下のコマンドを入力します。

    $ oc apply -k ./deployment

19.16.3. サイトシークレットの作成

サイトに必要なシークレットをハブクラスターに追加します。これらのリソースは、クラスター名に一致する名前を持つ namespace にある必要があります。

手順

  1. サイトベースボード管理コントローラー (BMC) に対して認証するためのシークレットを作成します。シークレット名が SiteConfig で使用される名前と一致することを確認します。この例では、シークレット名は test-sno-bmh-secret です。

    apiVersion: v1
    kind: Secret
    metadata:
      name: test-sno-bmh-secret
      namespace: test-sno
    data:
      password: dGVtcA==
      username: cm9vdA==
    type: Opaque
  2. サイトのプルシークレットを作成します。プルシークレットには、OpenShift およびすべてのアドオン Operator のインストールに必要なすべての認証情報を含める必要があります。この例では、シークレット名は 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>
注記

シークレットは、名前で SiteConfig カスタムリソース (CR) から参照されます。namespace は SiteConfig namespace と一致する必要があります。

19.16.4. SiteConfig カスタムリソースの作成

ArgoCD は、サイトデプロイメントの GitOps メソッドのエンジンとして機能します。サイトのインストールに必要なカスタムリソースが含まれるサイトプランの完了後に、ポリシージェネレーターはマニフェストを作成し、それらをハブクラスターに適用します。

手順

  1. クラスターの site-plan データが含まれる site-config.yaml ファイル (1 つ以上の SiteConfig カスタムリソース) を作成します。以下に例を示します。

    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
    1
    UEFI SecureBoot を使用している場合は、この行を追加して、無効な証明書またはローカル証明書による障害を防止します。
  2. ファイルを保存し、それらをハブクラスターからアクセスできるゼロな変更プロビジョニング (ZTP) Git リポジトリーにプッシュし、ArgoCD アプリケーションのソースリポジトリーとして定義します。

ArgoCD は、アプリケーションが同期していないことを検出します。同期時に、ArgoCD は PolicyGenTemplate をハブクラスターに同期し、関連付けられたリソースフックを起動します。これらのフックは、スポーククラスターに適用されるポリシーラップされた設定 CR を生成します。リソースフックはサイト定義をインストールカスタムリソースに変換し、それらをハブクラスターに適用します。

  • Namespace: サイトごとに一意
  • AgentClusterInstall
  • BareMetalHost
  • ClusterDeployment
  • InfraEnv
  • NMStateConfig
  • ExtraManifestsConfigMap - Extra manifests.追加のマニフェストには、ワークロードのパーティション設定、chronyd、マウントポイントの非表示、sctp 有効化などが含まれます。
  • ManagedCluster
  • KlusterletAddonConfig

Red Hat Advanced Cluster Management (RHACM) (ACM) は、ハブクラスターをデプロイします。

19.16.5. PolicyGenTemplates の作成

以下の手順を使用して PolicyGenTemplates を作成します。これは、ハブクラスターの Git リポジトリーでポリシーを生成する必要があります。

手順

  1. PolicyGenTemplates を作成し、それらをハブクラスターからアクセスできるゼロタッチプロビジョニング (ZTP) Git リポジトリーに保存し、ArgoCD アプリケーションのソースリポジトリーとして定義します。
  2. ArgoCD は、アプリケーションが同期していないことを検出します。同期時に、ArgoCD は新規 PolicyGenTemplate をハブクラスターに適用し、関連付けられたリソースフックを起動します。これらのフックは、スポーククラスターに適用されるポリシーラップされた設定 CR を生成し、以下のアクションを実行します。

    1. 基本的な分散ユニット (DU) プロファイルおよび必要なカスタマイズに従って、Red Hat Advanced Cluster Management (RHACM) (ACM) ポリシーを作成します。
    2. 生成されたポリシーをハブクラスターに適用します。

ZTP プロセスでは、ACM をダイレクトするポリシーを作成し、必要な設定をクラスターノードに適用します。

19.16.6. インストールステータスの確認

ArgoCD パイプラインは、Git リポジトリーの SiteConfig および PolicyGenTemplate カスタムリソース (CR) を検出し、それらをハブクラスターに同期します。プロセスで、インストールおよびポリシー CR を生成し、それらをハブクラスターに適用します。ArgoCD ダッシュボードでこの同期の進捗をモニターできます。

手順

  1. 以下のコマンドを使用して、クラスターのインストールの進捗を監視します。

    $ export CLUSTER=<cluster_name>
    $ oc get agentclusterinstall -n $CLUSTER $CLUSTER -o jsonpath='{.status.conditions[?(@.type=="Completed")]}' | jq
    $ curl -sk $(oc get agentclusterinstall -n $CLUSTER $CLUSTER -o jsonpath='{.status.debugInfo.eventsURL}') | jq '.[-2,-1]'
  2. Red Hat Advanced Cluster Management (RHACM) ダッシュボードを使用して、ポリシーの調整の進捗を監視します。

19.16.7. サイトのクリーンアップ

サイトおよび関連するインストールおよびポリシーカスタムリソース (CR) を削除するには、Git リポジトリーから SiteConfig およびサイト固有の PolicyGenTemplate CR を削除します。Pipeline フックは生成された CR を削除します。

注記

SiteConfig CR を削除する前に、ACM からクラスターをデタッチする必要があります。

19.16.7.1. ArgoCD パイプラインの削除

ArgoCD パイプラインおよび生成されたすべてのアーティファクトを削除する場合は、以下の手順を使用します。

手順

  1. ACM からすべてのクラスターをデタッチします。
  2. Git リポジトリーからすべての SiteConfig および PolicyGenTemplate カスタムリソース (CR) を削除します。
  3. 以下の namespace を削除します。

    • すべてのポリシー namespace:

       $ oc get policy -A
    • clusters-sub
    • policies-sub
  4. Kustomize ツールを使用してディレクトリーを処理します。

     $ oc delete -k cnf-features-deploy/ztp/gitops-subscriptions/argocd/deployment