Menetapkan node ke cluster database menggunakan penjadwalan

Di Operator AlloyDB Omni Kubernetes, penjadwalan adalah proses untuk mencocokkan Pod database baru dengan node guna menyeimbangkan distribusi node di seluruh cluster dan membantu mengoptimalkan performa. Pod dan node dicocokkan berdasarkan beberapa kriteria dan resource yang tersedia, seperti CPU dan memori.

Untuk informasi selengkapnya tentang penjadwalan, lihat Penjadwalan, Pencegatan, dan Pengusiran dalam dokumentasi Kubernetes.

Halaman ini menunjukkan cara menentukan konfigurasi penjadwalan toleransi dan afinitas node untuk instance node pool utama dan baca dalam manifes Kubernetes Anda.

Untuk informasi tentang cara menentukan taint di node, lihat Taint dan Toleransi dalam dokumentasi Kubernetes.

Menentukan toleransi

Untuk menjadwalkan Pod AlloyDB Omni ke node yang bebas dari Pod aplikasi lain atau cocok dengan taint tertentu yang ditentukan di node tersebut, terapkan satu atau beberapa toleransi ke node sebagai berikut:

  1. Ubah manifes cluster Operator Kubernetes AlloyDB Omni untuk menyertakan bagian tolerations di bagian schedulingConfig di salah satu bagian berikut:
    • primarySpec untuk instance utama
    • spec untuk instance kumpulan baca
         tolerations:
          - key: "TAINT_KEY"
            operator: "OPERATOR_VALUE"
            value: "VALUE"
            effect: "TAINT_EFFECT"
       

    Ganti kode berikut:

    • TAINT_KEY: Nama unik yang ada dari kunci taint seperti nama host node atau nilai lain yang disimpulkan secara lokal yang berlaku untuk toleransi. Kunci taint sudah ditentukan di node. Kolom kosong dan OPERATOR_VALUE yang ditetapkan ke exists menunjukkan bahwa toleransi harus cocok dengan semua nilai dan semua kunci.
    • OPERATOR_VALUE: Merepresentasikan hubungan kunci dengan kumpulan nilai. Tetapkan parameter ke salah satu opsi berikut:
      • exists: Kubernetes cocok dengan nilai apa pun jika taint ditentukan, terlepas dari nilai taint.
      • equal: Kubernetes tidak menjadwalkan Pod ke node jika nilainya berbeda. Operator memerlukan nilai true taint.
    • VALUE: Nilai taint yang cocok dengan toleransi. Jika operatornya adalah Ada, nilainya kosong, jika tidak, nilainya adalah string reguler. Contoh, true.
    • TAINT_EFFECT: Menunjukkan efek taint yang akan dicocokkan. Kolom kosong menunjukkan bahwa semua efek taint harus cocok. Tetapkan parameter ke salah satu opsi berikut:
      • NoSchedule: Kubernetes tidak menjadwalkan Pod baru di node yang terkena taint.
      • PreferNoSchedule: Kubernetes menghindari penempatan Pod baru di node yang terkena taint kecuali jika diperlukan.
      • NoExecute: Kubernetes mengeluarkan Pod yang ada dan tidak dapat mentolerir taint.
  2. Terapkan kembali manifes.

Menentukan afinitas node

Penjadwal Kubernetes menggunakan afinitas node sebagai kumpulan aturan untuk menentukan tempat menempatkan Pod. Afinitas node adalah versi pemilih node yang lebih fleksibel dan ekspresif.

