停止和恢复同步配置

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

前提条件

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

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

停止和继续从可信来源同步

本部分面向单一可信来源,向您展示如何快速停止同步,以及在问题得到解决后如何恢复同步。如需了解如何停止同步多个可信来源,请参阅从多个可信来源停止和恢复同步

停止同步

如需停止单个集群同步,请运行以下命令;为方便起见,我们将它们作为一条命令提供,但您也可以分开运行这些命令:

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 集因产品版本而异。

所有部署仍在集群中,但 Operator 的副本或负责同步的任何进程都不可用,因此不会从可信来源同步配置。

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

kubectl get -n config-management-system deployment

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

继续同步

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

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:

kubectl -n config-management-system scale deployment config-management-operator --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l k8s-app=config-management-operator --timeout=60s \
&& 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。

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

停止从命名空间级可信来源同步

选择根源可信方法 (Root source of fallback method) 或 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 enable停用准入网络钩子提供的偏移预防功能。

停止从所有可信来源同步

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

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 被删除。

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

继续同步

本部分介绍如何为根可信来源和命名空间级来源恢复同步。

从根可信来源恢复同步

如需从可信的根来源继续同步,集中管理员可以运行以下命令:

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

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

从命名空间级来源继续同步

选择根源可信方法 (Root source of fallback method) 或 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 enable停用准入网络钩子提供的偏移预防功能。

继续从所有可信来源同步

如需继续从所有可信来源同步,请运行以下命令:

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

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

后续步骤