Mengontrol penjadwalan dengan taint dan toleransi

Halaman ini memberikan ringkasan tentang taint dan toleransi di Google Distributed Cloud. Saat Anda menjadwalkan workload untuk di-deploy di cluster, taint node membantu Anda mengontrol node mana yang diizinkan untuk menjalankan workload tersebut.

Ringkasan

Saat Anda mengirimkan workload untuk dijalankan di cluster, scheduler akan menentukan tempat untuk menempatkan Pod yang terkait dengan workload tersebut. Scheduler dapat menempatkan Pod pada node mana pun yang memenuhi persyaratan CPU, memori, dan resource kustom Pod.

Jika cluster menjalankan berbagai workload, Anda mungkin ingin menerapkan beberapa kontrol atas workload mana yang dapat berjalan pada node pool tertentu.

Taint node memungkinkan Anda menandai node sehingga scheduler menghindari atau mencegah penggunaannya untuk Pod tertentu. Fitur pelengkap, tolerasi, memungkinkan Anda menetapkan Pod yang dapat digunakan pada node "taint".

Taint dan toleransi bekerja bersama untuk memastikan bahwa Pod tidak dijadwalkan ke node yang tidak sesuai.

Taint adalah pasangan nilai kunci yang terkait dengan efek. Tabel berikut mencantumkan efek yang tersedia:

Efek Deskripsi
NoSchedule Pod yang tidak menoleransi taint ini tidak akan dijadwalkan pada node; Pod yang sudah ada tidak dikeluarkan dari node.
PreferNoSchedule Kubernetes menghindari penjadwalan Pod yang tidak menoleransi taint ini ke node.
NoExecute Pod dikeluarkan dari node jika sudah berjalan di node, dan tidak dijadwalkan ke node jika belum berjalan di node.

Keuntungan menyetel taint node di Google Distributed Cloud

Meskipun Anda dapat menetapkan taint node menggunakan kubectl taint perintah, penggunaan gkectl atau Google Cloud konsol untuk menetapkan taint node memiliki keuntungan berikut dibandingkan kubectl:

  • Taint dipertahankan saat node dimulai ulang atau diganti.
  • Taint dibuat secara otomatis saat node ditambahkan ke node pool.
  • Saat menggunakan gkectl untuk menambahkan taint, taint dibuat secara otomatis selama penskalaan otomatis cluster. (Penskalaan otomatis untuk node pool yang dibuat di Google Cloud konsol saat ini tidak tersedia.)

Menetapkan taint node

Anda dapat menetapkan taint node di node pool saat membuat cluster pengguna atau setelah cluster dibuat. Bagian ini menunjukkan cara menambahkan taint ke cluster yang telah dibuat, tetapi prosesnya serupa saat membuat cluster baru.

Anda dapat menambahkan node pool baru dan menetapkan taint, atau memperbarui node pool yang ada dan menetapkan taint. Sebelum menambahkan node pool lain, pastikan ada cukup alamat IP yang tersedia di cluster.

Jika Anda membuat cluster di Google Cloud konsol, Anda dapat menggunakan Google Cloud konsol untuk menambahkan atau memperbarui node pool.

Menetapkan taint di node pool baru

Konsol

  1. Di konsol, buka halaman ringkasan cluster Google Kubernetes Engine.

    Buka cluster GKE

  2. Pilih project tempat cluster pengguna berada. Google Cloud

  3. Di daftar cluster, klik nama cluster, lalu klik Lihat detail di panel Detail.

  4. Klik Tambahkan node pool.

  5. Konfigurasi node pool:

    1. Masukkan Nama node pool.
    2. Masukkan jumlah vCPUs untuk setiap node di pool (minimum 4 per pekerja cluster pengguna).
    3. Masukkan ukuran memori dalam mebibyte (MiB) untuk setiap node di pool (minimum 8192 MiB per node pekerja cluster pengguna dan harus kelipatan 4).
    4. Di kolom Replika, masukkan jumlah node di pool (minimum 3).
    5. Pilih Jenis image OS: Ubuntu Containerd atau COS.

    6. Masukkan Ukuran boot disk dalam gibibyte (GiB) (default adalah 40 GiB).

  6. Di bagian Metadata node pool (opsional), klik + Tambahkan Taint. Masukkan Kunci, Nilai, dan Efek untuk taint. Ulangi jika perlu.

  7. Secara opsional, klik + Tambahkan Label Kubernetes. Masukkan Kunci dan Nilai untuk label. Ulangi jika perlu.

  8. Klik Buat.

  9. Konsol menampilkan Status cluster: perubahan sedang berlangsung. Google Cloud Klik Tampilkan Detail untuk melihat Kondisi status resource dan Pesan status.

Command line

  1. Di file konfigurasi cluster pengguna, isi bagian nodePools.

    Anda harus menentukan kolom berikut:

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    Kolom berikut bersifat opsional. Jika Anda tidak menyertakan nodePools[i].bootDiskSizeGB atau nodePools[i].osImageType, nilai default akan digunakan.

  2. Isi bagian nodePools[i].taints. Contoh:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. Secara opsional, isi bagian berikut:

    • nodePools[i].labels
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  4. Jalankan perintah berikut:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Ganti kode berikut:

    • [ADMIN_CLUSTER_KUBECONFIG] dengan jalur file kubeconfig untuk cluster admin Anda.

    • [USER_CLUSTER_CONFIG] dengan jalur file konfigurasi cluster pengguna Anda.

Menetapkan taint di node pool yang ada

Konsol

  1. Di konsol, buka halaman ringkasan cluster Google Kubernetes Engine.

    Buka cluster GKE

  2. Pilih project tempat cluster pengguna berada. Google Cloud

  3. Di daftar cluster, klik nama cluster, lalu klik Lihat detail di panel Detail.

  4. Klik tab Node.

  5. Klik nama node pool yang ingin diubah.

  6. Klik Edit di samping bagian Metadata node pool (opsional), lalu klik + Tambahkan Taint. Masukkan Kunci, Nilai, dan Efek untuk taint. Ulangi jika perlu.

  7. Klik Selesai.

  8. Klik untuk kembali ke halaman sebelumnya.

  9. Konsol menampilkan Status cluster: perubahan sedang berlangsung. Google Cloud Klik Tampilkan Detail untuk melihat Kondisi status resource dan Pesan status.

Command line

  1. Di file konfigurasi cluster pengguna , buka bagian nodePools dari node pool yang ingin Anda perbarui.

  2. Isi nodePools[i].taints Contoh:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. Jalankan perintah berikut:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Ganti kode berikut:

    • [ADMIN_CLUSTER_KUBECONFIG] dengan jalur file kubeconfig untuk cluster admin Anda.

    • [USER_CLUSTER_CONFIG] dengan jalur file konfigurasi cluster pengguna Anda.

Mengonfigurasi Pod untuk menoleransi taint

Anda dapat mengonfigurasi Pod untuk menoleransi taint dengan menyertakan kolom tolerations dalam spesifikasi Pod. Pada contoh berikut, Pod dapat dijadwalkan pada node yang memiliki taint dedicated=experimental:NoSchedule:

tolerations:
- key: dedicated
  operator: Equal
  value: experimental
  effect: NoSchedule

Untuk contoh tambahan, lihat Taint dan Toleransi.