9.2. PolicyGenerator 리소스를 사용한 고급 관리형 클러스터 구성


PolicyGenerator CR을 사용하면 관리되는 클러스터에 사용자 정의 기능을 배포할 수 있습니다. RHACM 및 PolicyGenerator CR을 사용하는 것은 정책을 관리하고 관리형 클러스터에 배포하는 데 권장되는 방법입니다. 이는 이 목적을 위해 PolicyGenTemplate CR을 사용하는 것을 대체합니다. PolicyGenerator 리소스에 대한 자세한 내용은 RHACM Policy Generator 설명서를 참조하세요.

9.2.1. 클러스터에 추가 변경 사항 배포

기본 GitOps Zero Touch Provisioning(ZTP) 파이프라인 구성 외부에서 클러스터 구성을 변경해야 하는 경우 다음 세 가지 옵션이 있습니다.

GitOps ZTP 파이프라인이 완료된 후 추가 구성을 적용합니다.
GitOps ZTP 파이프라인 배포가 완료되면 배포된 클러스터가 애플리케이션 워크로드에 대해 준비됩니다. 이 시점에서 추가 운영자를 설치하고 요구 사항에 맞는 구성을 적용할 수 있습니다. 추가 구성이 플랫폼 성능이나 할당된 CPU 예산에 부정적인 영향을 미치지 않는지 확인하세요.
GitOps ZTP 라이브러리에 콘텐츠 추가
GitOps ZTP 파이프라인을 사용하여 배포하는 기본 소스 사용자 정의 리소스(CR)는 필요에 따라 사용자 정의 콘텐츠로 확장될 수 있습니다.
클러스터 설치를 위한 추가 매니페스트를 만듭니다.
설치 중에 추가 매니페스트가 적용되어 설치 프로세스의 효율성이 높아집니다.
중요

추가 소스 CR을 제공하거나 기존 소스 CR을 수정하면 OpenShift Container Platform의 성능이나 CPU 프로필에 상당한 영향을 미칠 수 있습니다.

9.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의 소스 저장소로 정의되어야 합니다.

프로세스

  1. 기존 콘텐츠의 기본 소스 CR을 검토합니다. GitOps Zero Touch Provisioning(ZTP) 컨테이너에서 추출하여 참조 PolicyGenerator CR에 나열된 소스 CR을 검토할 수 있습니다.

    1. /out 폴더를 만듭니다.

      $ mkdir -p ./out
      Copy to Clipboard Toggle word wrap
    2. 소스 CR을 추출합니다.

      $ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19.1 extract /home/ztp --tar | tar x -C ./out
      Copy to Clipboard Toggle word wrap
  2. ./out/source-crs/PerformanceProfile.yaml 에서 기준 PerformanceProfile CR을 검토합니다.

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

    PolicyGenerator CR에서 $…​를 포함하는 소스 CR의 모든 필드가 제공되지 않으면 생성된 CR에서 제거됩니다.

  3. acm-group-du-sno-ranGen.yaml 참조 파일에서 PerformanceProfile 에 대한 PolicyGenerator 항목을 업데이트합니다. 다음 예제 PolicyGenerator CR 연은 적절한 CPU 사양을 제공하고, hugepages 구성을 설정하고, globalDisableIrqLoadBalancing을 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: false
    Copy to Clipboard Toggle word wrap
  4. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

    출력 예

    GitOps ZTP 애플리케이션은 생성된 PerformanceProfile CR을 포함하는 RHACM 정책을 생성합니다. 해당 CR의 내용은 PolicyGeneratorPerformanceProfile 항목에 있는 메타데이터사양 내용을 소스 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
    Copy to Clipboard Toggle word wrap
참고

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

policyGen 도구는 출력 CR에서 $mcp 인스턴스를 worker 로 바꿉니다.

9.2.3. GitOps ZTP 파이프라인에 사용자 정의 콘텐츠 추가

GitOps ZTP 파이프라인에 새로운 콘텐츠를 추가하려면 다음 절차를 수행하세요.

프로세스

  1. PolicyGenerator 사용자 정의 리소스(CR)에 대한 kustomization.yaml 파일이 포함된 디렉토리에 source-crs 라는 하위 디렉토리를 만듭니다.
  2. 다음 예와 같이 사용자가 제공한 CR을 source-crs 하위 디렉토리에 추가합니다.

    example
    └── acmpolicygenerator
        ├── dev.yaml
        ├── kustomization.yaml
        ├── mec-edge-sno1.yaml
        ├── sno.yaml
        └── source-crs 
    1
    
            ├── PaoCatalogSource.yaml
            ├── PaoSubscription.yaml
            ├── custom-crs
            |   ├── apiserver-config.yaml
            |   └── disable-nic-lldp.yaml
            └── elasticsearch
                ├── ElasticsearchNS.yaml
                └── ElasticsearchOperatorGroup.yaml
    Copy to Clipboard Toggle word wrap
    1
    source-crs 하위 디렉토리는 kustomization.yaml 파일과 같은 디렉토리에 있어야 합니다.
  3. source-crs/custom-crssource-crs/elasticsearch 디렉토리에 추가한 콘텐츠에 대한 참조를 포함하도록 필수 PolicyGenerator CR을 업데이트합니다. 예를 들면 다음과 같습니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
        name: group-dev
    placementBindingDefaults:
        name: group-dev-placement-binding
    policyDefaults:
        namespace: ztp-clusters
        placement:
            labelSelector:
                matchExpressions:
                    - key: dev
                      operator: In
                      values:
                        - "true"
        remediationAction: inform
        severity: low
        namespaceSelector:
            exclude:
                - kube-*
            include:
                - '*'
        evaluationInterval:
            compliant: 10m
            noncompliant: 10s
    policies:
        - name: group-dev-group-dev-cluster-log-ns
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/ClusterLogNS.yaml
        - name: group-dev-group-dev-cluster-log-operator-group
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/ClusterLogOperGroup.yaml
        - name: group-dev-group-dev-cluster-log-sub
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/ClusterLogSubscription.yaml
        - name: group-dev-group-dev-lso-ns
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/StorageNS.yaml
        - name: group-dev-group-dev-lso-operator-group
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/StorageOperGroup.yaml
        - name: group-dev-group-dev-lso-sub
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/StorageSubscription.yaml
        - name: group-dev-group-dev-pao-cat-source
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "1"
          manifests:
            - path: source-crs/PaoSubscriptionCatalogSource.yaml
              patches:
                - spec:
                    image: <container_image_url>
        - name: group-dev-group-dev-pao-ns
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/PaoSubscriptionNS.yaml
        - name: group-dev-group-dev-pao-sub
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/PaoSubscription.yaml
        - name: group-dev-group-dev-elasticsearch-ns
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: elasticsearch/ElasticsearchNS.yaml 
    1
    
        - name: group-dev-group-dev-elasticsearch-operator-group
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: elasticsearch/ElasticsearchOperatorGroup.yaml
        - name: group-dev-group-dev-apiserver-config
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: custom-crs/apiserver-config.yaml 
    2
    
        - name: group-dev-group-dev-disable-nic-lldp
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: custom-crs/disable-nic-lldp.yaml
    Copy to Clipboard Toggle word wrap
    1 2
    /source-crs 상위 디렉터리의 파일에 대한 상대 경로를 포함하도록 policies.manifests.path를 설정합니다.
  4. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 정책 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
  5. ClusterGroupUpgrade CR을 업데이트하여 변경된 PolicyGenerator를 포함하고 cgu-test.yaml 로 저장합니다. 다음 예에서는 생성된 cgu-test.yaml 파일을 보여줍니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: custom-source-cr
      namespace: ztp-clusters
    spec:
      managedPolicies:
        - group-dev-config-policy
      enable: true
      clusters:
      - cluster1
      remediationStrategy:
        maxConcurrency: 2
        timeout: 240
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 실행하여 업데이트된 ClusterGroupUpgrade CR을 적용합니다.

    $ oc apply -f cgu-test.yaml
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 업데이트가 성공했는지 확인하세요.

    $ oc get cgu -A
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE     NAME               AGE   STATE        DETAILS
    ztp-clusters  custom-source-cr   6s    InProgress   Remediating non-compliant policies
    ztp-install   cluster1           19h   Completed    All clusters are compliant with all the managed policies
    Copy to Clipboard Toggle word wrap

