從外部管理欄位


當 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 含有自動調整大小或自動更新欄位,就可能發生這種情況。為資源啟用伺服器端套用功能,並在套用時將欄位留在設定檔中,確保這些欄位會視為外部管理。