Strategi rekonsiliasi


Dengan konfigurasi deklaratif, Anda menentukan status sistem yang diinginkan. Sistem kemudian akan terus bekerja untuk 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 memperbarui resource dalam urutan apa pun, terlepas dari hubungan dependensi. GKE memindahkan konfigurasi yang dideklarasikan Anda ke 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 terkait.

Durasi penginstalan Config Connector Anda yang tetap tidak konsisten bergantung pada jumlah dan jenis resource yang dikelolanya. Perubahan pada cluster GKE biasanya dijalankan dalam hitungan detik. Namun, waktu untuk membuat resource Google Cloud dapat bervariasi berdasarkan jenis resource. Misalnya, satu PubSubTopic memerlukan waktu beberapa detik untuk dibuat. Resource Google Cloud tidak mencapai konsistensi hingga dibuat. Misalnya, saat membuat SQLInstance dan SQLDatabase, sistem menjadi tidak konsisten selama beberapa 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 Average Reconcile Interval In Seconds" dari halaman referensi setiap resource. Untuk link ke setiap resource, lihat Ringkasan resource. Jika terjadi error dalam rekonsiliasi, Config Connector akan mencoba lagi dengan backoff eksponensial dengan backoff maksimum dua menit. Anda dapat melihat error apa pun di 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 akan 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 merekonsiliasi resource lebih jarang untuk menghindari 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 merekonsiliasi resource lebih sering untuk memperbaiki penyimpangan lebih cepat, Anda dapat menetapkan anotasi dengan nilai kecil.

Anda dapat menganotasi semua resource dari jenis tertentu yang memiliki Jenis Versi Grup (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 anotasikan.
  • RESOURCE_NAMESPACE: namespace yang berisi resource yang ingin Anda anotasikan.
  • RECONCILE_INTERVAL: interval rekonsiliasi dalam detik.

Anda dapat menetapkan interval rekonsiliasi ke 0 untuk menonaktifkan koreksi drift untuk resource, tetapi tindakan ini tidak menonaktifkan pengaktifan resource. Jika Anda membuat perubahan pada resource Spec, resource tersebut akan direkonsiliasi lagi.

Menetapkan interval rekonsiliasi ke 0 tidak dapat dibatalkan. Artinya, mengubah nilai kembali ke angka non-nol tidak akan membuat Config Connector merekonsiliasi resource lagi.

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

  • Ubah spesifikasi resource dengan nilai interval rekonsiliasi untuk mengaktifkan rekonsiliasi baru.
  • Batalkan 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 saat ada perubahan

Beberapa API mengekspos kolom yang tidak dapat dibaca, tetapi dapat diubah (misalnya, sandi untuk pengguna SQL). Karena tidak dapat melihat apakah kolom ini telah diubah, kolom yang dapat diubah tetapi tidak dapat dibaca hanya diperbarui 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 menghapus, lalu membuat ulang resource target.

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

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]