停止和恢复同步配置

在某些情况下,您可能需要 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 集合因产品版本而异。

所有 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。

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

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

选择根可靠来源方法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 启用停用准入网络钩子提供的偏移预防功能。

恢复从所有可靠来源同步

如需恢复从所有可靠来源同步,请运行以下命令:

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

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

后续步骤