6.5. 고급 참조 구성 사용자 정의 수행


참조 설계에서 임시 편차를 허용하려는 시나리오의 경우 고급 사용자 지정을 적용할 수 있습니다.

주의

이러한 사용자 정의에서는 비교 중에 cluster-compare 플러그인이 사용하는 기본 일치 프로세스를 재정의합니다. 이러한 고급 사용자 정의를 적용할 때는 클러스터 비교에서 결과 정보가 제외되는 등 의도하지 않은 결과가 발생할 수 있으므로 주의해야 합니다.

참조 구성을 동적으로 사용자 지정하는 일부 고급 작업에는 다음이 포함됩니다.

  • 수동 일치: 클러스터의 사용자 지정 리소스가 참조 구성의 템플릿으로 수동으로 일치하도록 사용자 구성 파일을 구성합니다.
  • reference : cluster-compare 명령과 함께 patch 옵션을 사용하여 참조 구성을 구성하기 위한 참조 패치 를 패치합니다.

6.5.1. CR과 템플릿 간의 수동 일치 구성

경우에 따라 cluster-compare 플러그인의 기본 일치가 예상대로 작동하지 않을 수 있습니다. 사용자 구성 파일을 사용하여 CR(사용자 정의 리소스)이 템플릿에 매핑하는 방법을 수동으로 정의할 수 있습니다.

기본적으로 플러그인은 apiversion,kind,name, namespace 필드를 기반으로 CR을 템플릿에 매핑합니다. 그러나 여러 템플릿이 단일 CR과 일치할 수 있습니다. 예를 들어 다음과 같은 시나리오에서 이러한 문제가 발생할 수 있습니다.

  • 동일한 apiversion,kind,namenamespace 필드가 있는 여러 템플릿이 있습니다.
  • 템플릿은 네임스페이스 또는 이름에 관계없이 특정 apiversionkind 와 모든 CR과 일치합니다.

CR이 여러 템플릿과 일치하면 플러그인은 가장 작은 차이로 템플릿을 선택하는 묶는 메커니즘을 사용합니다. 플러그인이 선택한 템플릿을 명시적으로 제어하려면 수동 일치 규칙을 정의하는 사용자 구성 YAML 파일을 생성할 수 있습니다. 이 구성 파일을 cluster-compare 명령에 전달하여 필요한 템플릿 선택을 적용할 수 있습니다.

프로세스

  1. 사용자 구성 파일을 생성하여 수동 일치 기준을 정의합니다.

    user-config.yaml 파일 예

    correlationSettings: 
    1
    
       manualCorrelation: 
    2
    
          correlationPairs: 
    3
    
            ptp.openshift.io/v1_PtpConfig_openshift-ptp_grandmaster: optional/ptp-config/PtpOperatorConfig.yaml 
    4
    
            ptp.openshift.io/v1_PtpOperatorConfig_openshift-ptp_default: optional/ptp-config/PtpOperatorConfig.yaml
    Copy to Clipboard Toggle word wrap

    1
    correlationSettings 섹션에는 수동 상관 관계가 있습니다.
    2
    manualCorrelation 섹션에서는 수동 상관 관계가 활성화되도록 지정합니다.
    3
    correlationPairs 섹션에는 수동으로 일치시킬 CR 및 템플릿 쌍이 나열됩니다.
    4
    일치시킬 CR 및 템플릿 쌍을 지정합니다. CR 사양은 < apiversion>_<kind>_<namespace>_<name > 형식을 사용합니다. 네임스페이스가 없는 클러스터 범위 CR의 경우 < apiversion>_<kind>_<name> 형식을 사용합니다. 템플릿 경로는 metadata.yaml 파일을 기준으로 해야 합니다.
  2. 다음 명령을 실행하여 cluster-compare 명령에서 사용자 구성 파일을 참조하세요.

    $ oc cluster-compare -r <path_to_reference_config>/metadata.yaml -c <path_to_user_config>/user-config.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    -c 옵션을 사용하여 user-config.yaml 파일을 지정합니다.

6.5.2. 참조 구성 패치

특정 시나리오에서는 클러스터 구성에서 예상되는 편차를 처리하기 위해 참조 구성을 패치해야 할 수도 있습니다. 플러그인은 비교 프로세스 중에 패치를 적용하여 패치 파일에 정의된 대로 지정된 리소스 필드를 수정합니다.

예를 들어, 클러스터가 최신 참조 구성과 맞지 않는 더 이상 사용되지 않는 필드를 사용하기 때문에 템플릿에 임시 패치를 적용해야 할 수 있습니다. 패치된 파일은 비교 출력 요약에 보고됩니다.

패치 파일은 두 가지 방법으로 만들 수 있습니다.

  • cluster-compare 플러그인을 사용하여 패치 YAML 파일을 생성합니다.
  • 나만의 패치 파일을 만드세요.

6.5.2.1. 클러스터 비교 플러그인을 사용하여 패치 생성

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>
    Copy to Clipboard Toggle word wrap
    • -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. 선택 사항: 참조 구성에 적용하기 전에 패치 파일을 검토하세요.

    패치 구성 파일 예시

    - 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
    Copy to Clipboard Toggle word wrap

    1
    플러그인은 CR과 일치하도록 템플릿의 필드를 패치합니다.
    2
    템플릿의 경로입니다.
    3
    mergepath 옵션은 JSON을 대상 템플릿에 병합합니다. 지정되지 않은 필드는 변경되지 않습니다.
  3. 다음 명령을 실행하여 참조 구성에 패치를 적용합니다.

    $ oc cluster-compare -r <referenceConfigurationDirectory> -p <path_to_patches_file>
    Copy to Clipboard Toggle word wrap
    • -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
      Copy to Clipboard Toggle word wrap

6.5.2.2. 패치 파일을 수동으로 생성

클러스터 구성에서 예상되는 편차를 처리하기 위해 패치 파일을 작성할 수 있습니다.

참고

패치에는 유형 필드에 대해 세 가지 가능한 값이 있습니다.

  • mergepatch - JSON을 대상 템플릿에 병합합니다. 지정되지 않은 필드는 변경되지 않습니다.
  • rfc6902 - add , remove , replace , move , copy 작업을 사용하여 대상 템플릿의 JSON을 병합합니다. 각 작업은 특정 경로를 목표로 합니다.
  • go-template - Golang 템플릿을 정의합니다. 플러그인은 클러스터 사용자 정의 리소스(CR)를 입력으로 사용하여 템플릿을 렌더링하고 대상 템플릿에 대한 mergepatch 또는 rfc6902 패치를 생성합니다.

다음 예는 세 가지 다른 형식을 모두 사용하여 동일한 패치를 보여줍니다.

프로세스

  1. 사용 사례에 맞는 패치 파일을 만듭니다. 다음 구조를 예로 들어 보겠습니다.

    패치 구성 예시

    - 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 }} }}
            ]'
        }
    Copy to Clipboard Toggle word wrap

    1
    패치는 kind , apiVersion , namenamespace 필드를 사용하여 패치를 올바른 클러스터 CR과 일치시킵니다.
  2. 다음 명령을 실행하여 참조 구성에 패치를 적용합니다.

    $ oc cluster-compare -r <referenceConfigurationDirectory> -p <path_to_patches_file>
    Copy to Clipboard Toggle word wrap
    • -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
      Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat