18.9. 对 Topology Aware Lifecycle Manager 进行故障排除
Topology Aware Lifecycle Manager(TALM)是一个 OpenShift Container Platform Operator,用于修复 RHACM 策略。出现问题时,使用 oc adm must-gather
命令来收集详情和日志,并采取调试问题的步骤。
有关相关主题的更多信息,请参阅以下文档:
18.9.1. 常规故障排除
您可以通过查看以下问题来确定问题的原因:
您要应用的配置是否被支持?
- RHACM 和 OpenShift Container Platform 版本是否兼容?
- TALM 和 RHACM 版本是否兼容?
以下哪个组件导致了此问题?
为确保 ClusterGroupUpgrade
配置可以正常工作,您可以执行以下操作:
-
创建
ClusterGroupUpgrade
CR,并将spec.enable
字段设置为false
。 - 等待状态更新,再完成故障排除问题。
-
如果所有内容都如预期,在
ClusterGroupUpgrade
CR 中将spec.enable
字段设置为true
。
在 ClusterUpgradeGroup
CR 中将 spec.enable
字段设置为 true
后,更新过程会启动,您无法再编辑 CR 的 spec
字段。
18.9.2. 无法修改 ClusterUpgradeGroup CR
- 问题
-
在启用更新后,您无法编辑
ClusterUpgradeGroup
CR。 - 解决方案
通过执行以下步骤来重启操作:
运行以下命令删除旧
ClusterGroupUpgrade
CR:$ oc delete cgu -n <ClusterGroupUpgradeCR_namespace> <ClusterGroupUpgradeCR_name>
检查并修复受管集群和策略的现有问题。
- 确保所有集群都是受管集群并可用。
-
确保所有策略都存在,并将
spec.remediationAction
字段设置为inform
。
使用正确的配置创建一个新的
ClusterGroupUpgrade
CR。$ oc apply -f <ClusterGroupUpgradeCR_YAML>
18.9.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 模式
- 问题
-
您要检查在受管策略的
spec
中是否将remediationAction
字段设置为inform
。 - 解决方案
运行以下命令:
$ 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
18.9.4. Clusters
检查是否有受管集群
- 问题
-
您需要检查
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 manager 日志:
运行以下命令,获取 TALM Manager 的名称:
$ oc get pod -n openshift-operators
输出示例
NAME READY STATUS RESTARTS AGE cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp 2/2 Running 0 45m
运行以下命令检查 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 中指定的受管集群是否可用。 - 解决方案
运行以下命令:
$ 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
检查 clusterSelector
- 问题
-
您需要检查
clusterSelector
字段是否至少在ClusterGroupUpgrade
CR 中指定。 - 解决方案
运行以下命令:
$ 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
检查是否有 canary 集群
- 问题
您要检查集群列表中是否存在 Canary 集群。
ClusterGroupUpgrade
CR 示例spec: clusters: - spoke1 - spoke3 clusterSelector: - upgrade2=true remediationStrategy: canaries: - spoke3 maxConcurrency: 2 timeout: 240
- 解决方案
运行以下命令:
$ oc get cgu lab-upgrade -ojsonpath='{.spec.clusters}'
输出示例
["spoke1", "spoke3"]
运行以下命令,检查与
clusterSelector
标签匹配的集群列表中是否存在 canary 集群:$ 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.clusterSelecter
标签匹配。
检查 spoke 集群上的预缓存状态
在 spoke 集群中运行以下命令来检查预缓存的状态:
$ oc get jobs,pods -n openshift-talo-pre-cache
18.9.5. 补救策略
检查 ClusterGroupUpgrade CR 中是否存在 remediationStrategy
- 问题
-
您需要检查
ClusterGroupUpgrade
CR 是否存在remediationStrategy
。 - 解决方案
运行以下命令:
$ oc get cgu lab-upgrade -ojsonpath='{.spec.remediationStrategy}'
输出示例
{"maxConcurrency":2, "timeout":240}
检查 ClusterGroupUpgrade CR 中是否指定了 maxConcurrency
- 问题
-
您需要检查是否在
ClusterGroupUpgrade
CR 中指定maxConcurrency
。 - 解决方案
运行以下命令:
$ oc get cgu lab-upgrade -ojsonpath='{.spec.remediationStrategy.maxConcurrency}'
输出示例
2
18.9.6. Topology Aware Lifecycle Manager
检查 ClusterGroupUpgrade CR 中的条件消息和状态
- 问题
-
您要检查
ClusterGroupUpgrade
CR 中的status.conditions
字段的值。 - 解决方案
运行以下命令:
$ oc get cgu lab-upgrade -ojsonpath='{.status.conditions}'
输出示例
{"lastTransitionTime":"2022-02-17T22:25:28Z", "message":"The ClusterGroupUpgrade CR has managed policies that are missing:[policyThatDoesntExist]", "reason":"UpgradeCannotStart", "status":"False", "type":"Ready"}
检查对应的复制策略
- 问题
-
您需要检查
status.managedPoliciesForUpgrade
的每个策略是否具有status.copiedPolicies
对应的策略。 - 解决方案
运行以下命令:
$ oc get cgu lab-upgrade -oyaml
输出示例
status: … copiedPolicies: - lab-upgrade-policy3-common-ptp-sub-policy managedPoliciesForUpgrade: - name: policy3-common-ptp-sub-policy namespace: default
检查 status.remediationPlan 是否已计算
- 问题
-
您需要检查
status.remediationPlan
是否被计算。 - 解决方案
运行以下命令:
$ oc get cgu lab-upgrade -ojsonpath='{.status.remediationPlan}'
输出示例
[["spoke2", "spoke3"]]
TALM manager 容器中的错误
- 问题
- 您要检查 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
- 显示错误。
其他资源
- 有关故障排除的详情,请参阅 OpenShift Container Platform 故障排除 Operator 问题。
- 有关在 ZTP 工作流中使用 Topology Aware Lifecycle Manager 的更多信息,请参阅使用 Topology Aware Lifecycle Manager 更新受管策略。
-
如需有关
PolicyGenTemplate
CRD 的更多信息,请参阅关于 PolicyGenTemplate CRD