停止和恢复同步配置

在某些情况下,您可能需要 Config Sync 快速停止从可靠来源同步配置。其中一种情况是,如果有人向来源提交了在语法上有效但存在错误的配置,而您希望在移除或修复该配置时限制它对正在运行的集群的影响。

本页面适用于管理底层技术基础设施生命周期的 IT 管理员和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务

对于 Config Sync 1.20.0 及更高版本的集群,或者启用了自动升级功能的任何集群,ConfigManagement Operator 都不会在集群上运行。您无需按照本页面上的步骤手动停止同步。您可以改为使用 gcloud CLI spec.configSync.stopSyncing 字段,方法是在 Config Sync 配置文件中设置 true。随后如需恢复同步,请将该字段设置为 false

如果您使用 kubectl 手动安装了 Config Sync,则无法使用 stopSyncing 字段。在这种情况下,您可以按照本页面中的步骤手动停止同步。手动步骤因集群上安装的 Config Sync 版本而异。

前提条件

如需使用本文档中的命令,您需要在 config-management-system 命名空间中拥有所有要停止同步的集群的以下 Kubernetes RBAC 权限:

- apiGroups: ["extensions"]
  resources: ["deployments", "deployments/scale"]
  verbs: ["get", "update"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["list", "watch"]

停止和恢复从可靠来源同步

本部分适用于单个可靠来源,介绍了如何快速停止同步,以及如何在问题得到解决后恢复同步。如需了解如何停止多个可靠来源的同步,请参阅停止和恢复从多个可靠来源同步

停止同步

要停止单个集群的同步,请运行以下命令:

1.20.0 或更高版本

kubectl scale -n config-management-system deployment --replicas=0 --all \
&& kubectl wait -n config-management-system --for=delete pods --all

这些命令会将 config-management-system 命名空间中运行的所有 Deployment 的 replicas 计数减少至 0。受影响的确切 Deployment 集合因产品版本而异。

1.19.2 或更低版本

kubectl scale -n config-management-system deployment config-management-operator --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l k8s-app=config-management-operator \
&& kubectl scale -n config-management-system deployment --replicas=0 --all \
&& kubectl wait -n config-management-system --for=delete pods --all

这些命令按顺序执行以下操作。如果某个命令失败,则其余命令不会运行。

  1. 将 ConfigManagement Operator Deployment 中的 replicas 计数减少至 0。
  2. config-management-system 命名空间中运行的所有 Deployment 的 replicas 计数减少至 0。受影响的确切 Deployment 集合因产品版本而异。

所有 Deployment 仍在集群中,但负责同步的进程的副本不可用,因此配置不会从可靠来源同步。

如需验证所有进程是否已停止,请使用以下命令并验证所有 Deployment 是否没有副本:

kubectl get -n config-management-system deployment

如果您需要停止多个集群的同步,请对每个集群运行以上命令。

继续同步

要恢复单个集群的同步,请运行以下命令:

1.20.0 或更高版本

kubectl -n config-management-system scale deployment reconciler-manager --replicas=1

此命令会将 Reconciler Manager Deployment 扩缩到 1 个副本。Reconciler Manager 会注意到 config-management-system 命名空间 Deployment 中的 Pod 未正确扩缩,并将它们扩缩到适当的副本数量。

1.19.2 或更低版本

kubectl -n config-management-system scale deployment config-management-operator --replicas=1

此命令会将 Operator Deployment 扩展到 1 个副本。Operator 会注意到 config-management-system 命名空间中 Deployment 的 Pod 未正确扩缩,并将它们扩展到适当的副本数量。

如果您需要在多个集群上恢复同步,请对每个集群运行以上命令。

停止和恢复从多个可靠来源同步

本部分适用于多个可靠来源,其中介绍了如何暂时停止和恢复从多个可靠来源同步。如需了解如何停止单个可靠来源的同步,请参阅停止和恢复从可靠来源同步

只有集中管理员可以停止在根可靠来源中进行同步。

是否能够停止在多个可靠来源中进行同步取决于您在设置从多个可靠来源同步时使用的配置方法

  • 如果使用的是在根可靠来源中控制来源方法,则只有集中管理员可以停止和恢复同步。

  • 如果使用的是通过 Kubernetes API 控制可靠来源方法,则应用运维人员可以停止和恢复从其处理的命名空间范围可靠来源同步。

停止同步

以下部分介绍了如何停止根可靠来源和命名空间范围可靠来源的同步。如需阻止 Reconciler Manager 还原更改,您需要先运行以下命令来停止 Reconciler Manager:

1.20.0 或更高版本

kubectl scale deployment -n config-management-system reconciler-manager --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=reconciler-manager

这些命令会将 Reconciler Manager Deployment 中的 replicas 计数减少至 0。

1.19.2 或更低版本

kubectl scale -n config-management-system deployment config-management-operator --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l k8s-app=config-management-operator \
&& kubectl scale deployment -n config-management-system reconciler-manager --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=reconciler-manager

这些命令按顺序执行以下操作。如果某个命令失败,则其余命令不会运行。

  1. 将 ConfigManagement Operator Deployment 中的 replicas 计数减少至 0。
  2. 将 Reconciler Manager Deployment 中的 replicas 计数减少至 0。

停止从根可靠来源同步

如需停止从根可靠来源同步集群,集中管理员可以运行以下命令:

kubectl -n config-management-system scale deployment root-reconciler --replicas=0

此命令会将 root-reconciler Deployment 中的 replicas 计数减少至 0。

如果您需要停止多个集群的同步,请对每个集群运行以上命令。

停止从命名空间范围可靠来源同步

选择根可靠来源方法Kubernetes API 方法标签页以查看相关说明。

根可靠来源方法

如果使用的是在根可靠来源中控制命名空间可靠来源方法,则集中管理员可以运行以下命令以停止从命名空间可靠来源同步集群:

kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=0

该命令会将 ns-reconciler-NAMESPACE Deployment 中的副本计数减少至 0。

如果您需要停止多个集群的同步,请对每个集群运行以上命令。

Kubernetes API 方法

如果使用的是通过 Kubernetes API 控制命名空间范围来源方法,则应用运维人员可以通过运行以下命令停止同步集群:

  1. 检索 RepoSync 配置并保存,以便稍后在需要恢复同步时使用:

    kubectl -n NAMESPACE get reposyncs repo-sync -oyaml > repo-sync.yaml
    

    NAMESPACE 替换为您的 RepoSync 对象的命名空间。

  2. 删除 RepoSync 配置:

    kubectl -n NAMESPACE delete reposyncs repo-sync
    

    此命令会触发 Reconciler Manager 以从 NAMESPACE 中移除命名空间协调器 (ns-reconciler-NAMESPACE),并停止同步。

    如果您需要停止多个集群的同步,请对每个集群运行以上命令。

阻止准入网络钩子阻塞偏移(可选)

Config Sync 准入网络钩子默认处于停用状态,您可以使用 Google Cloud CLI 或 kubectl 启用停用准入网络钩子提供的偏移预防功能。

停止从所有可靠来源同步

如需停止从所有可靠来源(包括根可靠来源和命名空间范围来源)同步,请运行以下命令:

kubectl scale deployment -n config-management-system -l app=reconciler --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=reconciler

这些命令会将 config-management-system 命名空间中运行的所有 Reconciler Pod 的 replicas 计数减少至 0,并等待所有 Reconciler Pod 被删除。

所有协调器 Deployment 仍保留在集群中,但 Reconciler 或任何负责同步的进程的副本都不可用,因此配置不会从可靠来源同步。

继续同步

本部分介绍了如何恢复根可靠来源和命名空间范围来源的同步。

恢复从根可靠来源同步

如需恢复从根可靠来源同步,集中管理员可以运行以下命令:

kubectl -n config-management-system scale deployment root-reconciler --replicas=1

此命令会将 root-reconciler Deployment 扩容到 1 个副本。

恢复从命名空间范围来源同步

选择根可靠来源方法Kubernetes API 方法标签页以查看相关说明。

根可靠来源方法

如果您使用的是在根可靠来源中控制命名空间范围来源方法,则集中管理员可以运行以下命令:

kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=1

此命令会将 ns-reconciler-NAMESPACE Deployment 扩容到 1 个副本。

Kubernetes API 方法

如果您使用的是通过 Kubernetes API 控制命名空间范围来源方法,则应用运维人员可以通过重新应用包含 RepoSync 配置的 repo-sync.yaml 来恢复同步:

kubectl apply -f repo-sync.yaml

此命令会触发 Reconciler Manager 以创建命名空间协调器进程并创建 ns-reconciler-NAMESPACE Deployment。

启用和停用准入 webhook

Config Sync 准入网络钩子默认处于停用状态,您可以使用 Google Cloud CLI 或 kubectl 启用停用准入网络钩子提供的偏移预防功能。

恢复从所有可靠来源同步

1.20.0 或更高版本

kubectl -n config-management-system scale deployment reconciler-manager --replicas=1

此命令会将 Reconciler Manager Deployment 扩缩到 1 个副本。然后,Reconciler Manager 会将根协调器和命名空间协调器扩缩到相应的副本数量。

1.19.2 或更低版本

kubectl -n config-management-system scale deployment config-management-operator --replicas=1

此命令会将 Operator Deployment 扩展到 1 个副本。Operator 随后会注意到 Repliler Manager Deployment 未正确扩缩,并将其扩缩到适当的副本数量。最后,Reconciler Manager 会将根协调器和命名空间协调器扩缩到相应的副本数。

后续步骤