9.2.4. PolicyGenerator CR에 대한 정책 준수 평가 시간 초과 구성

허브 클러스터에 설치된 Red Hat Advanced Cluster Management(RHACM)를 사용하면 관리되는 클러스터가 적용된 정책을 준수하는지 모니터링하고 보고할 수 있습니다. RHACM은 정책 템플릿을 사용하여 미리 정의된 정책 컨트롤러와 정책을 적용합니다. 정책 컨트롤러는 Kubernetes 사용자 정의 리소스 정의(CRD) 인스턴스입니다.

PolicyGenerator 사용자 정의 리소스(CR)를 사용하여 기본 정책 평가 간격을 재정의할 수 있습니다. RHACM이 적용된 클러스터 정책을 다시 평가하기 전에 ConfigurationPolicy CR이 정책을 준수하거나 준수하지 않는 상태를 유지할 수 있는 기간을 정의하는 기간 설정을 구성합니다.

GitOps Zero Touch Provisioning(ZTP) 정책 생성기는 사전 정의된 정책 평가 간격으로 ConfigurationPolicy CR 정책을 생성합니다. 비준수 상태의 기본값은 10초입니다. 규정 준수 상태의 기본값은 10분입니다. 평가 간격을 비활성화하려면 값을 never 로 설정합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다.

프로세스

  1. PolicyGenerator CR의 모든 정책에 대한 평가 간격을 구성하려면 evaluationInterval 필드에 적절한 준수비준수 값을 설정합니다. 예를 들면 다음과 같습니다.

    policyDefaults:
      evaluationInterval:
        compliant: 30m
        noncompliant: 45s
    Copy to Clipboard Toggle word wrap
    참고

    특정 준수 상태에 도달한 후에도 정책 평가를 중단하지 않으려면 준수비준수 필드를 ' 절대 안 함'으로 설정할 수도 있습니다.

  2. PolicyGenerator CR에서 개별 정책 개체에 대한 평가 간격을 구성하려면 evaluationInterval 필드를 추가하고 적절한 값을 설정합니다. 예를 들면 다음과 같습니다.

    policies:
      - name: "sriov-sub-policy"
        manifests:
          - path: "SriovSubscription.yaml"
            evaluationInterval:
              compliant: never
              noncompliant: 10s
    Copy to Clipboard Toggle word wrap
  3. PolicyGenerator CR 파일을 Git 저장소에 커밋하고 변경 사항을 푸시합니다.

검증

관리되는 스포크 클러스터 정책이 예상 간격으로 모니터링되는지 확인하세요.

  1. 관리되는 클러스터에 클러스터 관리자 권한이 있는 사용자로 로그인합니다.
  2. open-cluster-management-agent-addon 네임스페이스에서 실행 중인 포드를 가져옵니다. 다음 명령을 실행합니다.

    $ oc get pods -n open-cluster-management-agent-addon
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                         READY   STATUS    RESTARTS        AGE
    config-policy-controller-858b894c68-v4xdb    1/1     Running   22 (5d8h ago)   10d
    Copy to Clipboard Toggle word wrap

  3. config-policy-controller pod의 로그에서 예상 간격으로 적용된 정책이 평가되는지 확인하세요.

    $ oc logs -n open-cluster-management-agent-addon config-policy-controller-858b894c68-v4xdb
    Copy to Clipboard Toggle word wrap

    출력 예

    2022-05-10T15:10:25.280Z       info   configuration-policy-controller controllers/configurationpolicy_controller.go:166      Skipping the policy evaluation due to the policy not reaching the evaluation interval  {"policy": "compute-1-config-policy-config"}
    2022-05-10T15:10:25.280Z       info   configuration-policy-controller controllers/configurationpolicy_controller.go:166      Skipping the policy evaluation due to the policy not reaching the evaluation interval  {"policy": "compute-1-common-compute-1-catalog-policy-config"}
    Copy to Clipboard Toggle word wrap

배포된 클러스터의 GitOps Zero Touch Provisioning(ZTP) 설치 및 구성이 완료되면 신호를 보내는 검증자 알림 정책을 만듭니다. 이 정책은 단일 노드 OpenShift 클러스터, 3-노드 클러스터 및 표준 클러스터의 배포에 사용할 수 있습니다.

프로세스

  1. 소스 파일 validatorCRs/informDuValidator.yaml을 포함하는 독립 실행형 PolicyGenerator 사용자 정의 리소스(CR)를 만듭니다. 각 클러스터 유형마다 독립형 PolicyGenerator CR이 하나만 필요합니다. 예를 들어, 이 CR은 단일 노드 OpenShift 클러스터에 대한 검증자 정보 정책을 적용합니다.

    단일 노드 클러스터 검증기 정보 정책 CR(acm-group-du-sno-validator-ranGen.yaml) 예시

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
        name: group-du-sno-validator-latest
    placementBindingDefaults:
        name: group-du-sno-validator-latest-placement-binding
    policyDefaults:
        namespace: ztp-group
        placement:
            labelSelector:
                matchExpressions:
                    - key: du-profile
                      operator: In
                      values:
                        - latest
                    - key: group-du-sno
                      operator: Exists
                    - key: ztp-done
                      operator: DoesNotExist
        remediationAction: inform
        severity: low
        namespaceSelector:
            exclude:
                - kube-*
            include:
                - '*'
        evaluationInterval:
            compliant: 10m
            noncompliant: 10s
    policies:
        - name: group-du-sno-validator-latest-du-policy
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "10000"
          evaluationInterval:
            compliant: 5s
          manifests:
            - path: source-crs/validatorCRs/informDuValidator-MCP-master.yaml
    Copy to Clipboard Toggle word wrap

  2. Git 저장소에 PolicyGenerator CR 파일을 커밋하고 변경 사항을 푸시합니다.

9.2.6. PolicyGenerator CR을 사용하여 전원 상태 구성

낮은 지연 시간과 고성능 에지 배포를 위해서는 C-상태와 P-상태를 비활성화하거나 제한해야 합니다. 이 구성을 사용하면 CPU는 일정한 주파수, 일반적으로 최대 터보 주파수로 실행됩니다. 이를 통해 CPU가 항상 최대 속도로 실행되므로 성능이 높고 지연 시간이 짧아집니다. 이로 인해 워크로드에 대한 최적의 대기 시간이 발생합니다. 하지만 이로 인해 전력 소모가 가장 높아지는데, 이는 모든 작업 부하에 필요하지 않을 수도 있습니다.

워크로드는 중요 워크로드와 비중요 워크로드로 분류할 수 있습니다. 중요 워크로드는 높은 성능과 낮은 지연 시간을 위해 비활성화된 C-상태 및 P-상태 설정이 필요하고, 비중요 워크로드는 일부 지연 시간과 성능을 희생하여 전력을 절약하기 위해 C-상태 및 P-상태 설정을 사용합니다. GitOps Zero Touch Provisioning(ZTP)을 사용하여 다음 세 가지 전원 상태를 구성할 수 있습니다.

  • 고성능 모드는 가장 높은 전력 소비에서도 매우 낮은 지연 시간을 제공합니다.
  • 성능 모드는 상대적으로 높은 전력 소비로 낮은 지연 시간을 제공합니다.
  • 전력 절감은 대기 시간이 증가하여 전력 소비를 줄일 수 있습니다.

기본 구성은 낮은 지연 시간과 성능 모드입니다.

PolicyGenerator 사용자 정의 리소스(CR)를 사용하면 ztp-site-generate 컨테이너의 GitOps 플러그인과 함께 제공되는 기본 소스 CR에 추가 구성 세부 정보를 오버레이할 수 있습니다.

acm-group-du-sno-ranGen.yamlPolicyGenerator CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 전원 상태를 구성합니다.

다음은 세 가지 전원 상태를 구성하는 데 적용되는 일반적인 전제 조건입니다.

사전 요구 사항

  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD의 소스 저장소로 정의되어야 합니다.
  • " GitOps ZTP 사이트 구성 리포지토리 준비"에 설명된 절차를 수행했습니다.

9.2.6.1. PolicyGenerator CR을 사용하여 성능 모드 구성

acm-group-du-sno-ranGen.yamlPolicyGenerator CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 성능 모드를 설정하는 이 예제를 따르세요.

성능 모드는 상대적으로 높은 전력 소비로 낮은 지연 시간을 제공합니다.

사전 요구 사항

  • "낮은 지연 시간과 높은 성능을 위한 호스트 펌웨어 구성"의 지침에 따라 성능 관련 설정으로 BIOS를 구성했습니다.

프로세스

  1. out/argocd/example/acmpolicygenerator// 에 있는 acm-group-du-sno-ranGen.yaml 참조 파일의 PerformanceProfile 에 대한 PolicyGenerator 항목을 다음과 같이 업데이트하여 성능 모드를 설정합니다.

    - path: source-crs/PerformanceProfile.yaml
      patches:
        - spec:
            workloadHints:
                 realTime: true
                 highPowerConsumption: false
                 perPodPowerManagement: false
    Copy to Clipboard Toggle word wrap
  2. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

9.2.6.2. PolicyGenerator CR을 사용하여 고성능 모드 구성

acm-group-du-sno-ranGen.yamlPolicyGenerator CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 고성능 모드를 설정하는 이 예제를 따르세요.

고성능 모드는 가장 높은 전력 소비에서도 매우 낮은 지연 시간을 제공합니다.

사전 요구 사항

  • "낮은 지연 시간과 높은 성능을 위한 호스트 펌웨어 구성"의 지침에 따라 성능 관련 설정으로 BIOS를 구성했습니다.

프로세스

  1. out/argocd/example/acmpolicygenerator/ 에 있는 acm-group-du-sno-ranGen.yaml 참조 파일의 PerformanceProfile 에 대한 PolicyGenerator 항목을 다음과 같이 업데이트하여 고성능 모드를 설정합니다.

    - path: source-crs/PerformanceProfile.yaml
      patches:
        - spec:
            workloadHints:
                 realTime: true
                 highPowerConsumption: true
                 perPodPowerManagement: false
    Copy to Clipboard Toggle word wrap
  2. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

9.2.6.3. PolicyGenerator CR을 사용하여 절전 모드 구성

acm-group-du-sno-ranGen.yamlPolicyGenerator CR을 기반으로 참조 구성에 대해 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 절전 모드를 설정하는 이 예제를 따르세요.

