從外部管理欄位

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

在本例中,由於 Kubernetes 並非這個值的可靠資料來源,因此該欄位視為「外部管理」。

伺服器端套用行為

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

如果套用設定的 spec 部分中有欄位的值,該欄位就不會由外部管理。

如果欄位遭到移除,則表示該欄位由外部管理。

不使用伺服器端套用功能的行為

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

舉例來說,假設您套用資源設定,但未在 spec 區段中為 field2 欄位設定值:

spec:
    field1: "value-1"

如果 Google CloudAPI 中的 field2 欄位值為 "api-value-1",API 伺服器中的資源會填入該值:

# object in the api-server
spec:
    field1: "value-1"
    field2: "api-value-1"  # populated by first reconciliation

如果直接修改 Google Cloud 資源,導致 field2 欄位現在為 "api-value-2",Config Connector 會將 Google Cloud資源還原為資源 spec 欄位中最初填入的值 ("api-value-1"):

# object in the api-server
spec:
    field1: "value-1"
    # still the originally populated value; overrides the external value
    field2: "api-value-1"

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

由於 Config Connector 的技術限制,當資源使用 Merge 填入行為時,資源設定中的清單欄位預設無法由外部管理。由於這項限制,即使您未在原始資源設定中指定該欄位,Config Connector 也會取得資源 spec 欄位中清單欄位的擁有權。

套用資源 spec 欄位時,Config Connector 會從 Google Cloud API 讀取清單欄位的值,並將這個初始值視為可靠資料來源和目標狀態。如果該清單欄位的值在 Config Connector 外部變更,Config Connector 會嘗試還原變更,這可能不是預期的行為。

如要略過這項限制,並從外部管理清單欄位,請使用 cnrm.cloud.google.com/state-into-spec: absent 註解忽略未指定的欄位。在 Config Connector 1.123.1 以上版本中,新建立的資源預設會將這個註解的值設為 absent。如要確認資源是否支援註解,請查看對應的資源參考頁面。

如要設定這項行為,請在資源資訊清單中新增下列註解:

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

將 state-into-spec 註解的值設為 absent 時,Config Connector 會忽略資源設定中未指定的清單欄位,以便從外部管理這些欄位。

注意事項

由 Config Connector 管理且由外部服務自動更新的欄位,可能會在基礎 API 上觸發無止盡的更新或協調錯誤。如果基礎 API 具有自動調整資源配置或自動更新的欄位,且您的資源使用 cnrm.cloud.google.com/state-into-spec: merge 註解,但沒有伺服器端套用,就可能發生這些問題。 Google Cloud

舉例來說,如果 SQLInstance 資源使用 cnrm.cloud.google.com/state-into-spec: merge 註解,Config Connector 會將執行個體的初始 spec.maintenanceVersion 欄位填入 Kubernetes 資源 spec 欄位。稍後,當 Cloud SQL 對基礎執行個體執行自動維護更新時,Config Connector 會嘗試將執行個體還原為儲存在 spec 欄位中的舊版 spec.maintenanceVersion 值。由於 Cloud SQL 會拒絕降級維護版本,因此協調作業會重複失敗,並顯示 UpdateFailed 錯誤。

如要讓外部服務管理自動更新的欄位,請按照下列步驟操作:

  • 套用 YAML 設定檔時,請省略自動更新的欄位。
  • 請採取下列任一做法,將資源設為忽略未指定的欄位: