监控 RootSync 和 RepoSync 对象

本页介绍了监控 RootSyncRepoSync 对象的不同方法。例如,您可能想要验证可信来源中的最新提交是否已应用于集群并已成功协调。

查看已同步的提交

您可以通过检查 RootSyncRepoSync 对象中的 .status.sync 字段来检查哪个提交内容已同步到集群。

  • 如需查看 RootSync 对象的已同步提交,请运行以下命令:

    kubectl get rootsync ROOT_SYNC_NAME -n config-management-system
    

    ROOT_SYNC_NAME 替换为 RootSync 对象的名称。

  • 如需查看 RepoSync 对象的同步提交,请运行以下命令:

    kubectl get reposync REPO_SYNC_NAME -n REPO_SYNC_NAMESPACE
    

    替换以下内容:

    • REPO_SYNC_NAMERepoSync 对象的名称。
    • REPO_SYNC_NAMESPACE:您在其中创建了命名空间代码库的命名空间。

这些命令的输出会显示来源提交的值和同步提交。例如,如果您运行了 RepoSync 的命令,则会看到类似于以下内容的输出:

NAME        RENDERINGCOMMIT                            SOURCECOMMIT                               SYNCCOMMIT
root-sync   66882815f0ef5517df27e864fb1315e97756ab72   66882815f0ef5517df27e864fb1315e97756ab72   66882815f0ef5517df27e864fb1315e97756ab72

RENDERINGCOMMIT 列中的值是 hydration-controller 处理的提交。如果不需要渲染,则该值与 SOURCECOMMIT 列相同。SOURCECOMMIT 列中的值是应同步到集群的可靠来源的提交内容。SYNCCOMMIT 列中的值是当前部署到集群的提交。如果 SOURCECOMMITSYNCCOMMIT 列中的两个值相同,则预期提交已部署到集群。

确认提交中的资源已协调

由于 ResourceGroup 会捕获可信来源中声明的托管资源的协调状态,因此,您可以检查它们以确认提交中的资源是否已协调。

ResourceGroup 对象与 RootSyncRepoSync 对象具有相同的命名空间和名称。例如,对于命名空间 config-management-system 中名为 root-syncRootSync 对象,相应的 ResourceGroup 对象也是命名空间 config-management-system 中的 root-sync

  • 如需获取 RootSync 对象的 ResourceGroup 对象,请执行以下操作:

    kubectl get resourcegroup ROOT_SYNC_NAME -n config-management-system -o yaml
    
  • 如需获取 RepoSync 对象的 ResourceGroup 对象,请执行以下操作:

    kubectl get resourcegroup REPO_SYNC_NAME -n REPO_SYNC_NAMESPACE -o yaml
    

    替换以下内容:

    • ROOT_SYNC_NAME:您要查找的 ResourceGroup 对象的名称。
    • REPO_SYNC_NAME:您要查找的 ResourceGroup 对象的名称。
    • REPO_SYNC_NAMESPACE:您要查找的 ResourceGroup 对象的名称。

如需确认提交中的资源已协调,请在输出中查找以下内容:

  • .status.observedGeneration 等于 ResourceGroup 对象中 .metadata.generation 字段的值。
  • Stalled 条件和 Reconciling 条件都将 status 设置为 "False"
  • .status.resourceStatuses 字段中的每个项目的状态都是 Current

查看错误

RootSyncRepoSync 对象使用 status 字段跟踪将配置从可信来源同步到集群时遇到的错误。

  • 如需查看 RootSync 对象的状态,请运行以下命令:

    kubectl get rootsync ROOT_SYNC_NAME -n config-management-system -o yaml
    

    ROOT_SYNC_NAME 替换为 RootSync 对象的名称。

  • 如需查看 RepoSync 对象的状态,请运行以下命令:

    kubectl get reposync REPO_SYNC_NAME -n NAMESPACE -o yaml
    

    替换以下内容:

    • REPO_SYNC_NAMERepoSync 对象的名称。
    • NAMESPACE:您在其中创建了命名空间代码库的命名空间。

如需详细了解 status 字段下的子字段,请参阅对象的状态

查看对象详情

如需查看 RootSyncRepoSync 对象的详细信息,并发现有关潜在错误的更多信息,请使用 kubectl describe 命令。

此命令的输出包含事件,这些事件对于调试面临内存限制 (OOMKilled)、调度失败或映像拉取错误等问题特别有用。

