Mendeklarasikan dependensi antar-objek resource

Panduan ini menunjukkan cara kerja dependensi di Config Sync dan cara menentukan dependensi Anda sendiri.

Config Sync akan otomatis mendeteksi dependensi implisit antar-objek tertentu saat menyinkronkannya ke cluster. Misalnya, objek Namespace selalu diterapkan sebelum objek apa pun di Namespace tersebut, dan objek CustomResourceDefinition (CRD) selalu diterapkan sebelum resource kustom jenis ini diterapkan. Demikian pula, urutan penghapusan berkebalikan untuk dependensi implisit ini: Namespace dihapus setelah objek dalam namespace tersebut, dan CRD dihapus setelah Resource Kustom jenis tersebut.

Anda juga dapat menetapkan dependensi eksplisit menggunakan anotasi depends-on. Misalnya, Anda mungkin ingin StatefulSet MySQL dimulai sebelum Deployment Wordpress, sehingga database Anda diterapkan dan siap sebelum Wordpress dimulai.

Persyaratan

  • RootSync dan RepoSync API harus diaktifkan. Jika Anda telah menginstal Config Sync secara manual menggunakan kubectl, dan belum mengaktifkan RootSync serta RepoSync API, Anda harus memigrasikan objek ConfigManagement.

  • Dependensi harus berada dalam sumber kebenaran yang sama dengan dependensinya, dan dikelola oleh objek RootSync atau RepoSync yang sama.

Terapkan grup

Saat menyinkronkan resource ke cluster, Config Sync membagi resource yang memiliki dependensi langsung atau tidak langsung ke dalam grup penerapan yang berbeda. Satu grup penerapan hanya terdiri dari resource tanpa dependensi langsung atau tidak langsung satu sama lain. Grup penerapan yang resource-nya tidak memiliki dependensi akan diterapkan terlebih dahulu.

Aktuasi dan rekonsiliasi

Saat objek diaktuasi (baik diterapkan maupun dipangkas), mungkin perlu waktu beberapa saat sampai objek direkonsiliasi oleh pengontrolnya. Misalnya, saat Deployment diterapkan, Pod yang mendasarinya mungkin tidak segera siap. Setelah Pod yang mendasarinya siap, Deployment akan direkonsiliasi. Untuk berbagai jenis objek, Config Sync memeriksa berbagai jenis kondisi untuk memverifikasi apakah sebuah objek direkonsiliasi. Detail selengkapnya dapat ditemukan di sigs.k8s.io/cli-utils

Dengan anotasi depends-on, Config Sync tidak hanya menerapkan objek sesuai urutan yang Anda inginkan, tetapi juga memverifikasi bahwa objek dependensi direkonsiliasi sebelum menerapkan objek dependen.

Jika objek dependensi tidak direkonsiliasi dalam waktu tunggu rekonsiliasi default selama 5 menit, Config Sync tidak akan menerapkan objek dependen hingga periode sinkronisasi berikutnya. Anda dapat mengganti waktu tunggu rekonsiliasi default dengan menyetel spec.override.reconcileTimeout.

Menambahkan anotasi depends-on ke objek

Untuk menentukan dependensi, tambahkan anotasi config.kubernetes.io/depends-on pada objek dependen dengan nilai yang mereferensikan objek dependensi.

Untuk contoh Wordpress, anotasi di Deployment Wordpress terlihat sebagai berikut:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  namespace: default
  labels:
    app: wordpress
  annotations:
    config.kubernetes.io/depends-on: apps/namespaces/default/StatefulSet/wordpress-mysql

Ketika Config Sync menerapkan objek, objek tersebut akan menerapkan dependensi terlebih dahulu, objek wordpress-mysql StatefulSet. Setelah dependensi direkonsiliasi, Config Sync akan menerapkan Deployment wordpress dependen.

Referensi objek

Referensi objek menggunakan sintaksis berikut:

  • Untuk objek dengan namespace:

    GROUP/namespaces/NAMESPACE/KIND/NAME
    
  • Untuk objek cakupan cluster:

    GROUP/KIND/NAME
    

    Ganti kode berikut:

    • GROUP: Grup objek dependensi.
    • NAMESPACE: Namespace objek dependensi cakupan namespace.
    • KIND: Jenis objek dependensi. Kolom ini peka huruf besar/kecil. Misalnya, gunakan "Pod", bukan "pod".
    • NAME: Nama objek dependensi.

Untuk objek dalam grup inti, string kosong akan digunakan, misalnya, /namespaces/test/Pod/pod-a.

Gunakan , untuk memisahkan beberapa referensi objek, misalnya /namespaces/test/Pod/pod-a,/namespaces/test/Pod/pod-b.