對帳策略


您可以使用陳述式設定定義系統的所需狀態。系統會持續運作,盡可能維持這個狀態。詳情請參閱「使用設定檔宣告式管理 Kubernetes 物件」一文。

有了 Config Connector,您可以不受依附關係影響,以任何順序建立及更新資源。GKE 會將宣告的設定轉移至符合所需狀態的最終一致性

舉例來說,如果您在對應的 PubSubTopic 之前建立 PubSubSubscription,Config Connector 會等到主題建立完成後,再建立相關訂閱項目。

Config Connector 安裝作業的持續時間會因所管理的資源數量和類型而異。對 GKE 叢集所做的變更通常會在幾秒內執行完畢。不過,建立Google Cloud 資源的時間可能會因資源類型而異。舉例來說,建立單一 PubSubTopic 需要花費數秒鐘的時間。 Google Cloud資源必須先建立,才能達到一致性。舉例來說,建立 SQLInstanceSQLDatabase 時,系統在建立資料庫的過程中會出現不一致的情況。

GKE 和 Config Connector 會在每次更新或經過平均時間後 (以預先設定的預設間隔為準) 對每項資源進行調和作業。您可以在各個資源的參考頁面中,查看「Config Connector 預設平均重新整理間隔 (秒)」的預設間隔。如需各項資源的連結,請參閱「資源總覽」。當比對發生錯誤時,Config Connector 會以指數型倒退方式重試,其中最大倒退時間為兩分鐘。您可以在特定資源的「事件」中查看任何錯誤。

設定重整間隔

從 Config Connector 1.102 開始,您可以使用 cnrm.cloud.google.com/reconcile-interval-in-seconds 註解,為 Config Connector 管理的資源設定平均重新整理間隔。註解的值會覆寫「資源參考資料」頁面中「Config Connector 預設平均和解間隔時間 (秒)」的預設值。註解的值應為非負整數,以秒為單位表示時間。如果值設為 0,Config Connector 會在資源達到「UpToDate」UpToDate狀態後,停止啟動資源的對帳作業。

舉例來說,如果您希望 Config Connector 減少資源的重新整理頻率,以免影響底層 Google Cloud API 配額問題,可以將平均重新整理間隔值設為 1 小時。

cnrm.cloud.google.com/reconcile-interval-in-seconds: "3600"

如果希望 Config Connector 更頻繁地協調資源,以便更快修正偏差,您可以設定較小的註解值。

您可以使用下列指令碼,為共用相同群組版本類型 (GVK) 的特定類型資源全部加上註解:

#!/bin/bash

KIND=RESOURCE_KIND
NAMESPACE=RESOURCE_NAMESPACE
ANNOTATION_KEY="cnrm.cloud.google.com/reconcile-interval-in-seconds"
ANNOTATION_VALUE=RECONCILE_INTERVAL

kubectl annotate --overwrite --all ${KIND} ${ANNOTATION_KEY}=${ANNOTATION_VALUE} -n ${NAMESPACE}
echo "Annotation added to all ${KIND} RESOURCE"

更改下列內容:

  • RESOURCE_KIND:您要加上註解的資源類型。
  • RESOURCE_NAMESPACE:包含要加上註解的資源的命名空間。
  • RECONCILE_INTERVAL:和解間隔時間 (以秒為單位)。

您可以將重整間隔設為 0,停用資源的漂移修正功能,但不會停用資源動作。如果您變更資源 Spec,系統會再次進行資源比對。

將對帳間隔設為 0 是不可逆的。也就是說,將值變更回非零值後,Config Connector 不會再次重新整理資源。

如果要還原 0 的對帳間隔,請使用下列選項:

  • 修改資源規格,加入對應間隔值,啟用新的對應功能。
  • 設定註解 cnrm.cloud.google.com/deletion-policy: "abandon" 即可放棄資源,並使用非 0 的對照間隔值重新建立資源。

可變更但無法讀取的欄位只會在變更時啟動

有些 API 會公開無法讀取但可變動的欄位 (例如 SQL 使用者的密碼)。由於無法查看這些欄位是否已修改,因此只有在自訂資源修改時,系統才會更新可變更但無法讀取的欄位。

修改不可變更欄位時不會重新建立資源

資源中的部分欄位不可變動,因此必須先刪除再重新建立目標資源,才能進行比對。

在這種情況下,Config Connector 會針對資源發出「UpdatedFailed」Kubernetes 事件,而不會執行這項重建作業。接著,您必須刪除並重新建立資源。

事件範例:

Warning  UpdateFailed  37m (x643 over 15d)    computeinstance-controller  Update call failed: the desired mutation for the following field(s) is invalid: [bootDisk.0.InitializeParams.0.Image networkInterface.0.NetworkIp]