11장. PolicyGenerator 또는 PolicyGenTemplate CR에서 허브 템플릿 사용


Topology Aware Lifecycle Manager는 GitOps Zero Touch Provisioning(ZTP)과 함께 사용되는 구성 정책에서 Red Hat Advanced Cluster Management(RHACM) 허브 클러스터 템플릿 기능을 지원합니다.

허브 측 클러스터 템플릿을 사용하면 대상 클러스터에 맞게 동적으로 사용자 정의할 수 있는 구성 정책을 정의할 수 있습니다. 이렇게 하면 구성은 비슷하지만 값이 다른 여러 클러스터에 대해 별도의 정책을 만들 필요성이 줄어듭니다.

중요

정책 템플릿은 정책이 정의된 네임스페이스와 동일한 네임스페이스로 제한됩니다. 즉, 정책이 생성된 동일한 네임스페이스에 허브 템플릿에서 참조되는 객체를 생성해야 함을 의미합니다.

중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 지원되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 문서를 참조하세요.

허브 템플릿을 사용하여 생성된 정책에 그룹 및 사이트 값을 채워 관리되는 클러스터에 적용함으로써 ConfigMap CR을 통해 클러스터 플릿 구성을 관리할 수 있습니다. 사이트 PolicyGenerator 또는 PolicyGentemplate CR에서 허브 템플릿을 사용하면 각 사이트에 대한 정책 CR을 만들 필요가 없습니다.

사용 사례(예: 하드웨어 유형 또는 지역)에 따라 다양한 범주로 플릿의 클러스터를 그룹화할 수 있습니다. 각 클러스터에는 해당 클러스터가 속한 그룹에 해당하는 레이블이 있어야 합니다. 각 그룹의 구성 값을 서로 다른 ConfigMap CR에서 관리하는 경우 허브 템플릿을 사용하여 그룹의 모든 클러스터에 변경 사항을 적용하려면 하나의 그룹 정책 CR만 필요합니다.

다음 예제에서는 3개의 ConfigMap CR과 하나의 PolicyGenerator CR을 사용하여 사이트 구성과 그룹 구성을 하드웨어 유형 및 리전별로 그룹화한 클러스터에 적용하는 방법을 보여줍니다.

참고

ConfigMap CR에는 1MiB 크기 제한이 있습니다(Kubernetes 문서). ConfigMap CR의 효과적인 크기는 마지막으로 적용된 구성 주석에 의해 더욱 제한됩니다. 마지막으로 적용된 구성 제한을 피하려면 템플릿 ConfigMap 에 다음 주석을 추가하세요.

argocd.argoproj.io/sync-options: Replace=true
Copy to Clipboard Toggle word wrap

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 GitOps ZTP ArgoCD 애플리케이션의 소스 저장소로 정의되어야 합니다.

