停止和恢复同步配置

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

本主题介绍了在问题得到解决后如何快速停止同步以及如何恢复同步

前提条件

运行本主题中讨论的命令的用户需要在所有要停止同步的集群上的 kube-systemconfig-management-system 命名空间中拥有以下 Kubernetes RBAC 权限:

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

停止同步

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

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

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

  1. 将 Config Management Operator Deployment 中的 replicas 计数减少至 0。
  2. 将 syncer Deployment 中的 replicas 计数减少至 0。
  3. 将 git-importer Deployment 中的 replicas 计数减少至 0。

所有部署仍在集群中,但 Operator、git-importer 和 syncer 的副本不可用,因此不从代码库同步配置。

使所有已注册的集群停止同步

如果您需要使单个 Google Cloud 项目中所有已注册的集群停止同步,而不是一次让一个集群停止同步,您可创建一个脚本来使用 nomos status 命令获取所有已注册集群的列表。该脚本随后会使用 gcloud container clusters get-credentials 命令为每个集群创建 kubectl 上下文,并对每个集群运行上述命令。以下是此类脚本的简单示例:

#!/bin/bash

nomos status |grep SYNCED | awk {'print $1'} |while read i; do

  gcloud container clusters get-credentials "$i"

  kubectl -n kube-system scale deployment config-management-operator --replicas=0 \
  && kubectl wait -n kube-system --for=delete pods -l k8s-app=config-management-operator \
  && kubectl -n config-management-system scale deployment syncer --replicas=0 \
  && kubectl wait -n config-management-system --for=delete pods -l app=syncer \
  && kubectl -n config-management-system scale deployment git-importer --replicas=0 \
  && kubectl wait -n config-management-system --for=delete pods -l app=git-importer
done

恢复同步

要恢复同步,请运行以下命令:

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

此命令会将 Operator Deployment 扩展到 1 个副本。Operator 随后会注意到 syncer Deployment 和 git-importer Deployment 未正确扩展,并将它们也扩展到 1 个副本。

使所有已注册的集群恢复同步

如果您需要使 Google Cloud 项目中所有已注册的集群恢复同步,而不是一次让一个集群恢复同步,您可创建一个脚本来使用 nomos status 获取所有已注册集群的列表。该脚本随后会使用 gcloud container clusters get-credentials 命令为每个集群创建 kubectl 上下文,并对每个集群运行上述命令。以下是此类脚本的简单示例:

#!/bin/bash

nomos status |grep SYNCED | awk {'print $1'} |while read i; do

  gcloud container clusters get-credentials "$i"

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

done

后续步骤