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-xxxxxpod 的名称:$ 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 可能不会安装。