從外部管理欄位

當 Config Connector 在 Google Cloud上建立資源時,規格中未指定的欄位會從 API 取得值,除非這些欄位無法讀取 (例如無法使用 GET HTTP 要求取得)。

在這種情況下,由於 Kubernetes 並非這個值的真實來源,因此該欄位會視為「外部管理」。

採用伺服器端套用時的行為

如果資源已啟用伺服器端套用,物件中外部管理的欄位值會持續更新,以符合基礎 Google Cloud資源。

如果套用的設定中,規格的欄位有值,則該欄位不會由外部管理。

如果移除該欄位,系統會從外部管理該欄位。

未套用伺服器端轉換的行為

如果未啟用伺服器端套用,資源規格中未指定的欄位會填入從 Google Cloud API 讀取的值,且 Config Connector 會強制執行這些初始填入的值。

舉例來說,如果使用者套用資源設定,但未在規格中為 bar 設定值:

spec:
    foo: "foo"

如果 Google Cloud API 中 bar 欄位的值為 bazapi-server 中的資源會填入該值:

# object in the api-server
spec:
    foo: "foo"
    bar: "baz"  # populated by first reconciliation

如果直接修改 Google Cloud 資源,導致 bar 現在為 baz-2, Google Cloud API 會修正為資源規格中最初填入的值:baz

# object in the api-server
spec:
    foo: "foo"
    bar: "baz"  # still the originally populated value, and overrides the Google Cloud value

資源規格中清單欄位的行為

由於 Config Connector 的技術限制,資源設定中的清單欄位預設無法從外部管理。也就是說,即使原始資源設定中未指定欄位,Config Connector 仍會一律接管資源規格中的清單欄位。

套用資源規格時,Config Connector 會從 Google Cloud API 讀取清單欄位的值,並將這個初始值視為可靠資料來源和所需狀態。如果該清單欄位中的值在 Config Connector 外部經過修改,Config Connector 會嘗試將其改回,這可能不是您想要的結果。

如要略過這項限制,並從外部管理清單欄位,請使用 cnrm.cloud.google.com/state-into-spec 註解。並非所有資源都支援這項註解。如要查看資源是否支援註解,請參閱對應的資源參考頁面

metadata:
  annotations:
    cnrm.cloud.google.com/state-into-spec: absent

state-into-spec 的值設為 absent 後,如果資源設定中未指定清單欄位,Config Connector 會忽略這些欄位。這樣一來,資源中的清單欄位就會由外部管理。

注意事項

如果欄位由 Config Connector 管理,且會由外部服務自動更新,可能會在基礎 API 上觸發無止盡的更新。如果基礎 API 具有自動調整或自動更新欄位,就可能發生這種情況。請務必啟用資源的伺服器端套用功能,並在套用時將欄位排除在設定檔之外,確保這些欄位視為外部管理。