절전 모드는 전력 소비를 줄이는 것과 지연 시간을 늘리는 것의 균형을 맞춥니다.

사전 요구 사항

  • BIOS에서 C-상태와 OS 제어 P-상태를 활성화했습니다.

프로세스

  1. out/argocd/example/acmpolicygenerator/ 에 있는 acm-group-du-sno-ranGen.yaml 참조 파일의 PerformanceProfile 에 대한 PolicyGenerator 항목을 다음과 같이 업데이트하여 전원 절약 모드를 구성합니다. 추가 커널 인수 객체를 통해 CPU 관리자를 절전 모드로 구성하는 것이 좋습니다.

    - path: source-crs/PerformanceProfile.yaml
      patches:
        - spec:
            # ...
            workloadHints:
              realTime: true
              highPowerConsumption: false
              perPodPowerManagement: true
            # ...
            additionalKernelArgs:
              - # ...
              - "cpufreq.default_governor=schedutil" 
    1
    Copy to Clipboard Toggle word wrap
    1
    schedutil 관리자를 사용하는 것이 좋지만 ondemandpowersave 등 다른 관리자를 사용할 수도 있습니다.
  2. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

검증

  1. 다음 명령을 사용하여 식별된 노드 목록에서 배포된 클러스터의 작업자 노드를 선택합니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 사용하여 노드에 로그인합니다.

    $ oc debug node/<node-name>
    Copy to Clipboard Toggle word wrap

    <노드 이름>을 전원 상태를 확인하려는 노드의 이름으로 바꾸세요.

  3. 디버그 쉘 내에서 /host를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. 루트 디렉토리를 /host 로 변경하면 다음 예와 같이 호스트의 실행 파일 경로에 포함된 바이너리를 실행할 수 있습니다.

    # chroot /host
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 적용된 전원 상태를 확인하세요.

    # cat /proc/cmdline
    Copy to Clipboard Toggle word wrap

예상 출력

  • 절전 모드의 경우 intel_pstate=passive 입니다 .

9.2.6.4. 전원 비용 절감 극대화

최대 CPU 빈도를 제한하면 최대 전력 절감이 권장됩니다. 최대 CPU 빈도를 제한하지 않고 중요하지 않은 워크로드 CPU에서 C 상태를 활성화하면 중요한 CPU의 빈도를 높임으로써 전력 절감이 거의 발생하지 않습니다.

sysfs 플러그인 필드를 업데이트하여 전력 절감을 극대화하고 참조 구성에 대한 TunedPerformancePatch CR의 max_perf_pct 에 대한 적절한 값을 설정합니다. acm-group-du-sno-ranGen.yaml 을 기반으로 하는 이 예제에서는 최대 CPU 빈도를 제한하는 절차를 설명합니다.

사전 요구 사항

  • " PolicyGenerator CR 사용으로 전원 절약 모드"에 설명된 대로 전원 절약 모드를 구성했습니다.

프로세스

  1. out/argocd/example/acmpolicygenerator/ 에서 acm-group-du-sno-ranGen.yaml 참조 파일에서 TunedPerformancePatch 에 대한 PolicyGenerator 항목을 업데이트합니다. 전원 절감을 극대화하려면 다음 예와 같이 max_perf_pct 를 추가합니다.

    - path: source-crs/TunedPerformancePatch.yaml
      patches:
        - spec:
          profile:
            - name: performance-patch
              data: |
                # ...
                [sysfs]
                /sys/devices/system/cpu/intel_pstate/max_perf_pct=<x> 
    1
    Copy to Clipboard Toggle word wrap
    1
    max_perf_pctcpufreq 드라이버가 지원되는 최대 CPU 빈도의 백분율로 설정할 수 있는 최대 빈도를 제어합니다. 이 값은 모든 CPU에 적용됩니다. /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 에서 지원되는 최대 빈도를 확인할 수 있습니다. 시작점으로 모든 CPU를 모든 코어 frequency로 제한하는 백분율로 사용할 수 있습니다. All Cores Cryostat 빈도는 코어가 완전히 비어 있을 때 모든 코어가 실행되는 빈도입니다.
    참고

    전력 절감을 극대화하려면 더 낮은 가치를 설정하십시오. max_perf_pct 에 대한 더 낮은 값을 설정하면 최대 CPU 빈도가 제한되므로 전력 소비가 줄어들지만 잠재적으로 성능에 영향을 미칠 수 있습니다. 다양한 값을 실험하고 시스템의 성능 및 전력 소비를 모니터링하여 사용 사례에 가장 적합한 설정을 찾습니다.

  2. Git에서 PolicyGenerator 변경 사항을 커밋한 다음 GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.

9.2.7. PolicyGenerator CR을 사용하여 LVM 스토리지 구성

ZTP(ZTP)를 사용하여 배포하는 관리형 클러스터에 대해 LVM(Logical Volume Manager) 스토리지를 구성할 수 있습니다.

참고

HTTP 전송과 함께 PTP 이벤트 또는 베어 메탈 하드웨어 이벤트를 사용할 때 LVM 스토리지를 사용하여 이벤트 서브스크립션을 유지합니다.

분산 단위로 로컬 볼륨을 사용하는 영구 스토리지에 Local Storage Operator를 사용합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성합니다.

프로세스

  1. 새 관리 클러스터에 대해 LVM 스토리지를 구성하려면 acm-common-ranGen.yaml 파일의 policies.manifests 에 다음 YAML을 추가합니다.

    - name: subscription-policies
      policyAnnotations:
        ran.openshift.io/ztp-deploy-wave: "2"
      manifests:
        - path: source-crs/StorageLVMOSubscriptionNS.yaml
        - path: source-crs/StorageLVMOSubscriptionOperGroup.yaml
        - path: source-crs/StorageLVMOSubscription.yaml
          spec:
            name: lvms-operator
            channel: stable-4.19
    Copy to Clipboard Toggle word wrap
    참고

    스토리지 LVMO 서브스크립션은 더 이상 사용되지 않습니다. 향후 OpenShift Container Platform 릴리스에서는 스토리지 LVMO 서브스크립션을 사용할 수 없습니다. 대신 Storage LVMS 서브스크립션을 사용해야 합니다.

    OpenShift Container Platform 4.19에서는 LVMO 서브스크립션 대신 Storage LVMS 서브스크립션을 사용할 수 있습니다. LVMS 서브스크립션에는 acm-common-ranGen.yaml 파일의 수동 덮어쓰기가 필요하지 않습니다. 스토리지 LVMS 서브스크립션을 사용하려면 acm-common-ranGen.yaml 파일의 policies.manifests 에 다음 YAML을 추가합니다.

    - path: source-crs/StorageLVMSubscriptionNS.yaml
    - path: source-crs/StorageLVMSubscriptionOperGroup.yaml
    - path: source-crs/StorageLVMSubscription.yaml
    Copy to Clipboard Toggle word wrap
  2. 특정 그룹 또는 개별 사이트 구성 파일의 policies.manifestsLVMCluster CR을 추가합니다. 예를 들어 acm-group-du-sno-ranGen.yaml 파일에서 다음을 추가합니다.

    - fileName: StorageLVMCluster.yaml
      policyName: "lvms-config"
        metadata:
          name: "lvms-storage-cluster-config"
            spec:
              storage:
                deviceClasses:
                - name: vg1
                  thinPoolConfig:
                    name: thin-pool-1
                    sizePercent: 90
                    overprovisionRatio: 10
    Copy to Clipboard Toggle word wrap

    이 예제 구성은 OpenShift Container Platform이 설치된 디스크를 제외한 모든 사용 가능한 장치를 포함하는 볼륨 그룹( vg1 )을 생성합니다. thin-pool 논리 볼륨도 생성됩니다.

  3. 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
  4. Git에서 PolicyGenerator 변경 사항을 커밋한 다음 사이트 구성 리포지토리로 변경 사항을 내보내 GitOps ZTP를 사용하여 새 사이트에 LVM 스토리지를 배포합니다.

9.2.8. PolicyGenerator CR을 사용하여 PTP 이벤트 구성

GitOps ZTP 파이프라인을 사용하여 HTTP 전송을 사용하는 PTP 이벤트를 구성할 수 있습니다.

9.2.8.1. HTTP 전송을 사용하는 PTP 이벤트 구성

ZTP(ZTP) 파이프라인으로 배포하는 관리형 클러스터에서 HTTP 전송을 사용하는 PTP 이벤트를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.

프로세스

  1. 요구 사항에 따라 acm-group-du-3node-ranGen.yaml,acm-group-du-sno-ranGen.yaml 또는 acm-group-du-standard-ranGen.yaml 파일에 다음 PolicyGenerator 변경 사항을 적용합니다.

    1. policies.manifests 에서 전송 호스트를 구성하는 PtpOperatorConfig CR 파일을 추가합니다.

      - path: source-crs/PtpOperatorConfigForEvent.yaml
        patches:
        - metadata:
            name: default
            namespace: openshift-ptp
            annotations:
              ran.openshift.io/ztp-deploy-wave: "10"
          spec:
            daemonNodeSelector:
              node-role.kubernetes.io/$mcp: ""
            ptpEventConfig:
              enableEventPublisher: true
              transportHost: "http://ptp-event-publisher-service-NODE_NAME.openshift-ptp.svc.cluster.local:9043"
      Copy to Clipboard Toggle word wrap
      참고

      OpenShift Container Platform 4.13 이상에서는 PTP 이벤트와 함께 HTTP 전송을 사용할 때 PtpOperatorConfig 리소스에서 transportHost 필드를 설정할 필요가 없습니다.

    2. PTP 클럭 유형 및 인터페이스에 대해 linuxptpphc2sys 를 구성합니다. 예를 들어 policies.manifests 에 다음 YAML을 추가합니다.

      - path: source-crs/PtpConfigSlave.yaml 
      1
      
        patches:
        - metadata:
            name: "du-ptp-slave"
          spec:
            recommend:
            - match:
              - nodeLabel: node-role.kubernetes.io/master
              priority: 4
              profile: slave
            profile:
            - name: "slave"
              # This interface must match the hardware in this group
              interface: "ens5f0" 
      2
      
              ptp4lOpts: "-2 -s --summary_interval -4" 
      3
      
              phc2sysOpts: "-a -r -n 24" 
      4
      
              ptpSchedulingPolicy: SCHED_FIFO
              ptpSchedulingPriority: 10
              ptpSettings:
                logReduce: "true"
              ptp4lConf: |
                [global]
                #
                # Default Data Set
                #
                twoStepFlag 1
                slaveOnly 1
                priority1 128
                priority2 128
                domainNumber 24
                #utc_offset 37
                clockClass 255
                clockAccuracy 0xFE
                offsetScaledLogVariance 0xFFFF
                free_running 0
                freq_est_interval 1
                dscp_event 0
                dscp_general 0
                dataset_comparison G.8275.x
                G.8275.defaultDS.localPriority 128
                #
                # Port Data Set
                #
                logAnnounceInterval -3
                logSyncInterval -4
                logMinDelayReqInterval -4
                logMinPdelayReqInterval -4
                announceReceiptTimeout 3
                syncReceiptTimeout 0
                delayAsymmetry 0
                fault_reset_interval -4
                neighborPropDelayThresh 20000000
                masterOnly 0
                G.8275.portDS.localPriority 128
                #
                # Run time options
                #
                assume_two_step 0
                logging_level 6
                path_trace_enabled 0
                follow_up_info 0
                hybrid_e2e 0
                inhibit_multicast_service 0
                net_sync_monitor 0
                tc_spanning_tree 0
                tx_timestamp_timeout 50
                unicast_listen 0
                unicast_master_table 0
                unicast_req_duration 3600
                use_syslog 1
                verbose 0
                summary_interval 0
                kernel_leap 1
                check_fup_sync 0
                clock_class_threshold 7
                #
                # Servo Options
                #
                pi_proportional_const 0.0
                pi_integral_const 0.0
                pi_proportional_scale 0.0
                pi_proportional_exponent -0.3
                pi_proportional_norm_max 0.7
                pi_integral_scale 0.0
                pi_integral_exponent 0.4
                pi_integral_norm_max 0.3
                step_threshold 2.0
                first_step_threshold 0.00002
                max_frequency 900000000
                clock_servo pi
                sanity_freq_limit 200000000
                ntpshm_segment 0
                #
                # Transport options
                #
                transportSpecific 0x0
                ptp_dst_mac 01:1B:19:00:00:00
                p2p_dst_mac 01:80:C2:00:00:0E
                udp_ttl 1
                udp6_scope 0x0E
                uds_address /var/run/ptp4l
                #
                # Default interface options
                #
                clock_type OC
                network_transport L2
                delay_mechanism E2E
                time_stamping hardware
                tsproc_mode filter
                delay_filter moving_median
                delay_filter_length 10
                egressLatency 0
                ingressLatency 0
                boundary_clock_jbod 0
                #
                # Clock description
                #
                productDescription ;;
                revisionData ;;
                manufacturerIdentity 00:00:00
                userDescription ;
                timeSource 0xA0
            ptpClockThreshold: 
      5
      
              holdOverTimeout: 30 # seconds
              maxOffsetThreshold: 100  # nano seconds
              minOffsetThreshold: -100
      Copy to Clipboard Toggle word wrap
      1
      요구 사항에 따라 PtpConfigMaster.yaml 또는 PtpConfigSlave.yaml 일 수 있습니다. acm-group-du-sno-ranGen.yaml 또는 acm-group-du-3node-ranGen.yaml 기반 구성의 경우 PtpConfigSlave.yaml 을 사용합니다.
      2
      장치별 인터페이스 이름입니다.
      3
      PTP 빠른 이벤트를 활성화하려면 .spec.sourceFiles.spec.profileptp4lOpts--summary_interval -4 값을 추가해야 합니다.
      4
      필수 phc2sysOpts 값. -m 은 메시지를 stdout 에 출력합니다. linuxptp-daemon DaemonSet 은 로그를 구문 분석하고 Prometheus 지표를 생성합니다.
      5
      선택 사항: ptpClockThreshold 스탠자가 없으면 ptpClockThreshold 필드에 기본값이 사용됩니다. 스탠자는 기본 ptpClockThreshold 값을 표시합니다. ptpClockThreshold 값은 PTP 이벤트가 트리거되기 전에 PTP 마스터 클록의 연결이 해제된 후의 시간을 구성합니다. holdOverTimeout 은 PTP 마스터 클록의 연결이 끊어지면 PTP 클럭 이벤트 상태가 Free RUN 으로 변경되기 전의 시간(초)입니다. maxOffsetThresholdminOffsetThreshold 설정은 CLOCK_REALTIME (phc2sys) 또는 master 오프셋(ptp4l)의 값과 비교하는 오프셋 값을 나노초로 구성합니다. ptp4l 또는 phc2sys 오프셋 값이 이 범위를 벗어나는 경우 PTP 클럭 상태가 Free RUN으로 설정됩니다. 오프셋 값이 이 범위 내에 있으면 PTP 클럭 상태가 LOCKED 로 설정됩니다.
  2. 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
  3. GitOps ZTP를 사용하여 새 사이트에 PTP 빠른 이벤트를 배포하려면 사이트 구성 리포지토리로 변경 사항을 푸시합니다.