프로세스

  1. 그룹 및 사이트 구성이 포함된 세 개의 ConfigMap CR을 생성합니다.

    1. 하드웨어별 구성을 보관하기 위해 group-hardware-types-configmap 이라는 ConfigMap CR을 만듭니다. 예를 들면 다음과 같습니다.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: group-hardware-types-configmap
        namespace: ztp-group
        annotations:
          argocd.argoproj.io/sync-options: Replace=true 
      1
      
      data:
        # SriovNetworkNodePolicy.yaml
        hardware-type-1-sriov-node-policy-pfNames-1: "[\"ens5f0\"]"
        hardware-type-1-sriov-node-policy-pfNames-2: "[\"ens7f0\"]"
        # PerformanceProfile.yaml
        hardware-type-1-cpu-isolated: "2-31,34-63"
        hardware-type-1-cpu-reserved: "0-1,32-33"
        hardware-type-1-hugepages-default: "1G"
        hardware-type-1-hugepages-size: "1G"
        hardware-type-1-hugepages-count: "32"
      Copy to Clipboard Toggle word wrap
      1
      argocd.argoproj.io/sync-options 주석은 ConfigMap 크기가 1MiB보다 큰 경우에만 필요합니다.
    2. 지역 구성을 보관하기 위해 group-zones-configmap 이라는 ConfigMap CR을 만듭니다. 예를 들면 다음과 같습니다.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: group-zones-configmap
        namespace: ztp-group
      data:
        # ClusterLogForwarder.yaml
        zone-1-cluster-log-fwd-outputs: "[{\"type\":\"kafka\", \"name\":\"kafka-open\", \"url\":\"tcp://10.46.55.190:9092/test\"}]"
        zone-1-cluster-log-fwd-pipelines: "[{\"inputRefs\":[\"audit\", \"infrastructure\"], \"labels\": {\"label1\": \"test1\", \"label2\": \"test2\", \"label3\": \"test3\", \"label4\": \"test4\"}, \"name\": \"all-to-default\", \"outputRefs\": [\"kafka-open\"]}]"
      Copy to Clipboard Toggle word wrap
    3. 사이트별 구성을 보관하기 위해 site-data-configmap 이라는 ConfigMap CR을 만듭니다. 예를 들면 다음과 같습니다.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: site-data-configmap
        namespace: ztp-group
      data:
        # SriovNetwork.yaml
        du-sno-1-zone-1-sriov-network-vlan-1: "140"
        du-sno-1-zone-1-sriov-network-vlan-2: "150"
      Copy to Clipboard Toggle word wrap
    참고

    ConfigMap CR은 그룹 PolicyGenerator CR에서 생성될 정책과 동일한 네임스페이스에 있어야 합니다.

  2. Git에서 ConfigMap CR을 커밋한 다음 Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
  3. 클러스터에 하드웨어 유형 및 지역 레이블을 적용합니다. 다음 명령은 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"}}}'
    Copy to Clipboard Toggle word wrap
  4. 요구 사항에 따라 ConfigMap 개체에서 필요한 데이터를 가져오기 위해 허브 템플릿을 사용하는 그룹 PolicyGenerator 또는 PolicyGentemplate CR을 만듭니다.

    1. 그룹 PolicyGenerator CR을 만듭니다. 이 예제 PolicyGenerator CR은 policyDefaults.placement 필드에 나열된 레이블과 일치하는 클러스터에 대한 로깅, VLAN ID, NIC 및 성능 프로필을 구성합니다.

      ---
      apiVersion: policy.open-cluster-management.io/v1
      kind: PolicyGenerator
      metadata:
          name: group-du-sno-pgt
      placementBindingDefaults:
          name: group-du-sno-pgt-placement-binding
      policyDefaults:
          placement:
              labelSelector:
                  matchExpressions:
                      - key: group-du-sno-zone
                        operator: In
                        values:
                          - zone-1
                      - key: hardware-type
                        operator: In
                        values:
                          - hardware-type-1
          remediationAction: inform
          severity: low
          namespaceSelector:
              exclude:
                  - kube-*
              include:
                  - '*'
          evaluationInterval:
              compliant: 10m
              noncompliant: 10s
      policies:
          - name: group-du-sno-pgt-group-du-sno-cfg-policy
            policyAnnotations:
              ran.openshift.io/ztp-deploy-wave: "10"
            manifests:
              - path: source-crs/ClusterLogForwarder.yaml
                patches:
                  - spec:
                      outputs: '{{hub fromConfigMap "" "group-zones-configmap" (printf "%s-cluster-log-fwd-outputs" (index .ManagedClusterLabels "group-du-sno-zone")) | toLiteral hub}}'
                      pipelines: '{{hub fromConfigMap "" "group-zones-configmap" (printf "%s-cluster-log-fwd-pipelines" (index .ManagedClusterLabels "group-du-sno-zone")) | toLiteral hub}}'
              - path: source-crs/PerformanceProfile-MCP-master.yaml
                patches:
                  - metadata:
                      name: openshift-node-performance-profile
                    spec:
                      additionalKernelArgs:
                          - rcupdate.rcu_normal_after_boot=0
                          - vfio_pci.enable_sriov=1
                          - vfio_pci.disable_idle_d3=1
                          - efi=runtime
                      cpu:
                          isolated: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-cpu-isolated" (index .ManagedClusterLabels "hardware-type")) hub}}'
                          reserved: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-cpu-reserved" (index .ManagedClusterLabels "hardware-type")) hub}}'
                      hugepages:
                          defaultHugepagesSize: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-default" (index .ManagedClusterLabels "hardware-type")) hub}}'
                          pages:
                              - count: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-count" (index .ManagedClusterLabels "hardware-type")) | toInt hub}}'
                                size: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-size" (index .ManagedClusterLabels "hardware-type")) hub}}'
                      realTimeKernel:
                          enabled: true
          - name: group-du-sno-pgt-group-du-sno-sriov-policy
            policyAnnotations:
              ran.openshift.io/ztp-deploy-wave: "100"
            manifests:
              - path: source-crs/SriovNetwork.yaml
                patches:
                  - metadata:
                      name: sriov-nw-du-fh
                    spec:
                      resourceName: du_fh
                      vlan: '{{hub fromConfigMap "" "site-data-configmap" (printf "%s-sriov-network-vlan-1" .ManagedClusterName) | toInt hub}}'
              - path: source-crs/SriovNetworkNodePolicy-MCP-master.yaml
                patches:
                  - metadata:
                      name: sriov-nnp-du-fh
                    spec:
                      deviceType: netdevice
                      isRdma: false
                      nicSelector:
                          pfNames: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-sriov-node-policy-pfNames-1" (index .ManagedClusterLabels "hardware-type")) | toLiteral hub}}'
                      numVfs: 8
                      priority: 10
                      resourceName: du_fh
              - path: source-crs/SriovNetwork.yaml
                patches:
                  - metadata:
                      name: sriov-nw-du-mh
                    spec:
                      resourceName: du_mh
                      vlan: '{{hub fromConfigMap "" "site-data-configmap" (printf "%s-sriov-network-vlan-2" .ManagedClusterName) | toInt hub}}'
              - path: source-crs/SriovNetworkNodePolicy-MCP-master.yaml
                patches:
                  - metadata:
                      name: sriov-nw-du-fh
                    spec:
                      deviceType: netdevice
                      isRdma: false
                      nicSelector:
                          pfNames: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-sriov-node-policy-pfNames-2" (index .ManagedClusterLabels "hardware-type")) | toLiteral hub}}'
                      numVfs: 8
                      priority: 10
                      resourceName: du_fh
      Copy to Clipboard Toggle word wrap
    2. PolicyGenTemplate CR 그룹을 만듭니다. 이 예제 PolicyGenTemplate CR은 spec.bindingRules 에 나열된 레이블과 일치하는 클러스터에 대한 로깅, VLAN ID, NIC 및 성능 프로필을 구성합니다.

      apiVersion: ran.openshift.io/v1
      kind: PolicyGenTemplate
      metadata:
        name: group-du-sno-pgt
        namespace: ztp-group
      spec:
        bindingRules:
          # These policies will correspond to all clusters with these labels
          group-du-sno-zone: "zone-1"
          hardware-type: "hardware-type-1"
        mcp: "master"
        sourceFiles:
          - fileName: ClusterLogForwarder.yaml # wave 10
            policyName: "group-du-sno-cfg-policy"
            spec:
              outputs: '{{hub fromConfigMap "" "group-zones-configmap" (printf "%s-cluster-log-fwd-outputs" (index .ManagedClusterLabels "group-du-sno-zone")) | toLiteral hub}}'
              pipelines: '{{hub fromConfigMap "" "group-zones-configmap" (printf "%s-cluster-log-fwd-pipelines" (index .ManagedClusterLabels "group-du-sno-zone")) | toLiteral hub}}'
      
          - fileName: PerformanceProfile.yaml # wave 10
            policyName: "group-du-sno-cfg-policy"
            metadata:
              name: openshift-node-performance-profile
            spec:
              additionalKernelArgs:
              - rcupdate.rcu_normal_after_boot=0
              - vfio_pci.enable_sriov=1
              - vfio_pci.disable_idle_d3=1
              - efi=runtime
              cpu:
                isolated: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-cpu-isolated" (index .ManagedClusterLabels "hardware-type")) hub}}'
                reserved: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-cpu-reserved" (index .ManagedClusterLabels "hardware-type")) hub}}'
              hugepages:
                defaultHugepagesSize: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-default" (index .ManagedClusterLabels "hardware-type")) hub}}'
                pages:
                  - size: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-size" (index .ManagedClusterLabels "hardware-type")) hub}}'
                    count: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-count" (index .ManagedClusterLabels "hardware-type")) | toInt hub}}'
              realTimeKernel:
                enabled: true
      
          - fileName: SriovNetwork.yaml # wave 100
            policyName: "group-du-sno-sriov-policy"
            metadata:
              name: sriov-nw-du-fh
            spec:
              resourceName: du_fh
              vlan: '{{hub fromConfigMap "" "site-data-configmap" (printf "%s-sriov-network-vlan-1" .ManagedClusterName) | toInt hub}}'
      
          - fileName: SriovNetworkNodePolicy.yaml # wave 100
            policyName: "group-du-sno-sriov-policy"
            metadata:
              name: sriov-nnp-du-fh
            spec:
              deviceType: netdevice
              isRdma: false
              nicSelector:
                pfNames: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-sriov-node-policy-pfNames-1" (index .ManagedClusterLabels "hardware-type")) | toLiteral hub}}'
              numVfs: 8
              priority: 10
              resourceName: du_fh
      
          - fileName: SriovNetwork.yaml # wave 100
            policyName: "group-du-sno-sriov-policy"
            metadata:
              name: sriov-nw-du-mh
            spec:
              resourceName: du_mh
              vlan: '{{hub fromConfigMap "" "site-data-configmap" (printf "%s-sriov-network-vlan-2" .ManagedClusterName) | toInt hub}}'
      
          - fileName: SriovNetworkNodePolicy.yaml # wave 100
            policyName: "group-du-sno-sriov-policy"
            metadata:
              name: sriov-nw-du-fh
            spec:
              deviceType: netdevice
              isRdma: false
              nicSelector:
                pfNames: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-sriov-node-policy-pfNames-2" (index .ManagedClusterLabels "hardware-type")) | toLiteral hub}}'
              numVfs: 8
              priority: 10
              resourceName: du_fh
      Copy to Clipboard Toggle word wrap
    참고

    사이트별 구성 값을 검색하려면 .ManagedClusterName 필드를 사용합니다. 이는 대상 관리 클러스터의 이름으로 설정된 템플릿 컨텍스트 값입니다.

    그룹별 구성을 검색하려면 .ManagedClusterLabels 필드를 사용합니다. 이는 관리되는 클러스터의 레이블 값으로 설정된 템플릿 컨텍스트 값입니다.

  5. Git에서 PolicyGenerator 또는 PolicyGentemplate CR 사이트를 커밋하고 ArgoCD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

    참고

    참조된 ConfigMap CR에 대한 후속 변경 사항은 적용된 정책에 자동으로 동기화되지 않습니다. 기존 PolicyGenerator CR을 업데이트하려면 새로운 ConfigMap 변경 사항을 수동으로 동기화해야 합니다. "기존 PolicyGenerator 또는 PolicyGenTemplate CR에 새로운 ConfigMap 변경 사항 동기화"를 참조하세요.

    여러 클러스터에 동일한 PolicyGenerator 또는 PolicyGentemplate CR을 사용할 수 있습니다. 구성이 변경된 경우 각 클러스터의 구성과 관리되는 클러스터의 레이블을 보관하는 ConfigMap 객체에만 수정 작업을 하면 됩니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat