19.17. GitOps ZTP 故障排除
如前文所述,ArgoCD 管道会将 SiteConfig
和 PolicyGenTemplate
自定义资源 (CR) 从 Git 存储库同步到 hub 集群。在此过程中,同步后 hook 会创建也会应用到 hub 集群的安装和策略 CR。使用以下步骤排除在此过程中可能出现的问题。
19.17.1. 验证安装 CR 的生成
SiteConfig
将安装自定义资源 (CR) 应用到名称与站点名称匹配的命名空间中的 hub 集群。要检查状态,请输入以下命令:
$ oc get AgentClusterInstall -n <cluster_name>
如果没有返回对象,请使用以下步骤对 SiteConfig
到安装 CR 的 ArgoCD 管道流进行故障排除。
流程
使用以下命令之一检查
SiteConfig
到 hub 集群的同步:$ oc get siteconfig -A
或者
$ oc get siteconfig -n clusters-sub
如果缺少
SiteConfig
,则出现以下情况之一:clusters 应用程序无法将 CR 从 Git 存储库同步到 hub。使用以下命令验证以下内容:
$ oc describe -n openshift-gitops application clusters
检查
Status: Synced
并且Revision:
是推送到订阅的存储库的提交的 SHA。- 预同步 hook 失败,可能是因为拉取容器镜像失败。检查 ArgoCD 仪表板,了解 clusters 应用程序中预同步作业的状态。
验证 post hook 作业是否运行:
$ oc describe job -n clusters-sub siteconfig-post
-
如果成功,返回的输出表示
succeeded: 1
。 - 如果作业失败,ArgoCD 会重试它。在某些情况下,第一次通过将失败,第二次通过将指示作业通过。
-
如果成功,返回的输出表示
检查 post hook 任务中的错误:
$ oc get pod -n clusters-sub
请注意
siteconfig-post-xxxxx
pod 的名称:$ oc logs -n clusters-sub siteconfig-post-xxxxx
如果日志指出错误,请更正条件,并将更正的
SiteConfig
或PolicyGenTemplate
推送到 Git 存储库。
19.17.2. 验证策略 CR 的生成
ArgoCD 在与创建它们的 PolicyGenTemplate
相同的命名空间中生成策略自定义资源 (CR)。相同的故障排除流程适用于从 PolicyGenTemplates
生成的所有策略 CR,无论它们是通用、组还是站点。
要检查策略 CR 的状态,请输入以下命令:
$ export NS=<namespace>
$ oc get policy -n $NS
返回的输出会显示预期的策略打包 CR 集合。如果没有返回对象,请使用以下步骤对 SiteConfig
到策略 CR 的 ArgoCD 管道流进行故障排除。
流程
检查
PolicyGenTemplate
到 hub 集群的同步:$ oc get policygentemplate -A
或者
$ oc get policygentemplate -n $NS
如果没有同步
PolicyGenTemplate
,会出现以下情况之一:集群应用程序无法将 CR 从 Git 存储库同步到 hub。使用以下命令验证以下内容:
$ oc describe -n openshift-gitops application clusters
检查
Status: Synced
并且Revision:
是推送到订阅的存储库的提交的 SHA。- 预同步 hook 失败,可能是因为拉取容器镜像失败。检查 ArgoCD 仪表板,了解 clusters 应用程序中预同步作业的状态。
确保策略已复制到集群命名空间中。当 ACM 识别策略应用到
ManagedCluster
时,ACM 将策略 CR 对象应用到集群命名空间:$ oc get policy -n <cluster_name>
ACM 在此处复制所有适用的通用、组和站点策略。策略名称为
<policyNamespace>
和<policyName>
。检查放置规则中是否有没有复制到集群命名空间中的策略。这些策略的
PlacementRule
中的matchSelector
应该与ManagedCluster
上的标签匹配:$ oc get placementrule -n $NS
记录缺少的 common、group 或 site 策略的
PlacementRule
名称:oc get placementrule -n $NS <placmentRuleName> -o yaml
-
status decisions
值应包含您的集群名称。 spec 中
matchSelector
的键值
应与受管集群上的标签匹配。检查ManagedCluster
上的标签:oc get ManagedCluster $CLUSTER -o jsonpath='{.metadata.labels}' | jq
示例
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: group-test1-policies-placementrules namespace: group-test1-policies spec: clusterSelector: matchExpressions: - key: group-test1 operator: In values: - "" status: decisions: - clusterName: <cluster_name> clusterNamespace: <cluster_name>
-
确保所有策略都合规:
oc get policy -n $CLUSTER
如果 Namespace、OperatorGroup 和 Subscription 策略兼容,但 Operator 配置策略不兼容,则 operator 可能不会安装。