9.2.9. 이미지 로컬 캐싱을 위해 Image Registry Operator 구성

OpenShift Container Platform은 로컬 레지스트리를 사용하여 이미지 캐싱을 관리합니다. 에지 컴퓨팅 사용 사례에서 클러스터는 중앙 집중식 이미지 레지스트리와 통신할 때 대역폭 제한의 영향을 받는 경우가 많기 때문에 이미지 다운로드 시간이 길어질 수 있습니다.

초기 배포 시에는 다운로드 시간이 길어지는 것은 불가피합니다. 시간이 지남에 따라 CRI-O에서 예기치 않은 종료의 경우 /var/lib/containers/storage 디렉터리를 지울 위험이 있습니다. 긴 이미지 다운로드 시간을 해결하기 위해ZTP( GitOps Zero Touch Provisioning)를 사용하여 원격 관리 클러스터에 로컬 이미지 레지스트리를 생성할 수 있습니다. 이는 클러스터가 네트워크의 맨 에지에 배포되는 에지 컴퓨팅 시나리오에서 유용합니다.

GitOps ZTP를 사용하여 로컬 이미지 레지스트리를 설정하려면 원격 관리 클러스터를 설치하는 데 사용하는 SiteConfig CR에서 디스크 파티션을 구성해야 합니다. 설치 후 PolicyGenerator CR을 사용하여 로컬 이미지 레지스트리를 구성합니다. 그런 다음 GitOps ZTP 파이프라인은 PV(영구 볼륨) 및 PVC(영구 볼륨 클레임) CR을 생성하고 imageregistry 구성을 패치합니다.

참고

로컬 이미지 레지스트리는 사용자 애플리케이션 이미지에만 사용할 수 있으며 OpenShift Container Platform 또는 Operator Lifecycle Manager Operator 이미지에는 사용할 수 없습니다.

9.2.9.1. siteConfig를 사용하여 디스크 파티션 구성

SiteConfig CR 및 GitOps ZTP(ZTP)를 사용하여 관리 클러스터에 대한 디스크 파티션을 구성합니다. SiteConfig CR의 디스크 파티션 세부 정보는 기본 디스크와 일치해야 합니다.

중요

설치 시 이 절차를 완료해야 합니다.

사전 요구 사항

  • Butane을 설치합니다.

프로세스

  1. storage.bu 파일을 생성합니다.

    variant: fcos
    version: 1.3.0
    storage:
      disks:
      - device: /dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0 
    1
    
        wipe_table: false
        partitions:
        - label: var-lib-containers
          start_mib: <start_of_partition> 
    2
    
          size_mib: <partition_size> 
    3
    
      filesystems:
        - path: /var/lib/containers
          device: /dev/disk/by-partlabel/var-lib-containers
          format: xfs
          wipe_filesystem: true
          with_mount_unit: true
          mount_options:
            - defaults
            - prjquota
    Copy to Clipboard Toggle word wrap
    1
    root 디스크를 지정합니다.
    2
    MiB로 파티션의 시작을 지정합니다. 값이 너무 작으면 설치에 실패합니다.
    3
    파티션의 크기를 지정합니다. 값이 너무 작으면 배포에 실패합니다.
  2. 다음 명령을 실행하여 storage.bu 를 Ignition 파일로 변환합니다.

    $ butane storage.bu
    Copy to Clipboard Toggle word wrap

    출력 예

    {"ignition":{"version":"3.2.0"},"storage":{"disks":[{"device":"/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0","partitions":[{"label":"var-lib-containers","sizeMiB":0,"startMiB":250000}],"wipeTable":false}],"filesystems":[{"device":"/dev/disk/by-partlabel/var-lib-containers","format":"xfs","mountOptions":["defaults","prjquota"],"path":"/var/lib/containers","wipeFilesystem":true}]},"systemd":{"units":[{"contents":"# # Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target","enabled":true,"name":"var-lib-containers.mount"}]}}
    Copy to Clipboard Toggle word wrap

  3. JSON Pretty Print 와 같은 도구를 사용하여 출력을 JSON 형식으로 변환합니다.
  4. 출력을 SiteConfig CR의 .spec.clusters.nodes.ignitionConfigOverride 필드에 복사합니다.

    [...]
    spec:
      clusters:
        - nodes:
            - ignitionConfigOverride: |
              {
                "ignition": {
                  "version": "3.2.0"
                },
                "storage": {
                  "disks": [
                    {
                      "device": "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0",
                      "partitions": [
                        {
                          "label": "var-lib-containers",
                          "sizeMiB": 0,
                          "startMiB": 250000
                        }
                      ],
                      "wipeTable": false
                    }
                  ],
                  "filesystems": [
                    {
                      "device": "/dev/disk/by-partlabel/var-lib-containers",
                      "format": "xfs",
                      "mountOptions": [
                        "defaults",
                        "prjquota"
                      ],
                      "path": "/var/lib/containers",
                      "wipeFilesystem": true
                    }
                  ]
                },
                "systemd": {
                  "units": [
                    {
                      "contents": "# # Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target",
                      "enabled": true,
                      "name": "var-lib-containers.mount"
                    }
                  ]
                }
              }
    [...]
    Copy to Clipboard Toggle word wrap

    참고

    .spec.clusters.nodes.ignitionConfigOverride 필드가 없는 경우 생성합니다.

검증

  1. 설치 중 또는 설치 후 hub 클러스터에서 BareMetalHost 오브젝트가 다음 명령을 실행하여 주석을 표시하는지 확인합니다.

    $ oc get bmh -n my-sno-ns my-sno -ojson | jq '.metadata.annotations["bmac.agent-install.openshift.io/ignition-config-overrides"]
    Copy to Clipboard Toggle word wrap

    출력 예

    "{\"ignition\":{\"version\":\"3.2.0\"},\"storage\":{\"disks\":[{\"device\":\"/dev/disk/by-id/wwn-0x6b07b250ebb9d0002a33509f24af1f62\",\"partitions\":[{\"label\":\"var-lib-containers\",\"sizeMiB\":0,\"startMiB\":250000}],\"wipeTable\":false}],\"filesystems\":[{\"device\":\"/dev/disk/by-partlabel/var-lib-containers\",\"format\":\"xfs\",\"mountOptions\":[\"defaults\",\"prjquota\"],\"path\":\"/var/lib/containers\",\"wipeFilesystem\":true}]},\"systemd\":{\"units\":[{\"contents\":\"# Generated by Butane\\n[Unit]\\nRequires=systemd-fsck@dev-disk-by\\\\x2dpartlabel-var\\\\x2dlib\\\\x2dcontainers.service\\nAfter=systemd-fsck@dev-disk-by\\\\x2dpartlabel-var\\\\x2dlib\\\\x2dcontainers.service\\n\\n[Mount]\\nWhere=/var/lib/containers\\nWhat=/dev/disk/by-partlabel/var-lib-containers\\nType=xfs\\nOptions=defaults,prjquota\\n\\n[Install]\\nRequiredBy=local-fs.target\",\"enabled\":true,\"name\":\"var-lib-containers.mount\"}]}}"
    Copy to Clipboard Toggle word wrap

  2. 설치 후 단일 노드 OpenShift 디스크 상태를 확인합니다.

    1. 다음 명령을 실행하여 단일 노드 OpenShift 노드에서 디버그 세션에 들어갑니다. 이 단계는 <node_name>-debug라는 디버그 Pod를 인스턴스화합니다.

      $ oc debug node/my-sno-node
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 디버그 쉘 내에서 /host 를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를 /host로 변경하면 호스트의 실행 경로에 포함된 바이너리를 실행할 수 있습니다.

      # chroot /host
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 사용 가능한 모든 블록 장치에 대한 정보를 나열합니다.

      # lsblk
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
      sda      8:0    0 446.6G  0 disk
      ├─sda1   8:1    0     1M  0 part
      ├─sda2   8:2    0   127M  0 part
      ├─sda3   8:3    0   384M  0 part /boot
      ├─sda4   8:4    0 243.6G  0 part /var
      │                                /sysroot/ostree/deploy/rhcos/var
      │                                /usr
      │                                /etc
      │                                /
      │                                /sysroot
      └─sda5   8:5    0 202.5G  0 part /var/lib/containers
      Copy to Clipboard Toggle word wrap

    4. 다음 명령을 실행하여 파일 시스템 디스크 공간 사용량에 대한 정보를 표시합니다.

      # df -h
      Copy to Clipboard Toggle word wrap

      출력 예

      Filesystem      Size  Used Avail Use% Mounted on
      devtmpfs        4.0M     0  4.0M   0% /dev
      tmpfs           126G   84K  126G   1% /dev/shm
      tmpfs            51G   93M   51G   1% /run
      /dev/sda4       244G  5.2G  239G   3% /sysroot
      tmpfs           126G  4.0K  126G   1% /tmp
      /dev/sda5       203G  119G   85G  59% /var/lib/containers
      /dev/sda3       350M  110M  218M  34% /boot
      tmpfs            26G     0   26G   0% /run/user/1000
      Copy to Clipboard Toggle word wrap

9.2.9.2. PolicyGenerator CR을 사용하여 이미지 레지스트리 구성

PolicyGenerator (PGT) CR을 사용하여 이미지 레지스트리를 구성하는 데 필요한 CR을 적용하고 이미지 레지스트리 구성을 패치합니다.

사전 요구 사항

  • 관리되는 클러스터에 디스크 파티션을 구성했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • GitOps Zero Touch Provisioning(ZTP)과 함께 사용할 사용자 지정 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다.

프로세스

  1. 적절한 PolicyGenerator CR에서 스토리지 클래스, 영구 볼륨 클레임, 영구 볼륨 및 이미지 레지스트리 구성을 구성합니다. 예를 들어, 개별 사이트를 구성하려면 다음 YAML을 acm-example-sno-site.yaml 파일에 추가합니다.

    sourceFiles:
      # storage class
      - fileName: StorageClass.yaml
        policyName: "sc-for-image-registry"
        metadata:
          name: image-registry-sc
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100" 
    1
    
      # persistent volume claim
      - fileName: StoragePVC.yaml
        policyName: "pvc-for-image-registry"
        metadata:
          name: image-registry-pvc
          namespace: openshift-image-registry
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100"
        spec:
          accessModes:
            - ReadWriteMany
          resources:
            requests:
              storage: 100Gi
          storageClassName: image-registry-sc
          volumeMode: Filesystem
      # persistent volume
      - fileName: ImageRegistryPV.yaml 
    2
    
        policyName: "pv-for-image-registry"
        metadata:
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100"
      - fileName: ImageRegistryConfig.yaml
        policyName: "config-for-image-registry"
        complianceType: musthave
        metadata:
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100"
        spec:
          storage:
            pvc:
              claim: "image-registry-pvc"
    Copy to Clipboard Toggle word wrap
    1
    사이트, 공통 또는 그룹 수준에서 이미지 레지스트리를 구성하는지에 따라 ztp-deploy-wave 에 적절한 값을 설정합니다. ztp-deploy-wave: "100"은 참조된 소스 파일을 함께 그룹화할 수 있으므로 개발이나 테스트에 적합합니다.
    2
    ImageRegistryPV.yaml 에서 spec.local.path 필드가 SiteConfig CR의 mount_point 필드에 설정된 값과 일치하도록 /var/imageregistry 로 설정되어 있는지 확인합니다.
    중요

    - fileName: ImageRegistryConfig.yaml 구성에 대해 complianceType: mustonlyhave를 설정하지 마세요. 이로 인해 레지스트리 포드 배포가 실패할 수 있습니다.

  2. PolicyGenerator 변경 사항을 Git에 커밋한 다음, GitOps ZTP ArgoCD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

검증

관리되는 클러스터의 로컬 이미지 레지스트리에서 발생하는 오류를 해결하려면 다음 단계를 따르세요.

  • 관리되는 클러스터에 로그인한 상태에서 레지스트리에 성공적으로 로그인했는지 확인합니다. 다음 명령을 실행하세요.

    1. 관리되는 클러스터 이름을 내보냅니다.

      $ cluster=<managed_cluster_name>
      Copy to Clipboard Toggle word wrap
    2. 관리되는 클러스터 kubeconfig 세부 정보를 가져옵니다.

      $ oc get secret -n $cluster $cluster-admin-password -o jsonpath='{.data.password}' | base64 -d > kubeadmin-password-$cluster
      Copy to Clipboard Toggle word wrap
    3. 클러스터 kubeconfig를 다운로드하고 내보냅니다.

      $ oc get secret -n $cluster $cluster-admin-kubeconfig -o jsonpath='{.data.kubeconfig}' | base64 -d > kubeconfig-$cluster && export KUBECONFIG=./kubeconfig-$cluster
      Copy to Clipboard Toggle word wrap
    4. 관리되는 클러스터에서 이미지 레지스트리에 대한 액세스를 확인합니다. "레지스트리 접근"을 참조하세요.
  • imageregistry.operator.openshift.io 그룹 인스턴스의 Config CRD가 오류를 보고하지 않는지 확인하세요. 관리되는 클러스터에 로그인한 상태에서 다음 명령을 실행합니다.

    $ oc get image.config.openshift.io cluster -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    apiVersion: config.openshift.io/v1
    kind: Image
    metadata:
      annotations:
        include.release.openshift.io/ibm-cloud-managed: "true"
        include.release.openshift.io/self-managed-high-availability: "true"
        include.release.openshift.io/single-node-developer: "true"
        release.openshift.io/create-only: "true"
      creationTimestamp: "2021-10-08T19:02:39Z"
      generation: 5
      name: cluster
      resourceVersion: "688678648"
      uid: 0406521b-39c0-4cda-ba75-873697da75a4
    spec:
      additionalTrustedCA:
        name: acm-ice
    Copy to Clipboard Toggle word wrap

  • 관리되는 클러스터의 PersistentVolumeClaim 에 데이터가 채워졌는지 확인합니다. 관리되는 클러스터에 로그인한 상태에서 다음 명령을 실행합니다.

    $ oc get pv image-registry-sc
    Copy to Clipboard Toggle word wrap
  • registry* pod가 실행 중이고 openshift-image-registry 네임스페이스에 있는지 확인하세요.

    $ oc get pods -n openshift-image-registry | grep registry*
    Copy to Clipboard Toggle word wrap

    출력 예

    cluster-image-registry-operator-68f5c9c589-42cfg   1/1     Running     0          8d
    image-registry-5f8987879-6nx6h                     1/1     Running     0          8d
    Copy to Clipboard Toggle word wrap

  • 관리되는 클러스터의 디스크 파티션이 올바른지 확인하세요.

    1. 관리되는 클러스터에 대한 디버그 셸을 엽니다.

      $ oc debug node/sno-1.example.com
      Copy to Clipboard Toggle word wrap
    2. lsblk 를 실행하여 호스트 디스크 파티션을 확인합니다.

      sh-4.4# lsblk
      NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
      sda      8:0    0 446.6G  0 disk
        |-sda1   8:1    0     1M  0 part
        |-sda2   8:2    0   127M  0 part
        |-sda3   8:3    0   384M  0 part /boot
        |-sda4   8:4    0 336.3G  0 part /sysroot
        `-sda5   8:5    0 100.1G  0 part /var/imageregistry 
      1
      
      sdb      8:16   0 446.6G  0 disk
      sr0     11:0    1   104M  0 rom
      Copy to Clipboard Toggle word wrap
      1
      /var/imageregistry는 디스크가 올바르게 파티션되었음을 나타냅니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat