Config Sync 已知问题

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

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

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

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

选择 Config Sync 版本:

选择问题类别:

或者,过滤已知问题:

类别 已识别的版本 已修复的版本 问题和临时解决方法
组件健康状况 1.15.0

协调器无法调度

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

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

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

临时解决方法:

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

指标 1.15.0 1.17.2

已修复:导出失败:指标标签无法识别

在 1.15.0 版中,Config Sync 向许多指标添加了 typecommit 标签。这些标签增加了指标基数,从而增加了导出的指标数量。此外,还添加了属性处理以在导出到 Cloud Monarch 时过滤这些标签,但此过滤配置错误,导致 otel-collector 日志中出现转换错误。

指标 1.15.0

导出失败。权限遭拒

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

临时解决方法:

如果您尚未配置 Cloud Monitoring停用 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。

nomos CLI 1.15.0 1.17.2

已修复:nomos statusnomos bugreport 在 Pod 中不起作用

nomos 1.17.2 版之前,nomos bugreportnomos status 只能在 Kubernetes Pod 内运行时连接到本地集群。在 nomos 1.17.2 版中,更改了授权方法,使其工作方式更类似于 kubectl。由于此变更,本地集群默认会成为目标。您可以通过指定 KUBECONFIG 环境变量来替换配置。

纠正

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.17.3 1.18.3

已修复:向 GitHub 执行 Git SSH 身份验证失败

git-sync v4.2.1 存在一个 bug,该 bug 在使用 SSH 时会从代码库网址中移除用户名,导致连接到 GitHub 时身份验证失败,这要求用户为 git

Git 中的错误消息如下:git-sync@github.com: Permission denied (publickey).\r\nfatal: Could not read from remote repository.

临时解决方法:

使用其他身份验证方法。

可信来源 1.15.0 1.18.0

已修复:Cloud Source Repositories 的身份验证凭据定期无效

当 Cloud Source Repositories 的身份验证令牌到期时,Config Sync 可能会定期出现错误。此问题是由令牌刷新在刷新令牌之前等到过期而导致的。

在 1.18.0 版及更高版本中,令牌会在令牌过期后的五分钟内在第一个请求时刷新。这样可以防止出现无效身份验证凭据错误,除非凭据确实无效。

可信来源 1.15.0 1.17.0

已修复:同步代码库时出错:已超出上下文截止期限

在 1.17.0 之前的版本中,Config Sync 默认会检出完整的 Git 代码库历史记录。这可能会导致在包含大量提交记录的大型代码库中提取请求超时。

在 1.17.0 版及更高版本中,Git 提取使用 --depth=1 执行,它仅提取最新提交。这可以加快源代码提取速度,避免大多数超时,并减少 Git 服务器负载。

如果您在升级后仍然遇到此问题,则可能是因为您的可靠来源有许多文件,Git 服务器响应缓慢,或者存在一些其他网络问题。

可信来源 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.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

忽略不遵循的变更注解

Config Sync applier 中的 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.17.0 1.17.3

已修复:Config Sync 无法从分支中拉取最新提交

在 Config Sync 1.17.0、1.17.1 和 1.17.2 版中,您可能会遇到以下问题:当多个远程代码库中引用了同一分支且不同步时,Config Sync 无法从特定分支的 HEAD 拉取最新提交。例如,远程代码库 originmain 分支可能早于远程代码库 upstream 中的同一分支,但 Config Sync 仅会提取从最后一行开始的提交 SHA,这可能不是最新提交。

以下示例展示了这种问题的可能情形:

git ls-remote -q [GIT_REPOSITORY_URL] main  main^{}
244999b795d4a7890f237ef3c8035d68ad56515d    refs/heads/main               # the latest commit
be2c0aec052e300028d9c6d919787624290505b6    refs/remotes/upstream/main    # the commit Config Sync pulls from

在 1.17.3 版及更高版本中,git-sync 依赖项已使用不同的提取机制进行更新。

如果您无法升级,可以将 Git 修订版本 (spec.git.revision) 设置为最新的提交 SHA,无论为 Git 分支 (spec.git.branch) 设置的值是什么。如需详细了解 Git 配置,请参阅 Git 代码库的配置

私有注册表 1.19.0

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

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

临时解决方法:

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

正在同步 1.17.0 1.18.3

已修复:Config Sync 协调器会出现崩溃循环问题

在 Config Sync 1.17.0 版或更高版本中,您可能会遇到以下问题:在某些 Kubernetes 提供程序中,协调器无法创建 REST 配置。

以下示例展示了这种问题在协调器日志中的可能情形:

Error creating rest config: failed to build rest config: reading local kubeconfig: loading REST config from "/.kube/config": stat /.kube/config: no such file or directory
Terraform Terraform 5.41.0 版

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

Terraform 5.41.0 版为 google_gke_hub_feature_membership 引入了一个新字段:config_sync.enabled。由于此字段的默认值为 false,因此在将 Terraform 升级到 5.41.0 版时,会导致 Config Sync 安装失败。

临时解决方法:

  • 如果您使用 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 (Bare Metal) 集群,则可能会遇到此问题。

临时解决方法:

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

返回页首

后续步骤