Config Sync 已知问题

本页面列出了受支持的 Config Sync 版本的已知问题。

此处列出的许多问题都已修复。已修复的版本列指出引入了修复的版本。如需收到此修复,请升级到列出的版本或更高版本。

如果您是 Google 开发者计划的成员,请保存此页面,以便在发布与此页面相关的版本说明时收到通知。如需了解详情,请参阅已保存的页面

如需按产品版本或问题类别过滤已知问题,请从以下下拉菜单中选择过滤条件。

选择 Config Sync 版本:

选择问题类别:

或者,过滤已知问题:

类别 已识别的版本 已修复的版本 问题和解决方法
指标 1.5.0 1.21.0

已修复:针对已删除的软件包报告了指标

如果您删除了 RootSyncRepoSync 对象,但未删除同名的 ResourceGroup 对象,Config Sync 会继续报告该 ResourceGroup 对象的以下指标:

  • rg_reconcile_duration_seconds
  • resource_group_total
  • resource_count
  • ready_resource_count
  • resource_ns_count
  • cluster_scoped_resource_count
  • crd_count
  • kcc_resource_count
  • pipeline_error_observed
只有在删除 RootSyncRepoSync 对象之前启用了删除传播,系统才会自动删除 ResourceGroup 对象。

临时解决方法:

删除 ResourceGroup 对象:

kubectl delete resourcegroup RESOURCE_GROUP_NAME -n config-management-system

RESOURCE_GROUP_NAME 替换为需要删除的 ResourceGroup 对象的名称。如需详细了解 ResourceGroup 命名,请查看 ResourceGroup 控制器和 ResourceGroup 对象

组件健康状况 1.15.0

协调器无法调度

Config Sync 协调器需要不同数量的资源,具体取决于 RootSync 或 RepoSync 的配置。某些配置需要的资源比其他配置多。

如果协调器无法调度,则可能是因为请求的资源多于节点上的可用资源。

如果您使用的是 Standard 模式 GKE 集群,则协调器资源请求会设置得非常低。选择此设置是为了允许进行调度(即使这会导致节流和性能下降),以便 Config Sync 可在小型集群和小型节点上运行。但是,在 GKE Autopilot 集群上,协调器请求设置得较高,以更实际地表示同步时的使用情况。

临时解决方法:

启用了节点自动预配的 GKE Autopilot 或 GKE Standard 应该能够查看请求了多少资源,并创建适当大小的节点以允许进行调度。但是,如果您要手动配置节点或节点实例大小,则可能需要调整这些设置以满足协调器 Pod 资源要求。

指标 1.15.0

导出失败。权限遭拒

默认情况下,当 reconciler-manager 检测到应用默认凭证时,otel-collector 会配置为将指标导出到 Prometheus、Cloud Monitoring 和 Monarch。

临时解决方法:

如果您尚未配置 Cloud Monitoring自定义指标过滤条件和 Cloud Monarch,otel-collector 会记录错误。

指标 1.15.0

otel-collector 因自定义配置崩溃

如果您尝试修改或删除其中一个默认 ConfigMap(otel-collectorotel-collector-google-cloud),otel-collector 可能会因无法加载所需的 ConfigMap 而出错或崩溃。

临时解决方法:

如需自定义指标导出配置,请在 config-management-monitoring 命名空间中创建名为 otel-collector-custom 的 ConfigMap。

纠正

Config Sync 正在与自己争夺

Config Sync 可能看起来正在进行控制器争夺(与自身)。如果您在 Git 代码库中为资源的可选字段设置默认值,则会出现此问题。例如,如果为 RoleBinding 主体设置 apiGroup: "",则会触发此问题,因为 apiGroup 字段是可选字段并且空字符串是默认值。字符串、布尔值和整数字段的默认值分别为 ""false0

临时解决方法:

从资源声明中移除该字段。

纠正

Config Sync 正在与 Config Connector 资源争夺

Config Sync 可能看起来正在与 Config Connector 争夺资源,例如 StorageBucket如果您未在可信来源中为资源 spec.lifecycleRule.condition.withState 的可选字段设置值,则会出现此问题。

临时解决方法:

您可以通过在资源声明中添加 withState=ANY 字段来避免此问题。或者,您也可以使用 cnrm.cloud.google.com/state-into-spec: absent 注解放弃并重新获取该资源。

可信来源 1.13.0 1.20.1

已修复:无法为 OCI 源生成访问令牌

如果 Config Sync 配置为使用 OCI 作为可靠来源并使用 Workload Identity Federation for GKE 进行身份验证,则 Config Sync 在尝试向容器注册表进行身份验证时可能会偶尔遇到临时 KNV2004 错误。

此问题是由 oauth2 库仅在身份验证令牌过期后才刷新该令牌而导致的。

错误消息可能包含以下文本:"oauth2/google: unable to generate access token""ID Token issued at (xxx) is stale to sign-in."

临时解决方法:

当 Config Sync 下次尝试从可信来源提取数据时,该错误应会自动解决。

当 Config Sync 多次出错时,重试的频率会降低。如需强制 Config Sync 更快重试,请删除协调器 Pod。此操作会使 Config Sync 重新创建协调器 Pod 并立即从可靠来源提取数据:

    kubectl delete pod -n config-management-system RECONCILER_NAME
    
RECONCILER_NAME 替换为 RootSync 或 RepoSync 对象的协调器名称。
可信来源 1.20.0 1.21.3

在 Git 锁定文件成为孤立文件后,git-sync 容器崩溃循环

如果您看到 git-sync 容器崩溃循环,并在 git-sync 容器日志中看到类似如下的错误,则表示之前的 git 调用可能已失败,并在容器中留下了孤立的锁定文件:

    {"logger":""..."msg":"repo contains lock file","error":null,"path":"/repo/source/.git/shallow.lock"}
    ...runtime error: invalid memory address or nil pointer dereference
    

临时解决方法:

如需解决此问题,请重启受影响的协调器 Pod,以便为其提供新的临时卷:

    kubectl delete pod -n config-management-system RECONCILER_NAME
    
RECONCILER_NAME 替换为 RootSync 或 RepoSync 对象的协调器名称。
可信来源 1.19.0 1.20.0

已修复:残存 Git 锁定文件

如果您在 git-sync 容器中看到类似如下的错误,则表示之前的 git 调用可能已失败,并在容器中留下了残存锁定文件:

    KNV2004: error in the git-sync container: ... fatal: Unable to create '/repo/source/.git/shallow.lock': File exists. ...
    

临时解决方法:

如需解决此问题,请重启受影响的协调器 Pod,以便为其提供新的临时卷:

    kubectl delete pod -n config-management-system RECONCILER_NAME
    
RECONCILER_NAME 替换为 RootSync 或 RepoSync 对象的协调器名称。
正在同步 1.7.0 1.21.0

已修复:忽略不遵循的变更注解

Config Sync 协调器中的 bug 导致即使存在 client.lifecycle.config.k8s.io/mutation 注解,它也会应用声明的配置中的更改。这可能会导致集群中对象的状态被覆盖。

临时解决方法:

您可以通过添加 configmanagement.gke.io/managed: disabled 注解来停止管理托管式对象。不过,停用管理功能后,如果对象从集群中删除,Config Sync 将无法重新创建该对象。Config Sync 还会阻止在可靠来源中进行进一步更新。

正在同步 1.5.0 1.20.1

已修复:API 发现错误可能会导致托管式对象被错误地标记为 Not Found

如果 API 服务后端健康状况不佳,可能会导致 API 发现出现错误。如果在 ResourceGroup 控制器启动时发生这种情况,则在更新或重新调度后,资源缓存将无法初始化,导致所有托管式对象在 ResourceGroup 状态中显示为 Not Found

metrics-server 健康状况不佳时,通常会出现此问题。

临时解决方法:

metrics-server 再次变为健康状况良好后,重启 resource-group-controller Pod:

    kubectl delete pod -n resource-group-system RESOURCE_GROUP_CONTROLLER_NAME
    
RESOURCE_GROUP_CONTROLLER_NAME 替换为 ResourceGroup 控制器名称,该名称与该软件包的 RootSync 或 RepoSync 名称相同。
正在同步 1.15.0

审核日志中存在大量无效的 PATCH 请求

Config Sync 补救器使用试运行来检测偏移。这可能导致 PATCH 请求显示在审核日志中(即使 PATCH 不会持久保留),因为审核日志不会区分试运行请求和正常请求

临时解决方法:

由于审核日志无法区分试运行请求和非试运行请求,因此您可以忽略 PATCH 请求。
私有注册表 1.19.0

Config Sync 不为协调器 Deployment 使用私有注册表

配置了私有注册表后,Config Sync 应替换所有 Deployment 的映像。但是,Config Sync 不会替换协调器 Deployment 中的映像的映像注册表。

临时解决方法:

此问题的解决方法是配置 containerd 中的映像注册表镜像

正在同步 1.7.0 1.21.0

已修复:未能将更新后的清单写入集群

如果 Config Sync 无法更新 ResourceGroup 对象的状态,您可能会在协调器日志中遇到类似如下的间歇性错误:

    KNV2009: task failed (action: "Inventory", name: "inventory-set-0"): failed to write updated inventory to cluster: Operation cannot be fulfilled on resourcegroups.kpt.dev "root-sync": the object has been modified; please apply your changes to the latest version and try again
    

此错误是由于协调器和 ResourceGroup 控制器之间存在竞态条件导致的。ResourceGroup 控制器可能会在协调器更新 ResourceGroup 规范之前更新 ResourceGroup 状态,从而导致 KNV2009 错误。

临时解决方法:

此问题没有临时解决方法。此错误应会自动解决。

Terraform Terraform 5.41.0 版

无法使用 Terraform 安装或升级 Config Sync

Terraform 5.41.0 版为 google_gke_hub_feature_membership 资源引入了一个新字段:config_sync.enabled。由于此字段的默认值为 false,因此如果未明确将此字段设置为 true,则在使用 Terraform 5.41.0 版或更高版本时,会导致 Config Sync 安装或升级失败。如果出现此问题,您可能还会看到一条显示 git spec not included in configmanagement spec 的错误消息。

临时解决方法:

  • 如果您使用 google_gke_hub_feature_membership 资源,请将 config_sync.enabled 手动设置为 true
  • 如果您使用 acm 子模块,建议您改用其他方式来安装 Config Sync。如果您无法切换,请升级至 v33.0.0

Google Cloud 控制台

Google Cloud 控制台中的 Config Sync 信息中心出现“缺少数据”错误

您可能会在 Google Cloud 控制台中的信息中心上看到有关 Config Sync 集群的错误,例如“缺少数据”或“集群凭证无效”。如果您未登录 GDC (VMware) 或 GDC(裸金属)集群,可能会出现此问题。

临时解决方法:

如果您在 Google Cloud 控制台中看到有关 GDC (VMware) 或 GDC(裸金属)集群的错误类型,请确保您已使用 GKE Identity ServiceConnect Gateway 登录集群。

正在同步 1.21.0

已修复:Config Sync 阻止更新已废弃的资源

在 1.21.0 之前的版本中,已删除的 RootSync 或 RepoSync 对象可能会遗留多个标签和注解,Config Sync 会使用这些标签和注解来跟踪这些资源对象。

在删除 RootSync 或 RepoSync 对象后,这些标签和注释可能会导致以下副作用:

  • 其他 RepoSync 对象无法获取之前受管理对象的所有权。
  • 如果启用了偏移防范,则可能会导致 Config Sync 拒绝已弃用资源的更改。

nomos 命令行工具 1.17.0

nomos CLI 不支持 oidc 身份验证插件

使用 nomos 命令行工具时,您可能会看到 no Auth Provider found for name "oidc" 等错误。使用 oidc 身份验证插件时,可能会出现此问题。

临时解决方法:

没有临时解决方法。我们会在后续版本中重新添加 oidc 身份验证插件。

返回页首

后续步骤

  • 如果您在文档中找不到问题的解决方案,请参阅获取支持以获取进一步的帮助,包括以下主题的建议: