Mengelola kolom secara eksternal

Saat Config Connector membuat resource di Google Cloud, kolom yang tidak ditentukan di kolom spec akan mengambil nilai dari API, kecuali jika tidak dapat dibaca, seperti kolom yang tidak tersedia dengan permintaan HTTP GET.

Dalam hal ini, kolom dianggap dikelola secara eksternal karena Kubernetes bukan sumber kebenaran untuk nilai ini.

Perilaku dengan penerapan sisi server

Jika penerapan sisi server diaktifkan untuk resource, nilai kolom yang dikelola secara eksternal dalam objek akan diperbarui secara berkelanjutan agar cocok dengan resource Google Cloud yang mendasarinya.

Jika kolom di bagian spec dari konfigurasi yang diterapkan memiliki nilai, kolom tersebut tidak dikelola secara eksternal.

Jika kolom dihapus, kolom dikelola secara eksternal.

Perilaku tanpa penerapan sisi server

Jika penerapan sisi server tidak diaktifkan dan resource menggunakan perilaku pengisian Merge, Config Connector akan mengisi kolom yang tidak ditentukan dalam kolom spec resource dengan nilai yang dibaca dari API Google Cloud dan menerapkan nilai yang awalnya diisi tersebut.

Misalnya, Anda menerapkan konfigurasi resource tanpa menetapkan nilai untuk kolom field2 di bagian spec:

spec:
    field1: "value-1"

Jika nilai kolom field2 adalah "api-value-1" di API Google Cloud, resource di server API akan diisi dengan nilai tersebut:

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

Jika resource Google Cloud dimodifikasi secara langsung sehingga kolom field2 sekarang menjadi "api-value-2", Config Connector akan mengembalikan resource Google Cloud ke nilai yang awalnya diisi di kolom spec resource ("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"

Perilaku untuk kolom daftar dalam spesifikasi resource

Karena batasan teknis di Config Connector, kolom daftar dalam konfigurasi resource Anda tidak dapat dikelola secara eksternal secara default saat resource menggunakan perilaku pengisian Merge. Karena batasan ini, Config Connector mengambil kepemilikan kolom daftar di kolom spec resource, meskipun Anda tidak menentukan kolom tersebut dalam konfigurasi resource asli.

Saat Anda menerapkan kolom spec resource, Config Connector akan membaca nilai kolom daftar dari API Google Cloud dan memperlakukan nilai awal ini sebagai sumber kebenaran dan status target. Jika nilai di kolom daftar tersebut berubah di luar Config Connector, Config Connector akan mencoba mengembalikan perubahan, yang mungkin tidak diinginkan.

Untuk mengabaikan batasan ini dan mengizinkan kolom daftar dikelola secara eksternal, gunakan anotasi cnrm.cloud.google.com/state-into-spec: absent untuk mengabaikan kolom yang tidak ditentukan. Nilai anotasi ini ditetapkan ke absent secara default untuk resource yang baru dibuat di Config Connector versi 1.123.1 dan yang lebih baru. Untuk melihat apakah resource Anda mendukung anotasi, periksa halaman referensi resource yang sesuai.

Untuk mengonfigurasi perilaku ini, tambahkan anotasi berikut ke manifes resource Anda:

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

Saat Anda menetapkan nilai anotasi state-into-spec ke absent, Config Connector akan mengabaikan kolom daftar yang tidak ditentukan dalam konfigurasi resource Anda sehingga dapat dikelola secara eksternal.

Peringatan

Kolom yang dikelola oleh Config Connector dan diupdate secara otomatis oleh layanan eksternal dapat memicu update tanpa akhir atau error rekonsiliasi pada API yang mendasarinya. Masalah ini dapat terjadi jika API Google Cloud yang mendasarinya memiliki kolom penskalaan otomatis atau kolom yang diupdate secara otomatis dan resource Anda menggunakan anotasi cnrm.cloud.google.com/state-into-spec: merge tanpa penerapan sisi server.

Misalnya, jika resource SQLInstance menggunakan anotasi cnrm.cloud.google.com/state-into-spec: merge, Config Connector akan mengisi kolom spec.maintenanceVersion awal instance ke kolom spec resource Kubernetes. Saat Cloud SQL kemudian melakukan update pemeliharaan otomatis pada instance yang mendasarinya, Config Connector akan mencoba mengembalikan instance ke nilai spec.maintenanceVersion yang lebih lama yang disimpan di kolom spec. Karena Cloud SQL menolak downgrade versi pemeliharaan, rekonsiliasi gagal berulang kali dengan error UpdateFailed.

Agar layanan eksternal dapat mengelola kolom yang diperbarui secara otomatis, lakukan hal berikut:

  • Hapus kolom yang diupdate secara otomatis dari file konfigurasi YAML saat Anda menerapkannya.
  • Konfigurasi resource untuk mengabaikan kolom yang tidak ditentukan dengan melakukan salah satu hal berikut: