12.8. 토폴로지 인식 라이프사이클 관리자 문제 해결
Topology Aware Lifecycle Manager (TALM)는 RHACM 정책을 수정하는 OpenShift Container Platform Operator입니다. 문제가 발생하면 oc adm must-gather
명령을 사용하여 세부 정보 및 로그를 수집하고 문제를 디버깅하는 단계를 수행합니다.
관련 항목에 대한 자세한 내용은 다음 설명서를 참조하십시오.
- Red Hat Advanced Cluster Management for Kubernetes 2.4 지원 매트릭스
- Red Hat Advanced Cluster Management 문제 해결
- "Troubleshooting Operator 문제" 섹션
12.8.1. 일반 문제 해결
다음 질문을 검토하여 문제의 원인을 확인할 수 있습니다.
적용 중인 구성이 지원됩니까?
- RHACM 및 OpenShift Container Platform 버전이 호환됩니까?
- TALM 및 RHACM 버전이 호환됩니까?
다음 중 문제를 유발하는 구성 요소는 무엇입니까?
ClusterGroupUpgrade
구성이 작동하는지 확인하려면 다음을 수행할 수 있습니다.
-
spec.enable
필드가false
로 설정된ClusterGroupUpgrade
CR을 생성합니다. - 상태가 업데이트될 때까지 기다린 후 문제 해결 질문을 진행합니다.
-
모든 항목이 예상대로 표시되면
ClusterGroupUpgrade
CR에서spec.enable
필드를true
로 설정합니다.
ClusterUpgradeGroup
CR에서 spec.enable
필드를 true
로 설정한 후에는 업데이트 절차가 시작되고 CR의 spec
필드를 더 이상 편집할 수 없습니다.
12.8.2. ClusterUpgradeGroup CR을 수정할 수 없음
- 문제
-
업데이트를 활성화한 후에는
ClusterUpgradeGroup
CR을 편집할 수 없습니다. - 해결
다음 단계를 수행하여 절차를 다시 시작합니다.
다음 명령을 실행하여 이전
ClusterGroupUpgrade
CR을 제거합니다.$ oc delete cgu -n <ClusterGroupUpgradeCR_namespace> <ClusterGroupUpgradeCR_name>
관리 클러스터 및 정책의 기존 문제를 확인하고 수정합니다.
- 모든 클러스터가 관리 클러스터이고 사용 가능한지 확인합니다.
-
모든 정책이 존재하고
spec.remediationAction
필드가 설정되어 있는지확인합니다
.
올바른 구성으로 새
ClusterGroupUpgrade
CR을 생성합니다.$ oc apply -f <ClusterGroupUpgradeCR_YAML>
12.8.3. 관리형 정책
시스템에서 관리되는 정책 확인
- 문제
- 시스템에 올바른 관리 정책이 있는지 확인하려고 합니다.
- 해결
다음 명령을 실행합니다.
$ oc get cgu lab-upgrade -ojsonpath='{.spec.managedPolicies}'
출력 예
["group-du-sno-validator-du-validator-policy", "policy2-common-nto-sub-policy", "policy3-common-ptp-sub-policy"]
수정 모드 확인
- 문제
-
관리 정책의 사양에
알리
도록remediationAction
필드가 설정되어 있는지 확인하려고 합니다. - 해결
다음 명령을 실행합니다.
$ oc get policies --all-namespaces
출력 예
NAMESPACE NAME REMEDIATION ACTION COMPLIANCE STATE AGE default policy1-common-cluster-version-policy inform NonCompliant 5d21h default policy2-common-nto-sub-policy inform Compliant 5d21h default policy3-common-ptp-sub-policy inform NonCompliant 5d21h default policy4-common-sriov-sub-policy inform NonCompliant 5d21h
정책 규정 준수 상태 확인
- 문제
- 정책의 규정 준수 상태를 확인하려고 합니다.
- 해결
다음 명령을 실행합니다.
$ oc get policies --all-namespaces
출력 예
NAMESPACE NAME REMEDIATION ACTION COMPLIANCE STATE AGE default policy1-common-cluster-version-policy inform NonCompliant 5d21h default policy2-common-nto-sub-policy inform Compliant 5d21h default policy3-common-ptp-sub-policy inform NonCompliant 5d21h default policy4-common-sriov-sub-policy inform NonCompliant 5d21h
12.8.4. 클러스터
관리 클러스터가 있는지 확인
- 문제
-
ClusterGroupUpgrade
CR의 클러스터가 관리 클러스터인지 확인하려고 합니다. - 해결
다음 명령을 실행합니다.
$ oc get managedclusters
출력 예
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE local-cluster true https://api.hub.example.com:6443 True Unknown 13d spoke1 true https://api.spoke1.example.com:6443 True True 13d spoke3 true https://api.spoke3.example.com:6443 True True 27h
또는 TALM 관리자 로그를 확인합니다.
다음 명령을 실행하여 TALM 관리자의 이름을 가져옵니다.
$ oc get pod -n openshift-operators
출력 예
NAME READY STATUS RESTARTS AGE cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp 2/2 Running 0 45m
다음 명령을 실행하여 TALM 관리자 로그를 확인합니다.
$ oc logs -n openshift-operators \ cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp -c manager
출력 예
ERROR controller-runtime.manager.controller.clustergroupupgrade Reconciler error {"reconciler group": "ran.openshift.io", "reconciler kind": "ClusterGroupUpgrade", "name": "lab-upgrade", "namespace": "default", "error": "Cluster spoke5555 is not a ManagedCluster"} 1 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
- 1
- 오류 메시지는 클러스터가 관리 클러스터가 아님을 나타냅니다.
관리 클러스터를 사용할 수 있는지 확인
- 문제
-
ClusterGroupUpgrade
CR에 지정된 관리 클러스터를 사용할 수 있는지 확인하려고 합니다. - 해결
다음 명령을 실행합니다.
$ oc get managedclusters
출력 예
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE local-cluster true https://api.hub.testlab.com:6443 True Unknown 13d spoke1 true https://api.spoke1.testlab.com:6443 True True 13d 1 spoke3 true https://api.spoke3.testlab.com:6443 True True 27h 2
clusterLabelSelector 확인
- 문제
-
ClusterGroupUpgrade
CR에 지정된clusterLabelSelector
필드가 관리 클러스터 중 하나와 일치하는지 확인해야 합니다. - 해결
다음 명령을 실행합니다.
$ oc get managedcluster --selector=upgrade=true 1
- 1
- 업데이트하려는 클러스터의 레이블은
upgrade:true
입니다.
출력 예
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE spoke1 true https://api.spoke1.testlab.com:6443 True True 13d spoke3 true https://api.spoke3.testlab.com:6443 True True 27h
카나리아 클러스터가 있는지 확인
- 문제
카나리아 클러스터가 클러스터 목록에 있는지 확인하려고 합니다.
ClusterGroupUpgrade
CR의 예spec: remediationStrategy: canaries: - spoke3 maxConcurrency: 2 timeout: 240 clusterLabelSelectors: - matchLabels: upgrade: true
- 해결
다음 명령을 실행합니다.
$ oc get cgu lab-upgrade -ojsonpath='{.spec.clusters}'
출력 예
["spoke1", "spoke3"]
다음 명령을 실행하여 카나리아 클러스터가
clusterLabelSelector
라벨과 일치하는 클러스터 목록에 있는지 확인합니다.$ oc get managedcluster --selector=upgrade=true
출력 예
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE spoke1 true https://api.spoke1.testlab.com:6443 True True 13d spoke3 true https://api.spoke3.testlab.com:6443 True True 27h
클러스터는 spec.clusters
에 존재할 수 있으며 spec.clusterLabelSelector
라벨과 일치할 수도 있습니다.
spoke 클러스터에서 사전 캐싱 상태 확인
spoke 클러스터에서 다음 명령을 실행하여 사전 캐싱 상태를 확인합니다.
$ oc get jobs,pods -n openshift-talo-pre-cache
12.8.5. 수정 전략
ClusterGroupUpgrade CR에 remediationStrategy가 있는지 확인
- 문제
-
remediationStrategy
가ClusterGroupUpgrade
CR에 있는지 확인하려고 합니다. - 해결
다음 명령을 실행합니다.
$ oc get cgu lab-upgrade -ojsonpath='{.spec.remediationStrategy}'
출력 예
{"maxConcurrency":2, "timeout":240}
ClusterGroupUpgrade CR에 maxConcurrency가 지정되었는지 확인
- 문제
-
maxConcurrency
가ClusterGroupUpgrade
CR에 지정되어 있는지 확인하려고 합니다. - 해결
다음 명령을 실행합니다.
$ oc get cgu lab-upgrade -ojsonpath='{.spec.remediationStrategy.maxConcurrency}'
출력 예
2
12.8.6. 토폴로지 인식 라이프사이클 관리자
ClusterGroupUpgrade CR에서 조건 메시지 및 상태 확인
- 문제
-
ClusterGroupUpgrade
CR에서status.conditions
필드의 값을 확인하려고 합니다. - 해결
다음 명령을 실행합니다.
$ oc get cgu lab-upgrade -ojsonpath='{.status.conditions}'
출력 예
{"lastTransitionTime":"2022-02-17T22:25:28Z", "message":"Missing managed policies:[policyList]", "reason":"NotAllManagedPoliciesExist", "status":"False", "type":"Validated"}
status.remediationPlan이 계산되었는지 확인
- 문제
-
status.remediationPlan
이 계산되었는지 확인하려고 합니다. - 해결
다음 명령을 실행합니다.
$ oc get cgu lab-upgrade -ojsonpath='{.status.remediationPlan}'
출력 예
[["spoke2", "spoke3"]]
TALM 관리자 컨테이너의 오류
- 문제
- TALM의 manager 컨테이너의 로그를 확인하려고 합니다.
- 해결
다음 명령을 실행합니다.
$ oc logs -n openshift-operators \ cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp -c manager
출력 예
ERROR controller-runtime.manager.controller.clustergroupupgrade Reconciler error {"reconciler group": "ran.openshift.io", "reconciler kind": "ClusterGroupUpgrade", "name": "lab-upgrade", "namespace": "default", "error": "Cluster spoke5555 is not a ManagedCluster"} 1 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
- 1
- 오류를 표시합니다.
ClusterGroupUpgrade
CR이 완료된 후 일부 정책을 준수하지 않는 클러스터
- 문제
TALM이 사용하는 정책 준수 상태는 모든 클러스터에 대해 수정이 아직 완전히 업데이트되지 않았는지 여부를 결정하는 데 사용합니다. 그 이유는 다음과 같습니다.
- 정책을 만들거나 업데이트한 후 CGU가 너무 빨리 실행되었습니다.
-
정책을 수정하면
ClusterGroupUpgrade
CR의 후속 정책 준수에 영향을 미칩니다.
- 해결
-
동일한 사양으로 새
ClusterGroupUpdate
CR을 생성하고 적용합니다.
GitOps ZTP 워크플로의 자동 생성된 ClusterGroupUpgrade
CR에는 관리 정책이 없습니다.
- 문제
-
클러스터가
Ready
가 될 때 관리 클러스터에 대한 정책이 없는 경우 정책이 자동으로 생성되지 않은ClusterGroupUpgrade
CR이 있습니다.ClusterGroupUpgrade
CR이 완료되면 관리 클러스터에ztp-done
이라는 레이블이 지정됩니다.SiteConfig
리소스를 푸시한 후 필요한 시간 내에PolicyGenerator
또는PolicyGenTemplate
CR이 Git 리포지토리로 푸시되지 않은 경우 클러스터가준비
될 때 대상 클러스터에 정책을 사용할 수 없게 될 수 있습니다. - 해결
-
적용할 정책을 hub 클러스터에서 사용할 수 있는지 확인한 다음 필요한 정책을 사용하여
ClusterGroupUpgrade
CR을 생성합니다.
ClusterGroupUpgrade
CR을 수동으로 생성하거나 자동 생성을 다시 트리거할 수 있습니다. ClusterGroupUpgrade
CR의 자동 생성을 트리거하려면 클러스터에서 ztp-done
레이블을 제거하고 zip-install
네임스페이스에서 이전에 생성된 비어 있는 ClusterGroupUpgrade
CR을 삭제합니다.
사전 캐싱 실패
- 문제
다음 이유 중 하나로 인해 사전 캐싱이 실패할 수 있습니다.
- 노드에 사용 가능한 공간이 충분하지 않습니다.
- 연결이 끊긴 환경의 경우 사전 캐시 이미지가 올바르게 미러링되지 않았습니다.
- Pod를 생성할 때 문제가 발생했습니다.
- 해결
공간이 부족하여 사전 캐싱이 실패했는지 확인하려면 노드에서 사전 캐싱 Pod의 로그를 확인합니다.
다음 명령을 사용하여 Pod 이름을 찾습니다.
$ oc get pods -n openshift-talo-pre-cache
다음 명령을 사용하여 로그에서 오류가 충분하지 않은 공간과 관련이 있는지 확인합니다.
$ oc logs -n openshift-talo-pre-cache <pod name>
로그가 없는 경우 다음 명령을 사용하여 Pod 상태를 확인합니다.
$ oc describe pod -n openshift-talo-pre-cache <pod name>
Pod가 없는 경우 작업 상태를 확인하여 다음 명령을 사용하여 Pod를 생성할 수 없는 이유를 확인합니다.
$ oc describe job -n openshift-talo-pre-cache pre-cache