19.17. GitOps ZTP 故障排除


如前文所述,ArgoCD 管道会将 SiteConfigPolicyGenTemplate 自定义资源 (CR) 从 Git 存储库同步到 hub 集群。在此过程中,同步后 hook 会创建也会应用到 hub 集群的安装和策略 CR。使用以下步骤排除在此过程中可能出现的问题。

19.17.1. 验证安装 CR 的生成

SiteConfig 将安装自定义资源 (CR) 应用到名称与站点名称匹配的命名空间中的 hub 集群。要检查状态,请输入以下命令:

$ oc get AgentClusterInstall -n <cluster_name>

如果没有返回对象,请使用以下步骤对 SiteConfig 到安装 CR 的 ArgoCD 管道流进行故障排除。

流程

  1. 使用以下命令之一检查 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 应用程序中预同步作业的状态。
  2. 验证 post hook 作业是否运行:

    $ oc describe job -n clusters-sub siteconfig-post
    • 如果成功,返回的输出表示 succeeded: 1
    • 如果作业失败,ArgoCD 会重试它。在某些情况下,第一次通过将失败,第二次通过将指示作业通过。
  3. 检查 post hook 任务中的错误:

    $ oc get pod -n clusters-sub

    请注意 siteconfig-post-xxxxx pod 的名称:

    $ oc logs -n clusters-sub siteconfig-post-xxxxx

    如果日志指出错误,请更正条件,并将更正的 SiteConfigPolicyGenTemplate 推送到 Git 存储库。

19.17.2. 验证策略 CR 的生成

ArgoCD 在与创建它们的 PolicyGenTemplate 相同的命名空间中生成策略自定义资源 (CR)。相同的故障排除流程适用于从 PolicyGenTemplates 生成的所有策略 CR,无论它们是通用、组还是站点。

要检查策略 CR 的状态,请输入以下命令:

$ export NS=<namespace>
$ oc get policy -n $NS

返回的输出会显示预期的策略打包 CR 集合。如果没有返回对象,请使用以下步骤对 SiteConfig 到策略 CR 的 ArgoCD 管道流进行故障排除。

流程

  1. 检查 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 应用程序中预同步作业的状态。
  2. 确保策略已复制到集群命名空间中。当 ACM 识别策略应用到 ManagedCluster 时,ACM 将策略 CR 对象应用到集群命名空间:

    $ oc get policy -n <cluster_name>

    ACM 在此处复制所有适用的通用、组和站点策略。策略名称为 <policyNamespace><policyName>

  3. 检查放置规则中是否有没有复制到集群命名空间中的策略。这些策略的 PlacementRule 中的 matchSelector 应该与 ManagedCluster 上的标签匹配:

    $ oc get placementrule -n $NS
  4. 记录缺少的 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>

  5. 确保所有策略都合规:

     oc get policy -n $CLUSTER

    如果 Namespace、OperatorGroup 和 Subscription 策略兼容,但 Operator 配置策略不兼容,则 operator 可能不会安装。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.