10.2.2. PolicyGenerator CR を使用したソース CR コンテンツのオーバーライド
PolicyGenerator カスタムリソース (CR) を使用すると、ztp-site-generate コンテナー内の GitOps プラグインで提供されるベースソース CR の上に追加の設定の詳細をオーバーレイできます。PolicyGenerator CR は、ベース CR への論理的なマージまたはパッチと考えることができます。PolicyGenerator CR を使用して、ベース CR のシングルフィールドを更新するか、ベース CR の内容全体をオーバーレイします。ベース CR にない値の更新やフィールドの挿入が可能です。
以下の手順の例では、acm-group-du-sno-ranGen.yaml ファイルの PolicyGenerator CR に基づいて、参照設定用に生成された PerformanceProfile CR のフィールドを更新する方法を説明します。この手順を元に、PolicyGenerator の他の部分をお客様のご要望に応じて変更してください。
前提条件
- カスタムサイトの設定データを管理する Git リポジトリーを作成している。リポジトリーはハブクラスターからアクセス可能で、Argo CD のソースリポジトリーとして定義されている必要があります。
手順
既存のコンテンツのベースラインソース CR を確認します。参照
PolicyGeneratorCR にリストされているソース CR を GitOps Zero Touch Provisioning (ZTP) コンテナーから抽出し、確認できます。/outフォルダーを作成します。$ mkdir -p ./outソース CR を抽出します。
$ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.20.1 extract /home/ztp --tar | tar x -C ./out
./out/source-crs/PerformanceProfile.yamlにあるベースラインPerformanceProfileCR を確認します。apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: $name annotations: ran.openshift.io/ztp-deploy-wave: "10" spec: additionalKernelArgs: - "idle=poll" - "rcupdate.rcu_normal_after_boot=0" cpu: isolated: $isolated reserved: $reserved hugepages: defaultHugepagesSize: $defaultHugepagesSize pages: - size: $size count: $count node: $node machineConfigPoolSelector: pools.operator.machineconfiguration.openshift.io/$mcp: "" net: userLevelNetworking: true nodeSelector: node-role.kubernetes.io/$mcp: '' numa: topologyPolicy: "restricted" realTimeKernel: enabled: true注記ソース CR のフィールドで
$…を含むものは、PolicyGeneratorCR で提供されない場合、生成された CR から削除されます。acm-group-du-sno-ranGen.yaml参照ファイル内のPerformanceProfileのPolicyGeneratorエントリーを更新します。以下の例のPolicyGeneratorCR スタンザは、適切な CPU 仕様を指定し、hugepagesを設定して、globallyDisableIrqLoadBalancingを false に設定する新しいフィールドを追加します。- path: source-crs/PerformanceProfile.yaml patches: - spec: # These must be tailored for the specific hardware platform cpu: isolated: "2-19,22-39" reserved: "0-1,20-21" hugepages: defaultHugepagesSize: 1G pages: - size: 1G count: 10 globallyDisableIrqLoadBalancing: falseGit で
PolicyGenerator変更をコミットし、GitOps ZTP argo CD アプリケーションによって監視される Git リポジトリーにプッシュします。出力例
GitOps ZTP アプリケーションは、生成された
PerformanceProfileCR を含む RHACM ポリシーを生成します。その CR の内容は、PolicyGeneratorのPerformanceProfileエントリーのmetadataおよびspec内容をソース CR にマージすることによって生成されます。作成される CR には以下のコンテンツが含まれます。--- apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: openshift-node-performance-profile spec: additionalKernelArgs: - idle=poll - rcupdate.rcu_normal_after_boot=0 cpu: isolated: 2-19,22-39 reserved: 0-1,20-21 globallyDisableIrqLoadBalancing: false hugepages: defaultHugepagesSize: 1G pages: - count: 10 size: 1G machineConfigPoolSelector: pools.operator.machineconfiguration.openshift.io/master: "" net: userLevelNetworking: true nodeSelector: node-role.kubernetes.io/master: "" numa: topologyPolicy: restricted realTimeKernel: enabled: true
ztp-site-generate コンテナーからデプロイメントした /source-crs フォルダーでは、$ 構文が暗示するテンプレート置換は使用されません。むしろ、policyGen ツールが文字列の $ 接頭辞を認識し、関連する PolicyGenerator CR でそのフィールドの値を指定しない場合、そのフィールドは出力 CR から完全に省略されます。
例外として、/source-crs YAML ファイル内の $mcp 変数は、PolicyGenerator CR から mcp の指定値で代用されます。たとえば、example/acmpolicygenerator/acm-group-du-standard-ranGen.yaml では、mcp の値は worker です。
spec:
bindingRules:
group-du-standard: ""
mcp: "worker"
policyGen ツールは、$mcp のインスタンスを出力 CR の worker に置き換えます。