为了提高可读性,请将 -o yaml 附加到以下命令,将输出转换为 YAML。在需要检查特定参数、注解或资源规范时,此格式特别有用。

  • 如需查看 RootSync 对象的详细信息,请运行以下命令:

    kubectl describe rootsync ROOT_SYNC_NAME -n config-management-system
    

    ROOT_SYNC_NAME 替换为 RootSync 对象的名称。

  • 如需查看 RepoSync 对象的详细信息,请运行以下命令:

    kubectl describe reposync REPO_SYNC_NAME -n NAMESPACE
    

    替换以下内容:

    • REPO_SYNC_NAMERepoSync 对象的名称。
    • NAMESPACE:您在其中创建了命名空间代码库的命名空间。

查看资源是否准备就绪

如需了解同步到集群的资源是否准备就绪,请查看协调状态。例如,如果您查看协调状态,则系统可以显示同步的 Deployment 是否已准备好处理流量。

对于同步到集群的可靠来源,所有资源的协调状态会汇总到一个名为 ResourceGroup 的资源中。对于每个 RootSyncRepoSync 对象,系统会生成一个 ResourceGroup 来捕获应用于集群的资源集并汇总其状态。

  • 如需查看 RootSync 对象的协调状态,请运行以下命令:

    kubectl get resourcegroup.kpt.dev ROOT_SYNC_NAME -n config-management-system -o yaml
    

    ROOT_SYNC_NAME 替换为 RootSync 对象的名称。

  • 如需查看 RepoSync 对象的协调状态,请运行以下命令:

    kubectl get resourcegroup.kpt.dev REPO_SYNC_NAME -n NAMESPACE -o yaml
    

    替换以下内容:

    • REPO_SYNC_NAMERepoSync 对象的名称。
    • NAMESPACE:您在其中创建了命名空间代码库的命名空间。

在输出中,您会看到所有 ResourceGroup 资源状态。例如,以下输出显示名为 nginx-deployment 的 Deployment 已准备就绪:

resourceStatuses:
- group: apps
  kind: Deployment
  name: nginx-deployment
  namespace: default
  status: Current

查看日志

对于您创建的每个 RootSyncRepoSync 对象,Config Sync 都会创建一个协调器 Deployment 以执行同步。本部分介绍了如何查看这些协调器的日志。除了 RootSyncRepoSync 对象状态中提供的信息之外,查看日志可以提供有关进度、警告和错误的更多信息,从而帮助您调试问题。

  • 如需查看 RootSyncRepoSync 协调器的日志,请运行以下命令:

    kubectl logs -n config-management-system deployment/RECONCILER_NAME CONTAINER_NAME
    

    替换以下内容:

    • RECONCILER_NAMERootSyncRepoSync 对象的协调器名称。

      • 对于 RootSync,协调器名称为 root-reconciler-ROOT_SYNC_NAMEroot-reconciler(如果 RootSync 的名称为 root-sync)。

      • 对于 RepoSync,如果 RepoSync 的名称为 repo-sync,则协调器名称为 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTHns-reconciler-NAMESPACE,其中 NAMESPACE 是您在其中创建了 RepoSync 对象的命名空间。

    • CONTAINER_NAME:容器名称必须是以下值之一:reconcilergit-synchydration-controlleroci-synchelm-sync。如需详细了解这些容器,请参阅协调器容器

配置 RootSync 或 RepoSync 协调器日志级别

如需在容器日志中包含更多信息,请配置日志详细程度。默认情况下,大多数容器的日志详尽程度的默认值都是 0。例外情况是默认值为 5git-syncotel-agent 容器。

更改日志详细程度时,请注意,由于记录的数据量较大,因此日志详细程度会增加日志记录费用。

如需更改日志详细程度,请使用 .spec.override.logLevels 字段,如以下示例所示:

apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
  name: root-sync
  namespace: config-management-system
spec:
  override:
    logLevels:
    - containerName: "reconciler"
      logLevel: 0
    - containerName: "git-sync"
       logLevel: 10

containerName 字段中的值必须是以下值之一:reconcilergit-synchydration-controlleroci-synchelm-sync

如需确认已配置日志详细程度,请运行以下命令:

kubectl get deployment.apps/root-reconciler -n config-management-system -o yaml

日志详细程度可通过 spec.template.spec.containers[] 内的 args 之一找到,其形式类似于 -v=0,其中 0 是当前的日志详细程度。在此示例中,日志详细程度值为 0 时,将仅记录关键事件。