Untuk menentukan node mana yang harus dijadwalkan untuk menjalankan database Anda, ikuti langkah-langkah berikut:

  1. Ubah manifes cluster database untuk menyertakan bagian nodeaffinity setelah bagian tolerations di bagian schedulingConfig dari primarySpec untuk instance utama atau spec untuk instance kumpulan operasi baca:
          nodeaffinity:
             NODE_AFFINITY_TYPE:
             - weight: WAIT_VALUE
               preference:
                 matchExpressions:
                 - key: LABEL_KEY
                   operator: OPERATOR_VALUE
                   values:
                   - LABEL_KEY_VALUE
        

    Ganti kode berikut:

    • NODE_AFFINITY_TYPE: Tetapkan parameter ke salah satu dari berikut ini:
      • requiredDuringSchedulingIgnoredDuringExecution: Kubernetes menjadwalkan Pod berdasarkan aturan yang ditentukan.
      • preferredDuringSchedulingIgnoredDuringExecution: Penjadwal Kubernetes mencoba menemukan node yang memenuhi aturan yang ditentukan untuk penjadwalan. Namun, jika tidak ada node tersebut, Kubernetes akan menjadwalkan ke node lain di cluster.
    • WAIT_VALUE: Menunjukkan bobot preferensi untuk node yang ditentukan. Nilai yang lebih tinggi menunjukkan preferensi yang lebih kuat. Nilai yang valid adalah dari 1 hingga 100.
    • LABEL_KEY: Label node untuk kunci yang berfungsi sebagai indikator lokasi dan memfasilitasi distribusi Pod yang merata di seluruh cluster. Contoh, disktype=ssd.
    • OPERATOR_VALUE: Merepresentasikan hubungan kunci dengan kumpulan nilai. Tetapkan parameter ke salah satu opsi berikut:
      • In: Array nilai tidak boleh kosong.
      • NotIn: Array nilai tidak boleh kosong.
      • Exists: Array nilai harus kosong.
      • DoesNotExist: Array nilai harus kosong.
      • Gt: Array nilai harus memiliki satu elemen, yang ditafsirkan sebagai bilangan bulat.
      • Lt: Array nilai harus memiliki satu elemen, yang ditafsirkan sebagai bilangan bulat.
    • LABEL_KEY_VALUE: Nilai untuk kunci label Anda. Tetapkan parameter ke array nilai string sebagai berikut:
      • Jika operatornya adalah In atau NotIn, array nilai tidak boleh kosong.
      • Jika operatornya adalah Exists atau DoesNotExist, array nilai harus kosong.
      • Jika operatornya adalah Gt atau Lt, array nilai harus memiliki satu elemen, yang ditafsirkan sebagai bilangan bulat.
  2. Terapkan kembali manifes.

Contoh

Contoh berikut mengilustrasikan penjadwalan Pod di instance utama dan kumpulan baca AlloyDB Omni Kubernetes Operator. Penyiapan penjadwalan tersebut membantu memastikan bahwa instance utama cluster database dijadwalkan di node yang sesuai sekaligus memungkinkan beberapa fleksibilitas dalam pemilihan node. Fleksibilitas ini dapat berguna untuk menyeimbangkan beban, mengoptimalkan penggunaan resource, atau mematuhi peran dan karakteristik node tertentu.

    schedulingconfig:
      tolerations:
      - key: "node-role.kubernetes.io/control-plane"
        operator: "Exists"
        effect: "NoSchedule"
      nodeaffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
            - key: another-node-label-key
              operator: In
              values:
              - another-node-label-value

Contoh toleransi memungkinkan Pod dijadwalkan di node yang ditandai sebagai node panel kontrol karena detail berikut:

  • Kunci taint node-role.kubernetes.io/control-plane menunjukkan bahwa node memiliki node bidang kontrol.
  • Operator Exists berarti bahwa toleransi cocok dengan taint apa pun dengan kunci taint yang ditentukan, terlepas dari nilainya.
  • Efek NoSchedule berarti Pod tidak akan dijadwalkan di node panel kontrol kecuali jika memiliki toleransi yang cocok.

Jenis afinitas node preferredDuringSchedulingIgnoredDuringExecution menentukan bahwa aturan yang ditentukan untuk afinitas node lebih disukai, tetapi tidak diperlukan selama penjadwalan. Jika node pilihan tidak tersedia, Pod mungkin masih dijadwalkan di node lain. Nilai bobot 1 menunjukkan preferensi yang lemah. Kriteria pemilihan node ditentukan di bagian preference. Bagian matchExpressions berisi array ekspresi yang digunakan untuk mencocokkan node. Kunci another-node-label-key mewakili kunci label node yang akan dicocokkan. Operator In berarti node harus memiliki kunci dengan salah satu nilai yang ditentukan. Kunci another-node-label-key harus memiliki nilai another-node-label-value.

Contoh aturan afinitas node menunjukkan preferensi untuk menjadwalkan Pod di node yang memiliki label another-node-label-key dengan nilai another-node-label-value. Preferensi ini lemah sehingga bukan merupakan persyaratan yang kuat.

Contoh ini menggabungkan hal berikut:

  • Toleransi yang memungkinkan Pod dijadwalkan di node bidang kontrol dengan menoleransi taint NoSchedule.
  • Afinitas node yang lebih memilih node dengan label tertentu, tetapi tidak mewajibkannya secara ketat; sehingga menawarkan fleksibilitas dalam penjadwalan.

Langkah selanjutnya