12.6. 관리 클러스터에서 정책 업데이트
TALM( Topology Aware Lifecycle Manager)은 ClusterGroupUpgrade
CR(사용자 정의 리소스)에 지정된 클러스터에 대한 정보
정책 세트를 수정합니다. TALM은 PlacementBinding
CR의 bindingOverrides.
및 remediationAction
subFilter
사양을 통해 Policy
CR의 remediationAction 사양을 제어하여 정책을 해결합니다. 각 정책에는 해당 RHACM 배치 규칙과 RHACM 배치 바인딩이 있습니다.
TALM은 현재 배치의 각 클러스터를 적용 가능한 관리 정책에 해당하는 배치 규칙에 추가합니다. 클러스터가 이미 정책과 호환되는 경우 TALM은 규정 준수 클러스터에 해당 정책 적용을 건너뜁니다. 그런 다음 TALM은 호환되지 않는 클러스터에 다음 정책을 적용하기 위해 계속 이동합니다. TALM이 배치의 업데이트를 완료하면 정책과 연결된 배치 규칙에서 모든 클러스터가 제거됩니다. 그런 다음 다음 배치의 업데이트가 시작됩니다.
spoke 클러스터에서 RHACM에 호환되는 상태를 보고하지 않으면 허브 클러스터의 관리 정책에 TALM에 필요한 상태 정보가 누락될 수 있습니다. TALM은 다음과 같은 방법으로 이러한 사례를 처리합니다.
-
정책의
status.compliant
필드가 없는 경우 TALM은 정책을 무시하고 로그 항목을 추가합니다. 그런 다음 TALM은 정책의status.status
필드를 계속 확인합니다. -
정책의
status.status
가 없으면 TALM에서 오류가 발생합니다. -
정책의
status.status
필드에 클러스터의 규정 준수 상태가 없는 경우 TALM은 해당 클러스터가 해당 정책과 호환되지 않는 것으로 간주합니다.
ClusterGroupUpgrade
CR의 batchTimeoutAction
에 따라 클러스터에 대한 업그레이드가 실패하는 경우 발생하는 상황이 결정됩니다. 실패한 클러스터를 계속
건너뛰고 다른 클러스터를 계속 업그레이드하거나 모든 클러스터의 정책 수정을 중지하려면 중단을
지정할 수 있습니다. 시간 초과가 경과하면 TALM은 생성된 모든 리소스를 제거하여 클러스터에 대한 추가 업데이트가 없는지 확인합니다.
업그레이드 정책의 예
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: ocp-4.4.17.4 namespace: platform-upgrade spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: upgrade spec: namespaceselector: exclude: - kube-* include: - '*' object-templates: - complianceType: musthave objectDefinition: apiVersion: config.openshift.io/v1 kind: ClusterVersion metadata: name: version spec: channel: stable-4.17 desiredUpdate: version: 4.4.17.4 upstream: https://api.openshift.com/api/upgrades_info/v1/graph status: history: - state: Completed version: 4.4.17.4 remediationAction: inform severity: low remediationAction: inform
RHACM 정책에 대한 자세한 내용은 정책 개요 를 참조하십시오.
추가 리소스
12.6.1. TALM을 사용하여 설치하는 관리형 클러스터에 대한 Operator 서브스크립션 구성
Operator의 Subscription
CR(사용자 정의 리소스)에 status.state.AtLatestKnown
필드가 포함된 경우에만 TALM( topology Aware Lifecycle Manager)은 Operator에 대한 설치 계획을 승인할 수 있습니다.
프로세스
status.state.AtLatestKnown
필드를 Operator의Subscription
CR에 추가합니다.서브스크립션 CR의 예
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: cluster-logging namespace: openshift-logging annotations: ran.openshift.io/ztp-deploy-wave: "2" spec: channel: "stable" name: cluster-logging source: redhat-operators sourceNamespace: openshift-marketplace installPlanApproval: Manual status: state: AtLatestKnown 1
- 1
status.state: AtLatestKnown
필드는 Operator 카탈로그에서 사용 가능한 최신 Operator 버전에 사용됩니다.
참고레지스트리에서 새 버전의 Operator를 사용할 수 있으면 연결된 정책이 호환되지 않습니다.
-
ClusterGroupUpgrade
CR이 있는 관리 클러스터에 변경된서브스크립션
정책을 적용합니다.
12.6.2. 관리 클러스터에 업데이트 정책 적용
정책을 적용하여 관리 클러스터를 업데이트할 수 있습니다.
사전 요구 사항
- TALM(토폴로지 Aware Lifecycle Manager)을 설치합니다.
- TALM에는 RHACM 2.9 이상이 필요합니다.
- 하나 이상의 관리 클러스터를 프로비저닝합니다.
-
cluster-admin
권한이 있는 사용자로 로그인합니다. - hub 클러스터에 RHACM 정책을 생성합니다.
프로세스
ClusterGroupUpgrade
CR의 내용을cgu-1.yaml
파일에 저장합니다.apiVersion: ran.openshift.io/v1alpha1 kind: ClusterGroupUpgrade metadata: name: cgu-1 namespace: default spec: managedPolicies: 1 - policy1-common-cluster-version-policy - policy2-common-nto-sub-policy - policy3-common-ptp-sub-policy - policy4-common-sriov-sub-policy enable: false clusters: 2 - spoke1 - spoke2 - spoke5 - spoke6 remediationStrategy: maxConcurrency: 2 3 timeout: 240 4 batchTimeoutAction: 5
다음 명령을 실행하여
ClusterGroupUpgrade
CR을 생성합니다.$ oc create -f cgu-1.yaml
다음 명령을 실행하여 Hub 클러스터에서
ClusterGroupUpgrade
CR이 생성되었는지 확인합니다.$ oc get cgu --all-namespaces
출력 예
NAMESPACE NAME AGE STATE DETAILS default cgu-1 8m55 NotEnabled Not Enabled
다음 명령을 실행하여 업데이트 상태를 확인합니다.
$ oc get cgu -n default cgu-1 -ojsonpath='{.status}' | jq
출력 예
{ "computedMaxConcurrency": 2, "conditions": [ { "lastTransitionTime": "2022-02-25T15:34:07Z", "message": "Not enabled", 1 "reason": "NotEnabled", "status": "False", "type": "Progressing" } ], "managedPoliciesContent": { "policy1-common-cluster-version-policy": "null", "policy2-common-nto-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"node-tuning-operator\",\"namespace\":\"openshift-cluster-node-tuning-operator\"}]", "policy3-common-ptp-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"ptp-operator-subscription\",\"namespace\":\"openshift-ptp\"}]", "policy4-common-sriov-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"sriov-network-operator-subscription\",\"namespace\":\"openshift-sriov-network-operator\"}]" }, "managedPoliciesForUpgrade": [ { "name": "policy1-common-cluster-version-policy", "namespace": "default" }, { "name": "policy2-common-nto-sub-policy", "namespace": "default" }, { "name": "policy3-common-ptp-sub-policy", "namespace": "default" }, { "name": "policy4-common-sriov-sub-policy", "namespace": "default" } ], "managedPoliciesNs": { "policy1-common-cluster-version-policy": "default", "policy2-common-nto-sub-policy": "default", "policy3-common-ptp-sub-policy": "default", "policy4-common-sriov-sub-policy": "default" }, "placementBindings": [ "cgu-policy1-common-cluster-version-policy", "cgu-policy2-common-nto-sub-policy", "cgu-policy3-common-ptp-sub-policy", "cgu-policy4-common-sriov-sub-policy" ], "placementRules": [ "cgu-policy1-common-cluster-version-policy", "cgu-policy2-common-nto-sub-policy", "cgu-policy3-common-ptp-sub-policy", "cgu-policy4-common-sriov-sub-policy" ], "remediationPlan": [ [ "spoke1", "spoke2" ], [ "spoke5", "spoke6" ] ], "status": {} }
- 1
ClusterGroupUpgrade
CR의spec.enable
필드는false
로 설정됩니다.
다음 명령을 실행하여
spec.enable
필드의 값을true
로 변경합니다.$ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-1 \ --patch '{"spec":{"enable":true}}' --type=merge
검증
다음 명령을 실행하여 업데이트 상태를 확인합니다.
$ oc get cgu -n default cgu-1 -ojsonpath='{.status}' | jq
출력 예
{ "computedMaxConcurrency": 2, "conditions": [ 1 { "lastTransitionTime": "2022-02-25T15:33:07Z", "message": "All selected clusters are valid", "reason": "ClusterSelectionCompleted", "status": "True", "type": "ClustersSelected" }, { "lastTransitionTime": "2022-02-25T15:33:07Z", "message": "Completed validation", "reason": "ValidationCompleted", "status": "True", "type": "Validated" }, { "lastTransitionTime": "2022-02-25T15:34:07Z", "message": "Remediating non-compliant policies", "reason": "InProgress", "status": "True", "type": "Progressing" } ], "managedPoliciesContent": { "policy1-common-cluster-version-policy": "null", "policy2-common-nto-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"node-tuning-operator\",\"namespace\":\"openshift-cluster-node-tuning-operator\"}]", "policy3-common-ptp-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"ptp-operator-subscription\",\"namespace\":\"openshift-ptp\"}]", "policy4-common-sriov-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"sriov-network-operator-subscription\",\"namespace\":\"openshift-sriov-network-operator\"}]" }, "managedPoliciesForUpgrade": [ { "name": "policy1-common-cluster-version-policy", "namespace": "default" }, { "name": "policy2-common-nto-sub-policy", "namespace": "default" }, { "name": "policy3-common-ptp-sub-policy", "namespace": "default" }, { "name": "policy4-common-sriov-sub-policy", "namespace": "default" } ], "managedPoliciesNs": { "policy1-common-cluster-version-policy": "default", "policy2-common-nto-sub-policy": "default", "policy3-common-ptp-sub-policy": "default", "policy4-common-sriov-sub-policy": "default" }, "placementBindings": [ "cgu-policy1-common-cluster-version-policy", "cgu-policy2-common-nto-sub-policy", "cgu-policy3-common-ptp-sub-policy", "cgu-policy4-common-sriov-sub-policy" ], "placementRules": [ "cgu-policy1-common-cluster-version-policy", "cgu-policy2-common-nto-sub-policy", "cgu-policy3-common-ptp-sub-policy", "cgu-policy4-common-sriov-sub-policy" ], "remediationPlan": [ [ "spoke1", "spoke2" ], [ "spoke5", "spoke6" ] ], "status": { "currentBatch": 1, "currentBatchRemediationProgress": { "spoke1": { "policyIndex": 1, "state": "InProgress" }, "spoke2": { "policyIndex": 1, "state": "InProgress" } }, "currentBatchStartedAt": "2022-02-25T15:54:16Z", "startedAt": "2022-02-25T15:54:16Z" } }
- 1
- 현재 배치의 업데이트 진행 상황을 반영합니다. 이 명령을 다시 실행하여 진행 상황에 대한 업데이트된 정보를 수신합니다.
다음 명령을 실행하여 정책의 상태를 확인합니다.
oc get policies -A
출력 예
NAMESPACE NAME REMEDIATION ACTION COMPLIANCE STATE AGE spoke1 default.policy1-common-cluster-version-policy enforce Compliant 18m spoke1 default.policy2-common-nto-sub-policy enforce NonCompliant 18m spoke2 default.policy1-common-cluster-version-policy enforce Compliant 18m spoke2 default.policy2-common-nto-sub-policy enforce NonCompliant 18m spoke5 default.policy3-common-ptp-sub-policy inform NonCompliant 18m spoke5 default.policy4-common-sriov-sub-policy inform NonCompliant 18m spoke6 default.policy3-common-ptp-sub-policy inform NonCompliant 18m spoke6 default.policy4-common-sriov-sub-policy inform NonCompliant 18m default policy1-common-ptp-sub-policy inform Compliant 18m default policy2-common-sriov-sub-policy inform NonCompliant 18m default policy3-common-ptp-sub-policy inform NonCompliant 18m default policy4-common-sriov-sub-policy inform NonCompliant 18m
-
현재 배치의 클러스터에 적용되는 하위 정책을
적용하기
위한spec.remediationAction
값 변경 -
spec.remedationAction
값은 나머지 클러스터의 하위 정책에 대한정보를
유지합니다. -
배치가 완료되면
spec.remediationAction
값이 다시 변경되어 적용된 하위 정책을알립니다
.
-
현재 배치의 클러스터에 적용되는 하위 정책을
정책에 Operator 서브스크립션이 포함된 경우 단일 노드 클러스터에서 직접 설치 진행 상황을 확인할 수 있습니다.
다음 명령을 실행하여 설치 진행 상황을 확인할 단일 노드 클러스터의
KUBECONFIG
파일을 내보냅니다.$ export KUBECONFIG=<cluster_kubeconfig_absolute_path>
단일 노드 클러스터에 있는 모든 서브스크립션을 확인하고 다음 명령을 실행하여
ClusterGroupUpgrade
CR을 통해 설치하려는 정책에서 해당 서브스크립션을 찾습니다.$ oc get subs -A | grep -i <subscription_name>
cluster-logging
정책의 출력 예NAMESPACE NAME PACKAGE SOURCE CHANNEL openshift-logging cluster-logging cluster-logging redhat-operators stable
관리 정책 중 하나에
ClusterVersion
CR이 포함된 경우 spoke 클러스터에 대해 다음 명령을 실행하여 현재 일괄 처리에서 플랫폼 업데이트 상태를 확인합니다.$ oc get clusterversion
출력 예
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS version 4.4.17.5 True True 43s Working towards 4.4.17.7: 71 of 735 done (9% complete)
다음 명령을 실행하여 Operator 서브스크립션을 확인합니다.
$ oc get subs -n <operator-namespace> <operator-subscription> -ojsonpath="{.status}"
다음 명령을 실행하여 원하는 서브스크립션과 연결된 단일 노드 클러스터에 있는 설치 계획을 확인합니다.
$ oc get installplan -n <subscription_namespace>
cluster-logging
Operator의 출력 예NAMESPACE NAME CSV APPROVAL APPROVED openshift-logging install-6khtw cluster-logging.5.3.3-4 Manual true 1
- 1
- 설치 계획의
승인
필드가Manual
로 설정되고 TALM에서 설치 계획을 승인한 후승인
필드가false
에서true
로 변경됩니다.
참고TALM이 서브스크립션이 포함된 정책을 수정하면 해당 서브스크립션에 연결된 모든 설치 계획을 자동으로 승인합니다. Operator를 최신 알려진 버전으로 가져오기 위해 여러 설치 계획이 필요한 경우 TALM은 여러 설치 계획을 승인하여 하나 이상의 중간 버전을 통해 최종 버전으로 업그레이드할 수 있습니다.
다음 명령을 실행하여
ClusterGroupUpgrade
가Succeeded
단계에 도달한 정책의 Operator의 클러스터 서비스 버전이 있는지 확인합니다.$ oc get csv -n <operator_namespace>
OpenShift Logging Operator의 출력 예
NAME DISPLAY VERSION REPLACES PHASE cluster-logging.5.4.2 Red Hat OpenShift Logging 5.4.2 Succeeded