停止及繼續同步設定

在某些情況下,您可能需要快速停止 Config Sync 從單一事實來源同步設定。舉例來說,如果有人將語法正確但有誤的設定提交至來源,而您希望在移除或修正設定期間,限制設定對執行中叢集的影響,就適合使用這項功能。

本頁僅適用於使用 kubectl 手動安裝 Config Sync 的情況。 如要使用其他安裝方法,請在 Config Sync 設定檔中設定 true,使用 gcloud CLI spec.configSync.stopSyncing 欄位。如要繼續同步,請將該欄位設為 false

本頁面適用於負責管理基礎技術架構生命週期的 IT 管理員和作業人員。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。 Google Cloud

必要條件

如要使用本文中的指令,您必須在要停止同步處理的所有叢集上,於 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 --replicas=0 --all \
&& kubectl wait -n config-management-system --for=delete pods --all

這些指令會將在 config-management-system 命名空間中執行的所有 Deployment replicas 數量減少至 0。受影響的確切部署作業集會因產品版本而異。

所有部署作業仍位於叢集中,但負責同步處理的程序沒有任何副本,因此設定不會從可靠來源同步處理。

如要確認所有程序都已停止,請使用下列指令,並確認所有部署作業的副本數都為零:

kubectl get -n config-management-system deployment

如要停止多個叢集的同步作業,請為每個叢集執行上述指令。

繼續同步處理

如要繼續同步處理單一叢集,請執行下列指令:

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

這項指令會將 Reconciler Manager Deployment 擴展至 1 個副本。Reconciler Manager 接著會發現 config-management-system 命名空間 Deployment 中的 Pod 縮放比例不正確,並將其縮放至適當的副本數。

如需在多個叢集上繼續同步處理,請針對每個叢集執行上述指令。

停止及繼續從多個可靠資料來源同步處理

這個部分適用於多個真實來源,並說明如何暫時停止及恢復從多個真實來源同步處理資料。如要瞭解如何停止同步處理單一可靠資料來源,請參閱停止及繼續同步處理可靠資料來源

只有中央管理員可以停止在根資料來源中同步處理。

能否停止同步處理多個可靠資料來源,取決於設定同步處理多個可靠資料來源時使用的設定方法

  • 如果使用「在根層級可靠資料來源中控管來源」方法,只有中央管理員可以停止及繼續同步。

  • 如果使用「透過 Kubernetes API 控制單一資料來源」方法,應用程式運算子可以停止及繼續從他們使用的命名空間範圍資料來源進行同步。

停止同步

以下各節說明如何停止同步處理根目錄和命名空間範圍的可靠資料來源。如要停止 Reconciler Manager 還原變更,請先執行下列指令停止 Reconciler Manager:

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。

停止從根層級的可靠資料來源同步處理

如要停止從根層級單一事實來源同步叢集,中央管理員可以執行下列指令:

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

這項指令會將 root-reconciler Deployment 中的 replicas 數量減少至 0。

如要停止多個叢集的同步作業,請針對每個叢集執行上述指令。

停止從命名空間範圍的可靠資料來源同步處理

選取「Root source of truth method」(根源事實方法) 或「Kubernetes API method」(Kubernetes API 方法) 分頁標籤,即可查看相關操作說明。

根層級可靠資料來源方法

如果使用「在根目錄來源中控管命名空間來源」方法,中央管理員可以執行下列指令,停止叢集從命名空間來源同步:

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

這項指令會將 ns-reconciler-NAMESPACE 部署項目的副本數量減少至 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),並停止同步處理。

    如要停止多個叢集的同步作業,請針對每個叢集執行上述指令。

停止許可 Webhook 封鎖漂移 (選用)

Config Sync 許可控制器 Webhook 預設為停用,您可以使用 Google Cloud CLI 或 kubectl啟用停用許可控制器 Webhook 提供的差異防止功能。

停止從所有可靠資料來源同步

如要停止從所有可靠來源 (包括根可靠來源和命名空間範圍來源) 同步處理,請執行下列指令:

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 遭到刪除。

所有 Reconciler Deployment 仍位於叢集中,但沒有 Reconciler 副本或任何負責同步處理的程序可用,因此設定不會從可靠資料來源同步處理。

繼續同步處理

本節說明如何恢復根單一事實來源和命名空間範圍來源的同步作業。

從根層級的可靠資料來源繼續同步處理

如要從根層級的單一資訊來源繼續同步處理,中央管理員可以執行下列指令:

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

這項指令會將 root-reconciler Deployment 擴充至 1 個副本。

從命名空間範圍來源繼續同步處理

選取「Root source of truth method」(根源事實方法) 或「Kubernetes API 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 許可控制器 Webhook 預設為停用,您可以使用 Google Cloud CLI 或 kubectl啟用停用許可控制器 Webhook 提供的差異防止功能。

從所有可靠資料來源繼續同步處理

如要繼續同步處理,請執行下列指令:

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

這項指令會將 Reconciler Manager Deployment 擴充至 1 個副本。然後,Reconciler Manager 會將根層級調解器和命名空間調解器,擴展至對應的副本數量。

後續步驟