10.11. PolicyGenTemplate CR でのハブテンプレートの使用
Topology Aware Lifecycle Manager は、GitOps Zero Touch Provisioning (ZTP) で使用される設定ポリシーで、部分的な Red Hat Advanced Cluster Management (RHACM) ハブクラスターテンプレート機能をサポートします。
ハブ側のクラスターテンプレートを使用すると、ターゲットクラスターに合わせて動的にカスタマイズできる設定ポリシーを定義できます。これにより、設定は似ているが値が異なる多くのクラスターに対して個別のポリシーを作成する必要がなくなります。
ポリシーテンプレートは、ポリシーが定義されている namespace と同じ namespace に制限されています。これは、ハブテンプレートで参照されるオブジェクトを、ポリシーが作成されたのと同じ namespace に作成する必要があることを意味します。
TALM を使用する GitOps ZTP では、次のサポートされているハブテンプレート関数を使用できます。
fromConfigmapは、指定されたConfigMapリソースで提供されたデータキーの値を返します。注記ConfigMapCR には 1 MiB のサイズ制限 があります。ConfigMapCR の有効サイズは、last-applied-configurationアノテーションによってさらに制限されます。last-applied-configuration制限を回避するには、次のアノテーションをテンプレートConfigMapに追加します。argocd.argoproj.io/sync-options: Replace=true
argocd.argoproj.io/sync-options: Replace=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
base64encは、base64 でエンコードされた入力文字列の値を返します -
base64decは、base64 でエンコードされた入力文字列のデコードされた値を返します -
indentは、インデントスペースが追加された入力文字列を返します -
autoindentは、親テンプレートで使用されているスペースに基づいてインデントスペースを追加した入力文字列を返します。 -
toIntは、入力値の整数値をキャストして返します -
toBoolは入力文字列をブール値に変換し、ブール値を返します
GitOps ZTP では、さまざまな オープンソースコミュニティー機能 も利用できます。
10.11.1. ハブテンプレートの例 リンクのコピーリンクがクリップボードにコピーされました!
次のコード例は、有効なハブテンプレートです。これらの各テンプレートは、default namespace で test-config という名前の ConfigMap CR から値を返します。
キー
common-keyを持つ値を返します。{{hub fromConfigMap "default" "test-config" "common-key" hub}}{{hub fromConfigMap "default" "test-config" "common-key" hub}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow .ManagedClusterNameフィールドと文字列-nameの連結値を使用して、文字列を返します。{{hub fromConfigMap "default" "test-config" (printf "%s-name" .ManagedClusterName) hub}}{{hub fromConfigMap "default" "test-config" (printf "%s-name" .ManagedClusterName) hub}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow .ManagedClusterNameフィールドと文字列-nameの連結値からブール値をキャストして返します。{{hub fromConfigMap "default" "test-config" (printf "%s-name" .ManagedClusterName) | toBool hub}}{{hub fromConfigMap "default" "test-config" (printf "%s-name" .ManagedClusterName) | toBool hub}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow .ManagedClusterNameフィールドと文字列-nameの連結値から整数値をキャストして返します。{{hub (printf "%s-name" .ManagedClusterName) | fromConfigMap "default" "test-config" | toInt hub}}{{hub (printf "%s-name" .ManagedClusterName) | fromConfigMap "default" "test-config" | toInt hub}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.11.2. ハブテンプレートを使用して PolicyGenTemplate CR グループのグループとサイトの設定を指定する リンクのコピーリンクがクリップボードにコピーされました!
ハブテンプレートを使用して、マネージドクラスターに適用される生成済みポリシーにグループとサイトの値を入力することで、ConfigMap CR でクラスターのフリート設定を管理できます。PolicyGenTemplate (PGT) CR のサイトでハブテンプレートを使用すると、サイトごとに PolicyGenTemplate CR を作成する必要がなくなります。
ハードウェアの種類や地域などのユースケースに応じて、フリート内のクラスターをさまざまなカテゴリーにグループ化できます。各クラスターには、そのクラスターが属するグループ (複数可) に対応するラベルが必要です。各グループの設定値を異なる ConfigMap CR で管理する場合、ハブテンプレートを使用してグループ内のすべてのクラスターに変更を適用するには、1 つのグループ PolicyGenTemplate CR のみ必要です。
次の例は、3 つの ConfigMap CR と 1 つの PolicyGenTemplate CR グループを使用して、サイトとグループの両方の設定を、ハードウェアタイプとリージョンごとにグループ化されたクラスターに適用する方法を示しています。
fromConfigmap 関数を使用する場合、printf 変数はテンプレートリソース data キーフィールドでのみ使用できます。name および namespace フィールドでは使用できません。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとしてハブクラスターにログインしている。 - カスタムサイトの設定データを管理する Git リポジトリーを作成している。リポジトリーはハブクラスターからアクセスでき、GitOps ZTP ArgoCD アプリケーションのソースリポジトリーとして定義されている必要があります。
手順
グループとサイトの設定を含む 3 つの
ConfigMapCR を作成します。group-hardware-types-configmapという名前のConfigMapCR を作成して、ハードウェア固有の設定を保持します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
argocd.argoproj.io/sync-optionsアノテーションは、ConfigMapのサイズが 1 MiB より大きい場合にのみ必要です。
group-zones-configmapという名前のConfigMapCR を作成して、地域設定を保持します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow site-data-configmapという名前のConfigMapCR を作成して、サイト固有の設定を保持します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注記各
ConfigMapCR は、PolicyGenTemplateCR グループから生成されるポリシーと同じ namespace に配置される必要があります。-
Git で
ConfigMapCR をコミットし、Argo CD アプリケーションが監視する Git リポジトリーにプッシュします。 ハードウェアタイプとリージョンラベルをクラスターに適用します。次のコマンドは、
du-sno-1-zone-1という名前のシングルクラスターに適用され、"hardware-type": "hardware-type-1"および"group-du-sno-zone": "zone-1"のラベルが選択されます。oc patch managedclusters.cluster.open-cluster-management.io/du-sno-1-zone-1 --type merge -p '{"metadata":{"labels":{"hardware-type": "hardware-type-1", "group-du-sno-zone": "zone-1"}}}'$ oc patch managedclusters.cluster.open-cluster-management.io/du-sno-1-zone-1 --type merge -p '{"metadata":{"labels":{"hardware-type": "hardware-type-1", "group-du-sno-zone": "zone-1"}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow ハブテンプレートを使用して
ConfigMapオブジェクトから必要なデータを取得するPolicyGenTemplateCR グループを作成します。例として挙げたこのPolicyGenTemplateCR は、spec.bindingRulesの下にリストされているラベルに一致するクラスターのロギング、VLAN ID、NIC、およびパフォーマンスプロファイルを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記サイト固有の設定値を取得するには、
.ManagedClusterNameフィールドを使用します。これは、ターゲットマネージドクラスターの名前に設定されたテンプレートコンテキスト値です。グループ固有の設定を取得するには、
.ManagedClusterLabelsフィールドを使用します。これは、マネージドクラスターのラベルの値に設定されたテンプレートコンテキスト値です。サイトの
PolicyGenTemplateCR を Git にコミットし、ArgoCD アプリケーションによって監視されている Git リポジトリーにプッシュします。注記参照された
ConfigMapCR に対するその後の変更は、適用されたポリシーに自動的に同期されません。新しいConfigMapの変更を手動で同期して、既存のPolicyGenTemplateCR を更新する必要があります。「新しい ConfigMap の変更を既存の PolicyGenTemplate CR に同期する」を参照してください。複数のクラスターに同じ
PolicyGenTemplateCR を使用できます。設定に変更がある場合、各クラスターの設定とマネージドクラスターのラベルを保持するConfigMapオブジェクトのみ変更する必要があります。
10.11.3. 新しい ConfigMap の変更を既存の PolicyGenTemplate CR に同期する リンクのコピーリンクがクリップボードにコピーされました!
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとしてハブクラスターにログインしている。 -
ハブクラスターテンプレートを使用して
ConfigMapCR から情報を取得するPolicyGenTemplateCR を作成しました。
手順
-
ConfigMapCR の内容を更新し、変更をハブクラスターに適用します。 更新された
ConfigMapCR の内容をデプロイされたポリシーに同期するには、次のいずれかを実行します。オプション 1: 既存のポリシーを削除します。ArgoCD は
PolicyGenTemplateCR を使用して、削除されたポリシーをすぐに再作成します。たとえば、以下のコマンドを実行します。oc delete policy <policy_name> -n <policy_namespace>
$ oc delete policy <policy_name> -n <policy_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション 2:
ConfigMapを更新するたびに、特別なアノテーションpolicy.open-cluster-management.io/trigger-updateを異なる値でポリシーに適用します。以下に例を示します。oc annotate policy <policy_name> -n <policy_namespace> policy.open-cluster-management.io/trigger-update="1"
$ oc annotate policy <policy_name> -n <policy_namespace> policy.open-cluster-management.io/trigger-update="1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記変更を有効にするには、更新されたポリシーを適用する必要があります。詳細は、再処理のための特別なアノテーション を参照してください。
オプション: 存在する場合は、ポリシーを含む
ClusterGroupUpdateCR を削除します。以下に例を示します。oc delete clustergroupupgrade <cgu_name> -n <cgu_namespace>
$ oc delete clustergroupupgrade <cgu_name> -n <cgu_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された
ConfigMapの変更を適用するポリシーを含む新しいClusterGroupUpdateCR を作成します。たとえば、次の YAML をファイルcgr-example.yamlに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新されたポリシーを適用します。
oc apply -f cgr-example.yaml
$ oc apply -f cgr-example.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow