停止及繼續同步設定

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

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

如果叢集使用 Config Sync 1.20.0 以上版本,或已啟用自動升級功能,則 ConfigManagement 運算子不會在叢集上執行。您不需要按照本頁的步驟手動停止同步處理。您可以改用 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。受影響的確切部署作業集會因產品版本而異。

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 命名空間中執行的所有部署項目的 replicas 數量減少至 0。受影響的確切部署作業集會因產品版本而異。

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

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

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。

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

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

選取「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 提供的差異防止功能。

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

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 個副本。接著,運算子會發現 Reconciler Manager Deployment 的規模不正確,並將其調整為適當的副本數量。最後,Reconciler Manager 會將根層級調解器和命名空間調解器,擴展至對應的副本數量。

後續步驟