9.2. PolicyGenerator 리소스를 사용한 고급 관리 클러스터 구성
PolicyGenerator
CR을 사용하여 관리 클러스터에 사용자 지정 기능을 배포할 수 있습니다.
GitOps ZTP를 사용하여 PolicyGenerator 리소스를 사용하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
PolicyGenerator
리소스에 대한 자세한 내용은 RHACM 정책 생성기 설명서를 참조하십시오.
9.2.1. 클러스터에 추가 변경 사항 배포
기본 GitOps ZTP(ZTP) 파이프라인 구성 외부에서 클러스터 구성을 변경해야 하는 경우 다음 세 가지 옵션이 있습니다.
- GitOps ZTP 파이프라인이 완료된 후 추가 구성을 적용합니다.
- GitOps ZTP 파이프라인 배포가 완료되면 배포된 클러스터가 애플리케이션 워크로드에 대해 준비됩니다. 이 시점에서 추가 Operator를 설치하고 요구 사항과 관련된 구성을 적용할 수 있습니다. 추가 구성이 플랫폼 성능 또는 할당된 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 리포지토리를 생성합니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD의 소스 리포지토리로 정의해야 합니다.
프로세스
기존 콘텐츠의 기본 소스 CR을 검토합니다. ZTP(ZTP) 컨테이너에서 해당 CR을 추출하여 참조
PolicyGenerator
CR에 나열된 소스 CR을 검토할 수 있습니다./out
폴더를 생성합니다.$ mkdir -p ./out
소스 CR을 추출합니다.
$ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.17.1 extract /home/ztp --tar | tar x -C ./out
./out/source-crs/
의 기준 PerformanceProfile CR을 검토합니다.PerformanceProfile
.yamlapiVersion: 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의 모든 필드는PolicyGenerator
CR에 제공되지 않는 경우 생성된 CR에서 제거됩니다.acm-group-du-sno-ranGen.yaml
참조 파일에서PerformanceProfile
에 대한PolicyGenerator
항목을 업데이트합니다. 다음 예제PolicyGenerator
CR 스탠자는 적절한 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: false
Git에서
PolicyGenerator
변경 사항을 커밋한 다음 GitOps ZTP argo CD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.출력 예
GitOps ZTP 애플리케이션은 생성된
PerformanceProfile
CR을 포함하는 RHACM 정책을 생성합니다. 해당 CR의 내용은PolicyGenerator
에 있는PerformanceProfile
항목의메타데이터
및사양
콘텐츠를 소스 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에서 완전히 생략됩니다.
이에 대한 예외는 PolicyGenerator
CR에서 mcp
값으로 대체되는 /source-crs
YAML 파일의 $mcp
변수입니다. 예를 들어 example/policygentemplates/acm-group-du-standard-ranGen.yaml
에서 mcp
의 값은 worker
입니다.
spec: bindingRules: group-du-standard: "" mcp: "worker"
policyGen
툴은 출력 CR에서 $mcp
의 인스턴스를 worker
로 바꿉니다.
9.2.3. GitOps ZTP 파이프라인에 사용자 정의 콘텐츠 추가
다음 절차에 따라 GitOps ZTP 파이프라인에 새 콘텐츠를 추가합니다.
프로세스
-
PolicyGenerator
CR(사용자 정의 리소스)에 대한kustomization.yaml
파일이 포함된 디렉터리에source-crs
라는 하위 디렉터리를 생성합니다. 다음 예와 같이 사용자 제공 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
- 1
source-crs
하위 디렉터리는kustomization.yaml
파일과 동일한 디렉터리에 있어야 합니다.
필요한
PolicyGenerator
CR을 업데이트하여source-crs/custom-crs
및source-crs/elasticsearch
디렉터리에 추가한 콘텐츠에 대한 참조를 포함합니다. 예를 들면 다음과 같습니다.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
-
Git에서
PolicyGenerator
변경 사항을 커밋한 다음 GitOps ZTP Argo CD 정책 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다. 변경된
PolicyGenerator
를 포함하도록ClusterGroupUpgrade
CR을 업데이트하고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
다음 명령을 실행하여 업데이트된
ClusterGroupUpgrade
CR을 적용합니다.$ oc apply -f cgu-test.yaml
검증
다음 명령을 실행하여 업데이트가 성공했는지 확인합니다.
$ oc get cgu -A
출력 예
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
9.2.4. PolicyGenerator CR에 대한 정책 규정 준수 평가 시간 초과 구성
hub 클러스터에 설치된 RHACM(Red Hat Advanced Cluster Management)을 사용하여 관리 클러스터가 적용된 정책을 준수하는지 여부를 모니터링하고 보고합니다. RHACM은 정책 템플릿을 사용하여 사전 정의된 정책 컨트롤러 및 정책을 적용합니다. 정책 컨트롤러는 Kubernetes CRD(사용자 정의 리소스 정의) 인스턴스입니다.
PolicyGenerator
사용자 정의 리소스(CR)를 사용하여 기본 정책 평가 간격을 덮어쓸 수 있습니다. RHACM이 적용된 클러스터 정책을 다시 평가하기 전에 ConfigurationPolicy
CR이 정책 준수 또는 비준수 상태에 있을 수 있는 기간을 정의하는 기간을 구성합니다.
GitOps ZTP(ZTP) 정책 생성기는 사전 정의된 정책 평가 간격을 사용하여 ConfigurationPolicy
CR 정책을 생성합니다. 비준수
상태의 기본값은 10초입니다. 규정 준수
상태의 기본값은 10분입니다. 평가 간격을 비활성화하려면 값을 never
로 설정합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. -
cluster-admin
권한이 있는 사용자로 hub 클러스터에 로그인했습니다. - 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.
프로세스
PolicyGenerator
CR의 모든 정책에 대한 평가 간격을 구성하려면evaluationInterval
필드에 적절한준수
및 비준수policyDefaults: evaluationInterval: compliant: 30m noncompliant: 45s
참고특정
규정 준수
상태에 도달하면 정책 평가를 중지하지
않도록 규정 준수 및비준
수 필드를 설정할 수도 있습니다.PolicyGenerator
CR에서 개별 정책 오브젝트의 평가 간격을 구성하려면evaluationInterval
필드를 추가하고 적절한 값을 설정합니다. 예를 들면 다음과 같습니다.policies: - name: "sriov-sub-policy" manifests: - path: "SriovSubscription.yaml" evaluationInterval: compliant: never noncompliant: 10s
-
Git 리포지토리에서
PolicyGenerator
CR 파일을 커밋하고 변경 사항을 내보냅니다.
검증
관리형 spoke 클러스터 정책이 예상 간격으로 모니터링되는지 확인합니다.
-
관리 클러스터에서
cluster-admin
권한이 있는 사용자로 로그인합니다. open-cluster-management-agent-addon
네임스페이스에서 실행 중인 Pod를 가져옵니다. 다음 명령을 실행합니다.$ oc get pods -n open-cluster-management-agent-addon
출력 예
NAME READY STATUS RESTARTS AGE config-policy-controller-858b894c68-v4xdb 1/1 Running 22 (5d8h ago) 10d
config-policy-controller
Pod에 대한 로그에서 적용된 정책이 예상 간격으로 평가되고 있는지 확인합니다.$ oc logs -n open-cluster-management-agent-addon config-policy-controller-858b894c68-v4xdb
출력 예
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"}
9.2.5. 검증기 정보 정책을 사용하여 GitOps ZTP 클러스터 배포 완료 신호
GitOps ZTP(ZTP) 설치 및 배포된 클러스터의 구성이 완료된 경우 신호를 알리는 검증기 정보를 생성합니다. 이 정책은 단일 노드 OpenShift 클러스터, 3-노드 클러스터 및 표준 클러스터의 배포에 사용할 수 있습니다.
프로세스
소스 파일
validatorCRs/informDuValidator.yaml
이 포함된 독립 실행형PolicyGenerator
CR(사용자 정의 리소스)을 생성합니다. 각 클러스터 유형에 대해 하나의 독립 실행형PolicyGenerator
CR만 있으면 됩니다. 예를 들어 이 CR은 단일 노드 OpenShift 클러스터에 대한 검증기 정보 정책을 적용합니다.single-node 클러스터 검증기 정보 정책 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
-
Git 리포지토리에서
PolicyGenerator
CR 파일을 커밋하고 변경 사항을 내보냅니다.
추가 리소스
9.2.6. PolicyGenerator CR을 사용하여 전원 상태 구성
대기 시간이 짧고 고성능 에지 배포를 위해 C-state 및 P-state를 비활성화하거나 제한해야 합니다. 이 구성을 사용하면 CPU가 일정한 빈도로 실행되며 일반적으로 최대 turbo 빈도입니다. 이렇게 하면 CPU가 항상 최대 속도로 실행되므로 높은 성능과 대기 시간이 단축됩니다. 이로 인해 워크로드에 대한 최적의 대기 시간이 발생합니다. 그러나 이는 또한 가장 높은 전력 소비를 초래하며, 이는 모든 워크로드에 필요하지 않을 수 있습니다.
워크로드는 높은 성능 및 낮은 대기 시간을 위해 C-state 및 P-state 설정을 비활성화해야 하는 중요한 워크로드로 분류할 수 있지만 중요하지 않은 워크로드는 C-state 및 P-state 설정을 사용하여 일부 대기 시간 및 성능을 저하시킵니다. ZTP(ZTP)를 사용하여 다음 세 가지 전원 상태를 구성할 수 있습니다.
- 고성능 모드는 가장 높은 전력 소비에서 매우 낮은 대기 시간을 제공합니다.
- 성능 모드는 비교적 높은 전력 소비로 짧은 대기 시간을 제공합니다.
- 전력 절감은 대기 시간이 증가하여 전력 소비를 줄일 수 있습니다.
기본 구성은 대기 시간이 짧은 성능 모드입니다.
PolicyGenerator
CR(사용자 정의 리소스)을 사용하면 ztp-site-generate
컨테이너의 GitOps 플러그인과 함께 제공된 기본 소스 CR에 추가 구성 세부 정보를 오버레이할 수 있습니다.
acm-group-du-sno-ranGen.yaml
의 PolicyGenerator
CR을 기반으로 생성된 PerformanceProfile
CR의 workloadHints
필드를 업데이트하여 전원 상태를 구성합니다.
다음과 같은 일반적인 사전 요구 사항은 세 가지 전원 상태를 모두 구성하는 데 적용됩니다.
사전 요구 사항
- 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD의 소스 리포지토리로 정의해야 합니다.
- " GitOps ZTP 사이트 구성 리포지토리 준비"에 설명된 절차를 수행했습니다.
9.2.6.1. PolicyGenerator CR을 사용하여 성능 모드 구성
이 예제에 따라 acm-group-du-sno-ranGen.yaml
의 PolicyGenerator
CR을 기반으로 생성된 PerformanceProfile
CR의 workloadHints
필드를 업데이트하여 성능 모드를 설정합니다.
성능 모드는 비교적 높은 전력 소비로 짧은 대기 시간을 제공합니다.
사전 요구 사항
- "낮은 대기 시간과 고성능을 위해 호스트 펌웨어 구성"의 지침에 따라 성능 관련 설정으로 BIOS를 구성했습니다.
프로세스
다음과 같이
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
-
Git에서
PolicyGenerator
변경 사항을 커밋한 다음 GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.
9.2.6.2. PolicyGenerator CR을 사용하여 고성능 모드 구성
이 예제에 따라 acm-group-du-sno-ranGen.yaml
의 PolicyGenerator
CR을 기반으로 생성된 PerformanceProfile
CR의 workloadHints
필드를 업데이트하여 고성능 모드를 설정합니다.
고성능 모드는 가장 높은 전력 소비에서 매우 짧은 대기 시간을 제공합니다.
사전 요구 사항
- "낮은 대기 시간과 고성능을 위해 호스트 펌웨어 구성"의 지침에 따라 성능 관련 설정으로 BIOS를 구성했습니다.
프로세스
다음과 같이
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
-
Git에서
PolicyGenerator
변경 사항을 커밋한 다음 GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.
9.2.6.3. PolicyGenerator CR을 사용하여 전원 저장 모드 구성
이 예제에 따라 acm-group-du-sno-ranGen.yaml
의 PolicyGenerator
CR을 기반으로 생성된 PerformanceProfile
CR의 workloadHints
필드를 업데이트하여 전원 저장 모드를 설정합니다.
절전 모드는 대기 시간이 증가하여 전력 소비를 줄입니다.
사전 요구 사항
- BIOS에서 C-states 및 OS 제어 P-states를 활성화했습니다.
프로세스
전원 저장 모드를 구성하려면 다음과 같이
out/argocd/example/acmpolicygenerator/
에서acm-group-du-sno-ranGen.yaml
참조 파일에서PerformanceProfile
에 대한PolicyGenerator
항목을 업데이트합니다. 추가 커널 인수 오브젝트를 통해 전원 저장 모드에 대한 CPU governor를 구성하는 것이 좋습니다.- path: source-crs/PerformanceProfile.yaml patches: - spec: # ... workloadHints: realTime: true highPowerConsumption: false perPodPowerManagement: true # ... additionalKernelArgs: - # ... - "cpufreq.default_governor=schedutil" 1
- 1
- 그러나
schedutil
governor를 사용하는 것이 좋습니다. 그러나온디맨드
및전원저장
을 포함한 다른 governor도 사용할 수 있습니다.
-
Git에서
PolicyGenerator
변경 사항을 커밋한 다음 GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.
검증
다음 명령을 사용하여 식별된 노드 목록에서 배포된 클러스터에서 작업자 노드를 선택합니다.
$ oc get nodes
다음 명령을 사용하여 노드에 로그인합니다.
$ oc debug node/<node-name>
&
lt;node-name
>을 전원 상태를 확인할 노드의 이름으로 바꿉니다.디버그 쉘 내에서
/host
를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의/host
에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를/host
로 변경하면 다음 예와 같이 호스트의 실행 경로에 포함된 바이너리를 실행할 수 있습니다.# chroot /host
다음 명령을 실행하여 적용된 전원 상태를 확인합니다.
# cat /proc/cmdline
예상 출력
-
절전 모드의 경우
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 사용으로 전원 절약 모드"에 설명된 대로 전원 절약 모드를 구성했습니다.
프로세스
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
- 1
max_perf_pct
는cpufreq
드라이버가 지원되는 최대 CPU 빈도의 백분율로 설정할 수 있는 최대 빈도를 제어합니다. 이 값은 모든 CPU에 적용됩니다./sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
에서 지원되는 최대 빈도를 확인할 수 있습니다. 시작점으로 모든 CPU를 모든코어
frequency로 제한하는 백분율로 사용할 수 있습니다.All Cores Cryostat
빈도는 코어가 완전히 비어 있을 때 모든 코어가 실행되는 빈도입니다.
참고전력 절감을 극대화하려면 더 낮은 가치를 설정하십시오.
max_perf_pct
에 대한 더 낮은 값을 설정하면 최대 CPU 빈도가 제한되므로 전력 소비가 줄어들지만 잠재적으로 성능에 영향을 미칠 수 있습니다. 다양한 값을 실험하고 시스템의 성능 및 전력 소비를 모니터링하여 사용 사례에 가장 적합한 설정을 찾습니다.-
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 리포지토리를 생성합니다.
프로세스
새 관리 클러스터에 대해 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.17
참고스토리지 LVMO 서브스크립션은 더 이상 사용되지 않습니다. 향후 OpenShift Container Platform 릴리스에서는 스토리지 LVMO 서브스크립션을 사용할 수 없습니다. 대신 Storage LVMS 서브스크립션을 사용해야 합니다.
OpenShift Container Platform 4.17에서는 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
특정 그룹 또는 개별 사이트 구성 파일의
policies.manifests
에LVMCluster
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
이 예제 구성은 OpenShift Container Platform이 설치된 디스크를 제외하고 사용 가능한 모든 장치가 포함된 볼륨 그룹( Cryostat1)을 생성합니다.
thin-pool 논리 볼륨도 생성됩니다.
- 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
-
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 리포지토리를 생성했습니다.
프로세스
요구 사항에 따라
acm-group-du-3node-ranGen.yaml
,acm-group-du-sno-ranGen.yaml
또는acm-group-du-standard-ranGen.yaml
파일에 다음PolicyGenerator
변경 사항을 적용합니다.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"
참고OpenShift Container Platform 4.13 이상에서는 PTP 이벤트와 함께 HTTP 전송을 사용할 때
PtpOperatorConfig
리소스에서transportHost
필드를 설정할 필요가 없습니다.PTP 클럭 유형 및 인터페이스에 대해
linuxptp
및phc2sys
를 구성합니다. 예를 들어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
- 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.profile
의ptp4lOpts
에--summary_interval -4
값을 추가해야 합니다. - 4
- 필수
phc2sysOpts
값.-m
은 메시지를stdout
에 출력합니다.linuxptp-daemon
DaemonSet
은 로그를 구문 분석하고 Prometheus 지표를 생성합니다. - 5
- 선택 사항:
ptpClockThreshold
스탠자가 없으면ptpClockThreshold
필드에 기본값이 사용됩니다. 스탠자는 기본ptpClockThreshold
값을 표시합니다.ptpClockThreshold
값은 PTP 이벤트가 트리거되기 전에 PTP 마스터 클록의 연결이 해제된 후의 시간을 구성합니다.holdOverTimeout
은 PTP 마스터 클록의 연결이 끊어지면 PTP 클럭 이벤트 상태가 FreeRUN
으로 변경되기 전의 시간(초)입니다.maxOffsetThreshold
및minOffsetThreshold
설정은CLOCK_REALTIME
(phc2sys
) 또는 master 오프셋(ptp4l
)의 값과 비교하는 오프셋 값을 나노초로 구성합니다.ptp4l
또는phc2sys
오프셋 값이 이 범위를 벗어나는 경우 PTP 클럭 상태가 FreeRUN으로
설정됩니다. 오프셋 값이 이 범위 내에 있으면 PTP 클럭 상태가LOCKED
로 설정됩니다.
- 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
- 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을 설치합니다.
프로세스
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
다음 명령을 실행하여
storage.bu
를 Ignition 파일로 변환합니다.$ butane storage.bu
출력 예
{"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"}]}}
- JSON Pretty Print 와 같은 도구를 사용하여 출력을 JSON 형식으로 변환합니다.
출력을
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" } ] } } [...]
참고.spec.clusters.nodes.ignitionConfigOverride
필드가 없는 경우 생성합니다.
검증
설치 중 또는 설치 후 hub 클러스터에서
BareMetalHost
오브젝트가 다음 명령을 실행하여 주석을 표시하는지 확인합니다.$ oc get bmh -n my-sno-ns my-sno -ojson | jq '.metadata.annotations["bmac.agent-install.openshift.io/ignition-config-overrides"]
출력 예
"{\"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\"}]}}"
설치 후 단일 노드 OpenShift 디스크 상태를 확인합니다.
다음 명령을 실행하여 단일 노드 OpenShift 노드에서 디버그 세션에 들어갑니다. 이 단계는
<node_name>-debug
라는 디버그 Pod를 인스턴스화합니다.$ oc debug node/my-sno-node
다음 명령을 실행하여 디버그 쉘 내에서
/host
를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의/host
에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를/host
로 변경하면 호스트의 실행 경로에 포함된 바이너리를 실행할 수 있습니다.# chroot /host
다음 명령을 실행하여 사용 가능한 모든 블록 장치에 대한 정보를 나열합니다.
# lsblk
출력 예
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
다음 명령을 실행하여 파일 시스템 디스크 공간 사용량에 대한 정보를 표시합니다.
# df -h
출력 예
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
9.2.9.2. PolicyGenerator CR을 사용하여 이미지 레지스트리 구성
PGT( PolicyGenerator
) CR을 사용하여 이미지 레지스트리를 구성하고 imageregistry
구성을 패치하는 데 필요한 CR을 적용합니다.
사전 요구 사항
- 관리 클러스터에 디스크 파티션을 구성했습니다.
-
OpenShift CLI(
oc
)가 설치되어 있습니다. -
cluster-admin
권한이 있는 사용자로 hub 클러스터에 로그인했습니다. - GitOps ZTP(ZTP)와 함께 사용할 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.
프로세스
적절한
PolicyGenerator
CR에서 스토리지 클래스, 영구 볼륨 클레임, 영구 볼륨 및 이미지 레지스트리 구성을 구성합니다. 예를 들어 개별 사이트를 구성하려면acm-example-sno-site.yaml
파일에 다음 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"
중요complianceType: mustonlyhave
for the- fileName: ImageRegistryConfig.yaml
설정을 설정하지 마십시오. 이로 인해 레지스트리 Pod 배포가 실패할 수 있습니다.-
Git에서
PolicyGenerator
변경 사항을 커밋한 다음 GitOps ZTP ArgoCD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.
검증
다음 단계를 사용하여 관리 클러스터의 로컬 이미지 레지스트리의 오류를 해결합니다.
관리 클러스터에 로그인하는 동안 레지스트리에 성공적으로 로그인했는지 확인합니다. 다음 명령을 실행합니다.
관리 클러스터 이름을 내보냅니다.
$ cluster=<managed_cluster_name>
관리 클러스터
kubeconfig
세부 정보를 가져옵니다.$ oc get secret -n $cluster $cluster-admin-password -o jsonpath='{.data.password}' | base64 -d > kubeadmin-password-$cluster
클러스터
kubeconfig
를 다운로드하여 내보냅니다.$ oc get secret -n $cluster $cluster-admin-kubeconfig -o jsonpath='{.data.kubeconfig}' | base64 -d > kubeconfig-$cluster && export KUBECONFIG=./kubeconfig-$cluster
- 관리 클러스터에서 이미지 레지스트리에 대한 액세스를 확인합니다. " registry 액세스"를 참조하십시오.
imageregistry.operator.openshift.io
그룹 인스턴스의Config
CRD가 오류를 보고하지 않는지 확인합니다. 관리 클러스터에 로그인하는 동안 다음 명령을 실행합니다.$ oc get image.config.openshift.io cluster -o yaml
출력 예
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
관리 클러스터의
PersistentVolumeClaim
이 데이터로 채워져 있는지 확인합니다. 관리 클러스터에 로그인하는 동안 다음 명령을 실행합니다.$ oc get pv image-registry-sc
registry*
포드가 실행 중이고openshift-image-registry
네임스페이스에 있는지 확인합니다.$ oc get pods -n openshift-image-registry | grep registry*
출력 예
cluster-image-registry-operator-68f5c9c589-42cfg 1/1 Running 0 8d image-registry-5f8987879-6nx6h 1/1 Running 0 8d
관리 클러스터의 디스크 파티션이 올바른지 확인합니다.
관리 클러스터에 대한 디버그 쉘을 엽니다.
$ oc debug node/sno-1.example.com
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
- 1
/var/imageregistry
는 디스크가 올바르게 분할되었음을 나타냅니다.
추가 리소스