4.5. 参照設定の高度なカスタマイズ


リファレンス設計からの一時的な逸脱を許可する場合は、より高度なカスタマイズを適用できます。

警告

このカスタマイズでは、比較時に cluster-compare プラグインが使用するデフォルトのマッチングプロセスをオーバーライドします。このような高度なカスタマイズを適用する場合は、cluster-compare から重要な情報が除外されるなど、意図しない結果が発生する可能性があるため、注意してください。

参照設定を動的にカスタマイズするための高度なタスクには、次のようなものがあります。

  • 手動マッチング: クラスターのカスタムリソースを参照設定のテンプレートと手動でマッチするようにユーザー設定ファイルを設定します。
  • 参照へのパッチ適用: cluster-compare コマンドでパッチオプションを使用して、参照にパッチを適用して参照設定を設定します。

4.5.1. CR とテンプレート間の手動マッチングの設定

cluster-compare プラグインによるデフォルトのマッチングが期待どおりに機能しない場合は、カスタムリソース (CR) とテンプレートを手動でマッチできます。

たとえば、クラスター内に同じ apiversionkindname、および namespace フィールドを持つ CR が複数ある場合、プラグインによるデフォルトのマッチングでは、差異が最も少ない CR が比較されます。プラグインが選択する CR を制御するには、手動マッチング設定を含むユーザー設定 YAML ファイルを作成し、この設定ファイルを cluster-compare コマンドに渡します。

手順

  1. 手動マッチングの条件を定義するユーザー設定ファイルを作成します。

    user-config.yaml ファイルの例

    correlationSettings:
       manualCorrelation:
          correlationPairs:
             apps.v1.DaemonSet.kube-system.kindnet.yaml: "template_example.yaml" 1

    1
    マッチする CR とテンプレートのペアを指定します。CR 仕様では、<apiversion>.<kind>.<namespace>.<name> という形式を使用します。namespace を持たないクラスタースコープの CR の場合は、<apiversion>.<kind>.<name> という形式を使用します。
  2. 次のコマンドを実行して、cluster-compare コマンドでユーザー設定ファイルを参照します。

    $ oc cluster-compare -r <path_to_reference_config>/metadata.yaml -c <path_to_user_config>/user-config.yaml 1
    1
    -c オプションを使用して user-config.yaml ファイルを指定します。

4.5.2. 参照設定へのパッチ適用

場合によっては、予想されるクラスター設定の逸脱を処理するために、参照設定にパッチを適用する必要があります。パッチはプラグインによって比較プロセス中に適用され、指定されたリソースフィールドがパッチファイルの定義のとおりに変更されます。

たとえば、最新の参照設定では非推奨になっている古いフィールドをクラスターで使用しているため、テンプレートに一時的にパッチを適用する必要がある場合があります。パッチが適用されたファイルは、比較出力の概要に報告されます。

パッチファイルは次の 2 つの方法で作成できます。

  • cluster-compare プラグインを使用してパッチ YAML ファイルを生成する。
  • 独自のパッチファイルを作成する。

4.5.2.1. cluster-compare プラグインを使用したパッチの生成

cluster-compare プラグインを使用して、特定のテンプレートファイル用のパッチを生成できます。プラグインは、クラスターのカスタムリソース (CR) と一致するようにテンプレートを調整します。パッチが適用されたテンプレートに含まれる以前に有効だった差異は報告されません。プラグインは、パッチが適用されたファイルを出力で強調表示します。

手順

  1. 次のコマンドを実行して、テンプレートのパッチを生成します。

    $ oc cluster-compare -r <path_to_reference_config>/metadata.yaml -o 'generate-patches' --override-reason "A valid reason for the override" --generate-override-for "<template1_path>" --generate-override-for "<template2_path>" > <path_to_patches_file>
    • -r は、参照設定の metadata.yaml ファイルへのパスを指定します。
    • -o は、出力形式を指定します。パッチ出力を生成するには、generate-patches 値を使用する必要があります。
    • --override-reason は、パッチの理由を説明します。
    • --generate-override-for は、パッチが必要なテンプレートへのパスを指定します。

      注記

      metadata.yaml ファイルを基準とした対象テンプレートのファイルパスを使用する必要があります。たとえば、metadata.yaml ファイルのファイルパスが ./compare/metadata.yaml の場合、テンプレートの相対ファイルパスは optional/my-template.yaml です。

    • <path_to_patches_file> は、パッチのファイル名とパスを指定します。
  2. オプション: 参照設定に適用する前にパッチファイルを確認します。

    patch-config ファイルの例

    - apiVersion: storage.k8s.io/v1
      kind: StorageClass
      name: crc-csi-hostpath-provisioner
      patch: '{"provisioner":"kubevirt.io.hostpath-provisioner"}' 1
      reason: A valid reason for the override
      templatePath: optional/local-storage-operator/StorageClass.yaml 2
      type: mergepatch 3

    1
    プラグインは、CR と一致するようにテンプレート内のフィールドを修正します。
    2
    テンプレートへのパス。
    3
    mergepath オプションは、JSON を対象テンプレートにマージします。指定されていないフィールドは変更されません。
  3. 次のコマンドを実行して、参照設定にパッチを適用します。

    $ oc cluster-compare -r <referenceConfigurationDirectory> -p <path_to_patches_file>
    • -r は、参照設定の metadata.yaml ファイルへのパスを指定します。
    • -p は、パッチファイルへのパスを指定します。

      出力例

      ...
      
      Cluster CR: storage.k8s.io/v1_StorageClass_crc-csi-hostpath-provisioner
      Reference File: optional/local-storage-operator/StorageClass.yaml
      Description: Component description
      Diff Output: None
      Patched with patch
      Patch Reasons:
      - A valid reason for the override
      
      ...
      
      No CRs are unmatched to reference CRs
      Metadata Hash: bb2165004c496b32e0c8509428fb99c653c3cf4fba41196ea6821bd05c3083ab
      Cluster CRs with patches applied: 1

4.5.2.2. パッチファイルの手動作成

予想されるクラスター設定の逸脱を処理するためのパッチファイルを作成できます。

注記

パッチの type フィールドには、次の 3 つの値を指定できます。

  • mergepatch - JSON を対象テンプレートにマージします。指定されていないフィールドは変更されません。
  • rfc6902 - addremovereplacemove、および copy 操作を使用して、対象テンプレート内の JSON をマージします。各操作は特定のパスを対象とします。
  • go-template - Golang テンプレートを定義します。プラグインがクラスターのカスタムリソース (CR) を入力として使用してテンプレートをレンダリングし、対象テンプレートの mergepatch または rfc6902 パッチのいずれかを生成します。

次の例は、3 つの異なる形式すべてを使用した同じパッチを示しています。

手順

  1. ユースケースに合わせてパッチファイルを作成します。例として次の構造を使用します。

    patch-config の例

    - apiVersion: v1 1
      kind: Namespace
      name: openshift-storage
      reason: known deviation
      templatePath: namespace.yaml
      type: mergepatch
      patch: '{"metadata":{"annotations":{"openshift.io/sa.scc.mcs":"s0:c29,c14","openshift.io/sa.scc.supplemental-groups":"1000840000/10000","openshift.io/sa.scc.uid-range":"1000840000/10000","reclaimspace.csiaddons.openshift.io/schedule":"@weekly","workload.openshift.io/allowed":null},"labels":{"kubernetes.io/metadata.name":"openshift-storage","olm.operatorgroup.uid/ffcf3f2d-3e37-4772-97bc-983cdfce128b":"","openshift.io/cluster-monitoring":"false","pod-security.kubernetes.io/audit":"privileged","pod-security.kubernetes.io/audit-version":"v1.24","pod-security.kubernetes.io/warn":"privileged","pod-security.kubernetes.io/warn-version":"v1.24","security.openshift.io/scc.podSecurityLabelSync":"true"}},"spec":{"finalizers":["kubernetes"]}}'
    - name: openshift-storage
      apiVersion: v1
      kind: Namespace
      templatePath: namespace.yaml
      type: rfc6902
      reason: known deviation
      patch: '[
        {"op": "add", "path": "/metadata/annotations/openshift.io~1sa.scc.mcs", "value": "s0:c29,c14"},
        {"op": "add", "path": "/metadata/annotations/openshift.io~1sa.scc.supplemental-groups", "value": "1000840000/10000"},
        {"op": "add", "path": "/metadata/annotations/openshift.io~1sa.scc.uid-range", "value": "1000840000/10000"},
        {"op": "add", "path": "/metadata/annotations/reclaimspace.csiaddons.openshift.io~1schedule", "value": "@weekly"},
        {"op": "remove", "path": "/metadata/annotations/workload.openshift.io~1allowed"},
        {"op": "add", "path": "/metadata/labels/kubernetes.io~1metadata.name", "value": "openshift-storage"},
        {"op": "add", "path": "/metadata/labels/olm.operatorgroup.uid~1ffcf3f2d-3e37-4772-97bc-983cdfce128b", "value": ""},
        {"op": "add", "path": "/metadata/labels/openshift.io~1cluster-monitoring", "value": "false"},
        {"op": "add", "path": "/metadata/labels/pod-security.kubernetes.io~1audit", "value": "privileged"},
        {"op": "add", "path": "/metadata/labels/pod-security.kubernetes.io~1audit-version", "value": "v1.24"},
        {"op": "add", "path": "/metadata/labels/pod-security.kubernetes.io~1warn", "value": "privileged"},
        {"op": "add", "path": "/metadata/labels/pod-security.kubernetes.io~1warn-version", "value": "v1.24"},
        {"op": "add", "path": "/metadata/labels/security.openshift.io~1scc.podSecurityLabelSync", "value": "true"},
        {"op": "add", "path": "/spec", "value": {"finalizers": ["kubernetes"]}}
        ]'
    - apiVersion: v1
      kind: Namespace
      name: openshift-storage
      reason: "known deviation"
      templatePath: namespace.yaml
      type: go-template
      patch: |
        {
            "type": "rfc6902",
            "patch": '[
                {"op": "add", "path": "/metadata/annotations/openshift.io~1sa.scc.mcs", "value": "s0:c29,c14"},
                {"op": "add", "path": "/metadata/annotations/openshift.io~1sa.scc.supplemental-groups", "value": "1000840000/10000"},
                {"op": "add", "path": "/metadata/annotations/openshift.io~1sa.scc.uid-range", "value": "1000840000/10000"},
                {"op": "add", "path": "/metadata/annotations/reclaimspace.csiaddons.openshift.io~1schedule", "value": "@weekly"},
                {"op": "remove", "path": "/metadata/annotations/workload.openshift.io~1allowed"},
                {"op": "add", "path": "/metadata/labels/kubernetes.io~1metadata.name", "value": "openshift-storage"},
                {"op": "add", "path": "/metadata/labels/olm.operatorgroup.uid~1ffcf3f2d-3e37-4772-97bc-983cdfce128b", "value": ""},
                {"op": "add", "path": "/metadata/labels/openshift.io~1cluster-monitoring", "value": "false"},
                {"op": "add", "path": "/metadata/labels/pod-security.kubernetes.io~1audit", "value": "privileged"},
                {"op": "add", "path": "/metadata/labels/pod-security.kubernetes.io~1audit-version", "value": "v1.24"},
                {"op": "add", "path": "/metadata/labels/pod-security.kubernetes.io~1warn", "value": "privileged"},
                {"op": "add", "path": "/metadata/labels/pod-security.kubernetes.io~1warn-version", "value": "v1.24"},
                {"op": "add", "path": "/metadata/labels/security.openshift.io~1scc.podSecurityLabelSync", "value": "true"},
                {"op": "add", "path": "/spec", "value": {"finalizers": {{ .spec.finalizers | toJson }} }}
            ]'
        }

    1
    パッチは kindapiVersionname、および namespace フィールドを使用して、パッチを正しいクラスター CR とマッチします。
  2. 次のコマンドを実行して、参照設定にパッチを適用します。

    $ oc cluster-compare -r <referenceConfigurationDirectory> -p <path_to_patches_file>
    • -r は、参照設定の metadata.yaml ファイルへのパスを指定します。
    • p は、パッチファイルへのパスを指定します。

      出力例

      ...
      
      Cluster CR: storage.k8s.io/v1_StorageClass_crc-csi-hostpath-provisioner
      Reference File: namespace.yaml
      Description: Component description
      Diff Output: None
      Patched with patch
      Patch Reasons:
      - known deviation
      - known deviation
      - known deviation
      
      ...
      
      No CRs are unmatched to reference CRs
      Metadata Hash: bb2165004c496b32e0c8509428fb99c653c3cf4fba41196ea6821bd05c3083ab
      Cluster CRs with patches applied: 1

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.