Strategi rekonsiliasi


Dengan konfigurasi deklaratif, Anda menentukan status sistem yang diinginkan. Sistem kemudian bekerja terus-menerus agar tetap sedekat mungkin dengan status ini. Lihat Pengelolaan deklaratif objek Kubernetes menggunakan file konfigurasi untuk mengetahui informasi selengkapnya.

Dengan Config Connector, Anda dapat membuat dan mengupdate resource dalam urutan apa pun, terlepas dari hubungan dependensi. GKE memindahkan konfigurasi yang Anda nyatakan menuju konsistensi akhir dengan status yang diinginkan.

Misalnya, jika Anda membuat PubSubSubscription sebelum PubSubTopic yang sesuai, Config Connector akan menunggu hingga topik dibuat sebelum membuat langganan yang terkait.

Durasi penginstalan Config Connector Anda tetap tidak konsisten bergantung pada jumlah dan jenis resource yang dikelolanya. Perubahan pada cluster GKE biasanya dijalankan dalam hitungan detik. Namun, waktu yang diperlukan untuk membuat resource Google Cloud dapat bervariasi bergantung pada jenis resource-nya. Misalnya, satu PubSubTopic membutuhkan waktu beberapa detik untuk dibuat. Resource Google Cloud tidak mencapai konsistensi hingga resource tersebut dibuat. Misalnya, saat membuat SQLInstance dan SQLDatabase, sistem akan menjadi tidak konsisten selama periode menit saat database dibuat.

GKE dan Config Connector merekonsiliasi setiap resource dengan setiap update atau setelah periode jitter dengan rata-rata berdasarkan interval default yang telah dikonfigurasi sebelumnya. Anda dapat menemukan interval default di "Config Connector Default Reconcile Interval In Seconds" dari setiap halaman referensi resource. Untuk link ke setiap referensi, lihat Ringkasan referensi. Jika terjadi error saat melakukan rekonsiliasi, Config Connector akan mencoba kembali dengan backoff eksponensial dengan backoff maksimum adalah dua menit. Anda dapat melihat error dalam Peristiwa resource tertentu.

Mengonfigurasi interval rekonsiliasi

Mulai dari Config Connector 1.102, Anda dapat mengonfigurasi interval rekonsiliasi rata-rata untuk resource yang dikelola oleh Config Connector dengan anotasi cnrm.cloud.google.com/reconcile-interval-in-seconds. Nilai anotasi ini menimpa nilai default "Config Connector Default Average Reconcile Interval In Seconds" dari halaman referensi resource. Nilai anotasi harus berupa bilangan bulat non-negatif yang mewakili waktu dalam detik. Jika nilai ditetapkan ke 0, Config Connector akan berhenti memulai rekonsiliasi untuk resource setelah mencapai status UpToDate.

Misalnya, jika Anda ingin Config Connector lebih jarang merekonsiliasi resource agar tidak mencapai masalah kuota API Google Cloud yang mendasarinya, Anda dapat menetapkan nilai interval rekonsiliasi rata-rata ke 1 jam.

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

Jika Anda ingin Config Connector lebih sering merekonsiliasi resource untuk memperbaiki penyimpangan lebih cepat, Anda dapat menetapkan anotasi dengan nilai yang kecil.

Anda dapat menganotasi semua resource dari jenis tertentu yang memiliki Group Version Kind (GVK) yang sama dengan skrip berikut:

#!/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"

Ganti kode berikut:

  • RESOURCE_KIND: jenis resource yang ingin Anda anotasi.
  • RESOURCE_NAMESPACE: namespace yang berisi resource yang ingin Anda anotasi.
  • RECONCILE_INTERVAL: interval rekonsiliasi dalam detik.

Anda dapat menetapkan interval rekonsiliasi ke 0 untuk menonaktifkan koreksi penyimpangan untuk resource, tetapi tindakan ini tidak menonaktifkan aktuasi resource. Jika Anda melakukan perubahan pada fasilitas Spec, fasilitas tersebut akan direkonsiliasi lagi.

Menetapkan interval rekonsiliasi ke 0 tidak dapat dibatalkan. Ini berarti mengubah nilai kembali ke angka selain nol tidak akan membuat Config Connector merekonsiliasi resource lagi.

Jika Anda ingin mengembalikan interval rekonsiliasi 0, Anda memiliki opsi berikut:

  • Ubah spesifikasi resource dengan nilai interval rekonsiliasi untuk memungkinkan rekonsiliasi baru.
  • Abaikan resource dengan menetapkan anotasi cnrm.cloud.google.com/deletion-policy: "abandon" dan buat ulang resource dengan nilai interval rekonsiliasi selain 0.

Kolom yang dapat diubah tetapi tidak dapat dibaca hanya diaktifkan pada perubahan

Beberapa API menampilkan kolom yang tidak dapat dibaca, tetapi dapat diubah (misalnya, sandi untuk pengguna SQL). Karena ketidakmampuan untuk melihat apakah kolom ini telah diubah, kolom yang dapat diubah tetapi tidak dapat dibaca akan diperbarui hanya saat resource kustom diubah.

Resource tidak dibuat ulang saat mengubah kolom yang tidak dapat diubah

Beberapa kolom dalam resource tidak dapat diubah dan tidak dapat direkonsiliasi tanpa menghapusnya, lalu membuat ulang resource target.

Dalam situasi ini, Config Connector akan memunculkan peristiwa Kubernetes "Diperbarui Gagal" untuk resource, bukan melakukan pembuatan ulang ini. Kemudian, Anda harus menghapus dan membuat ulang resource tersebut.

Contoh peristiwa:

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]