Mengontrol penjadwalan dengan taint dan toleransi

Halaman ini memberikan gambaran umum tentang taint dan toleransi di Google Distributed Cloud. Saat Anda menjadwalkan beban kerja yang di-deploy di cluster, taint node membantu Anda mengontrol node mana diizinkan berjalan.

Ringkasan

Saat Anda mengirimkan beban kerja untuk dijalankan di cluster, penjadwal menentukan lokasi penempatan Pod yang terkait dengan workload. Penjadwal dapat menempatkan Pod di node mana pun yang sesuai dengan CPU, memori, dan persyaratan resource kustom.

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 menyetel taint node menggunakan kubectl taint perintah ini, menggunakan gkectl atau Konsol Google Cloud untuk menyetel taint node memiliki keunggulan berikut dibandingkan kubectl:

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

Menyetel taint node

Anda dapat menetapkan taint node pada kumpulan node baik saat membuat cluster pengguna setelah cluster dibuat. Bagian ini menunjukkan penambahan taint ke cluster yang dibuat, tetapi prosesnya serupa saat membuat klaster.

Anda bisa menambahkan kumpulan node baru dan mengatur taint, atau Anda bisa memperbarui kumpulan node yang ada dan menyetel taint. Sebelum Anda menambahkan kumpulan node lainnya, memverifikasi bahwa tersedia cukup alamat IP pada cluster.

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

Menetapkan taint di kumpulan node baru

Konsol

  1. Di konsol, buka Ringkasan cluster Google Kubernetes Engine kami.

    Buka cluster GKE

  2. Pilih project Google Cloud tempat cluster pengguna berada.

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

  4. Klik Add node pool.

  5. Konfigurasi kumpulan node:

    1. Masukkan Nama kumpulan node.
    2. Masukkan jumlah vCPUs untuk setiap node dalam kumpulan (minimum 4 per pekerja cluster pengguna).
    3. Masukkan ukuran memory dalam mebibyte (MiB) untuk setiap node dalam kumpulan (minimal 8.192 MiB per node pekerja cluster pengguna dan harus kelipatan 4.)
    4. Di kolom Replicas, masukkan jumlah node dalam kumpulan (minimal 3).
    5. Pilih OS image type: Ubuntu Containerd atau COS.

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

  6. Di bagian Metadata kumpulan node (opsional), klik + Tambahkan Taint. Masukkan Key, Value, dan Effect untuk taint. Ulangi sebagai diperlukan.

  7. Anda juga dapat mengklik + Add Kubernetes Labels. Masukkan Key dan Nilai untuk label. Ulangi jika perlu.

  8. Klik Create.

  9. Konsol Google Cloud menampilkan Status cluster: perubahan di progresnya. Klik Show Details untuk melihat Resource status kondisi dan Pesan status.

Command line

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

    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 {i>default <i}yang digunakan.

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

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. 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 {i>kubeconfig<i} untuk cluster admin Anda.

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

Menetapkan taint dalam kumpulan node yang ada

Konsol

  1. Di konsol, buka Ringkasan cluster Google Kubernetes Engine kami.

    Buka cluster GKE

  2. Pilih project Google Cloud tempat cluster pengguna berada.

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

  4. Klik tab Nodes.

  5. Klik nama node pool yang ingin diubah.

  6. Klik Edit di samping Bagian Metadata kumpulan node (opsional), lalu klik + Tambahkan Taint. Masukkan Key, Value, dan Effect untuk taint. Ulangi sebagai diperlukan.

  7. Klik Done.

  8. Klik untuk kembali ke halaman sebelumnya.

  9. Konsol Google Cloud menampilkan Status cluster: perubahan di progresnya. Klik Show Details untuk melihat Resource status kondisi dan Pesan status.

Command line

  1. Di file konfigurasi cluster pengguna, pergi ke nodePools dari kumpulan node yang ingin Anda update.

  2. Isilah 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 {i>kubeconfig<i} untuk cluster admin Anda.

    • [USER_CLUSTER_CONFIG] dengan jalur cluster pengguna Anda file konfigurasi 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.