19.16. 複数のマネージドクラスターの ZTP カスタムリソースの作成
複数のマネージドクラスターをインストールする場合、zero touch provisioning (ZTP) は ArgoCD と SiteConfig
を使用して、GitOps アプリローチで、100 未満のバッチにおいて、カスタムリソース (CR) を作成するプロセス作成して、複数のクラスターにポリシーを適用するプロセスを管理します。
以下に示すように、クラスターのインストールとデプロイプロセスは 2 段階的プロセスで実行できます。
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) パイプラインには、このリポジトリーへの読み取りアクセスが必要です。
手順
-
SiteConfig
およびPolicyGenTemplate
カスタムリソース (CR) とは別のパスでディレクトリー構造を作成します。 -
resource-hook-example/<policygentemplates>/
からPolicyGenTemplate
CR のパスにpre-sync.yaml
とpost-sync.yaml
を追加します。 resource-hook-example/<siteconfig>/
からSiteConfig
CR のパスにpre-sync.yaml
とpost-sync.yaml
を追加します。注記ハブクラスターが非接続環境で動作する場合は、同期フック CR すべてとポスト同期フック CR の
image
を更新する必要があります。-
policygentemplates.ran.openshift.io
およびsiteconfigs.ran.openshift.io
CR 定義を適用します。
19.16.2.2. ZTP 用のハブクラスターの準備
ゼロタッチプロビジョニング (ZTP) GitOps フローに基づいて、各サイトに必要なインストールおよびポリシーカスタムリソース (CR) を生成する ArgoCD アプリケーションのセットを使用して、ハブクラスターを設定できます。
手順
- ハブクラスターに Red Hat OpenShift GitOps Operator をインストールします。
ArgoCD の管理者パスワードを抽出します。
$ oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d
ArgoCD パイプライン設定を準備します。
最新のコンテナーイメージバージョンを使用して、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/
ディレクトリーに関連しています。適切な 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
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
パイプライン設定をハブクラスターに適用するには、以下のコマンドを入力します。
$ oc apply -k ./deployment
19.16.3. サイトシークレットの作成
サイトに必要なシークレットをハブクラスターに追加します。これらのリソースは、クラスター名に一致する名前を持つ namespace にある必要があります。
手順
サイトベースボード管理コントローラー (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
サイトのプルシークレットを作成します。プルシークレットには、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 メソッドのエンジンとして機能します。サイトのインストールに必要なカスタムリソースが含まれるサイトプランの完了後に、ポリシージェネレーターはマニフェストを作成し、それらをハブクラスターに適用します。
手順
クラスターの 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
を使用している場合は、この行を追加して、無効な証明書またはローカル証明書による障害を防止します。
- ファイルを保存し、それらをハブクラスターからアクセスできるゼロな変更プロビジョニング (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 リポジトリーでポリシーを生成する必要があります。
手順
-
PolicyGenTemplates
を作成し、それらをハブクラスターからアクセスできるゼロタッチプロビジョニング (ZTP) Git リポジトリーに保存し、ArgoCD アプリケーションのソースリポジトリーとして定義します。 ArgoCD は、アプリケーションが同期していないことを検出します。同期時に、ArgoCD は新規
PolicyGenTemplate
をハブクラスターに適用し、関連付けられたリソースフックを起動します。これらのフックは、スポーククラスターに適用されるポリシーラップされた設定 CR を生成し、以下のアクションを実行します。- 基本的な分散ユニット (DU) プロファイルおよび必要なカスタマイズに従って、Red Hat Advanced Cluster Management (RHACM) (ACM) ポリシーを作成します。
- 生成されたポリシーをハブクラスターに適用します。
ZTP プロセスでは、ACM をダイレクトするポリシーを作成し、必要な設定をクラスターノードに適用します。
19.16.6. インストールステータスの確認
ArgoCD パイプラインは、Git リポジトリーの SiteConfig
および PolicyGenTemplate
カスタムリソース (CR) を検出し、それらをハブクラスターに同期します。プロセスで、インストールおよびポリシー CR を生成し、それらをハブクラスターに適用します。ArgoCD ダッシュボードでこの同期の進捗をモニターできます。
手順
以下のコマンドを使用して、クラスターのインストールの進捗を監視します。
$ 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]'
- 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 パイプラインおよび生成されたすべてのアーティファクトを削除する場合は、以下の手順を使用します。
手順
- ACM からすべてのクラスターをデタッチします。
-
Git リポジトリーからすべての
SiteConfig
およびPolicyGenTemplate
カスタムリソース (CR) を削除します。 以下の namespace を削除します。
すべてのポリシー namespace:
$ oc get policy -A
-
clusters-sub
-
policies-sub
Kustomize ツールを使用してディレクトリーを処理します。
$ oc delete -k cnf-features-deploy/ztp/gitops-subscriptions/argocd/deployment