Mengontrol penjadwalan dengan taint node


Halaman ini memberikan gambaran umum tentang taint node di Google Kubernetes Engine (GKE). Taint node membantu Anda menentukan node tempat workload harus dijalankan.

Cluster autopilot mendukung penggunaan taint node hanya untuk pemisahan workload. Untuk mengetahui petunjuknya, lihat Mengonfigurasi pemisahan workload di GKE.

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 GKE

Anda dapat menambahkan taint node ke cluster dan node di GKE atau dengan menggunakan kubectl taint perintah. Menentukan taint node di GKE memiliki beberapa keunggulan dibandingkan kubectl:

  • Taint dipertahankan saat node dimulai ulang atau diganti.
  • Taint dibuat secara otomatis saat node ditambahkan ke node pool atau cluster.
  • Taint dibuat secara otomatis selama penskalaan otomatis cluster.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Mengaktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Membuat cluster dengan taint node

Saat membuat cluster di GKE, Anda dapat menetapkan taint node ke cluster tersebut. Tindakan ini menetapkan taint ke semua node yang dibuat dengan cluster.

Jika Anda membuat cluster Standard dengan taint node yang memilikiNoSchedule efek atauNoExecute GKE tidak dapat menjadwalkan beberapa komponen yang dikelola GKE, sepertikube-dns atau metrics-server pada node pool default yang dibuat GKE saat Anda membuat cluster. GKE tidak dapat menjadwalkan komponen ini karena tidak memiliki toleransi yang sesuai untuk taint node Anda. Anda harus menambahkan node pool baru yang memenuhi salah satu kondisi berikut:

  • Tanpa taint
  • Taint yang memiliki efek PreferNoSchedule
  • Taint components.gke.io/gke-managed-components=true:NoSchedule

Dengan salah satu kondisi ini, GKE dapat menjadwalkan komponen yang dikelola GKE di node pool yang baru.

Untuk mendapatkan petunjuk, lihat Mengisolasi workload pada node khusus.

gcloud

Untuk membuat cluster dengan taint node, jalankan perintah berikut:

gcloud container clusters create CLUSTER_NAME \
    --node-taints KEY=VALUE:EFFECT

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru.
  • EFFECT: salah satu nilai efek berikut: PreferNoSchedule, NoSchedule, atau NoExecute.
  • KEY=VALUE: pasangan nilai kunci yang terkait dengan EFFECT.

Misalnya, perintah berikut menerapkan taint yang memiliki nilai kunci dedicated=experimental dengan efek PreferNoSchedule:

gcloud container clusters create example-cluster \
    --node-taints dedicated=experimental:PreferNoSchedule

Konsol

Untuk membuat cluster dengan taint node:

  1. Buka halaman Google Kubernetes Engine di Konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Klik Create.

  3. Konfigurasi cluster Anda sesuai keinginan.

  4. Dari panel navigasi, di bagian Node Pools, luaskan node pool yang ingin Anda ubah, lalu klik Metadata.

  5. Di bagian Node taints, klik Add Taint.

  6. Dalam menu drop-down Effect, pilih efek yang diinginkan.

  7. Masukkan pasangan nilai kunci yang diinginkan di kolom Kunci dan Nilai.

  8. Klik Buat.

API

Saat Anda menggunakan API untuk membuat cluster, sertakan kolom nodeTaints di bagian nodeConfig. Berikut contohnya:

POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters

{
  'cluster': {
    'name': 'example-cluster',
    'nodeConfig': {
      'nodeTaints': [
        {
          'key': 'special',
          'Value': 'gpu',
          'effect': 'PreferNoSchedule'
        }
      ]
      ...
    }
    ...
  }
}

Membuat node pool dengan taint node

Saat Anda menerapkan taint ke node, hanya Pod yang menoleransi taint yang diizinkan untuk berjalan pada node tersebut. Di cluster GKE, Anda dapat menerapkan taint ke node pool, yang menerapkan taint ke semua node dalam kumpulan tersebut.

Untuk membuat node pool dengan taint node, Anda dapat menggunakan Google Cloud CLI, Google Cloud Console, atau GKE API.

gcloud

Untuk membuat node pool dengan taint node, jalankan perintah berikut:

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --node-taints KEY=VALUE:EFFECT

Ganti kode berikut:

  • POOL_NAME: nama node pool yang akan dibuat.
  • CLUSTER_NAME: nama cluster tempat node pool dibuat.
  • EFFECT: salah satu nilai efek berikut: PreferNoSchedule, NoSchedule, atau NoExecute.
  • KEY=VALUE: pasangan nilai kunci yang terkait dengan EFFECT.

Misalnya, perintah berikut membuat node pool pada cluster yang ada dan menerapkan taint yang memiliki nilai kunci dedicated=experimental dengan efek NoSchedule:

gcloud container node-pools create example-pool --cluster example-cluster \
    --node-taints dedicated=experimental:NoSchedule

Perintah ini membuat node pool dan menerapkan taint yang memiliki nilai kunci special=gpu dengan efek NoExecute:

gcloud container node-pools create example-pool-2 --cluster example-cluster \
    --node-taints special=gpu:NoExecute

Konsol

Untuk membuat node pool dengan taint node, lakukan langkah-langkah berikut:

  1. Buka halaman Google Kubernetes Engine di Konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Di halaman Cluster details, klik Add Node Pool.

  4. Dari panel navigasi, klik Metadata.

  5. Di bagian Node taint, klik Add Taint.

  6. Pilih efek yang diinginkan dalam menu drop-down Effect.

  7. Masukkan pasangan nilai kunci yang diinginkan di kolom Kunci dan Nilai.

  8. Klik Buat.

API

Saat Anda menggunakan API untuk membuat node pool, sertakan kolom nodeTaints di bagian nodeConfig. Berikut contohnya:

POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/CLUSTER_ID/nodePools

{
  'nodePool': {
    'name': 'example-pool',
    'nodeConfig': {
      'nodeTaints': [
        {
          'key': 'dedicated',
          'Value': 'experimental',
          'effect': 'NoSchedule'
        }
      ]
      ...
    }
    ...
  }
}

Mengonfigurasi Pod untuk menoleransi taint

Anda dapat mengonfigurasi Pod untuk menoleransi taint dengan menyertakan kolom tolerations dalam spesifikasi Pod. Berikut adalah bagian dari spesifikasi Pod.

Pod ini dapat dijadwalkan pada node yang memiliki taint dedicated=experimental:NoSchedule:

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

Menambahkan taint ke node yang ada

Anda dapat menambahkan taint ke node yang ada menggunakan kubectl taint perintah. Anda sebaiknya tidak menambahkan taint ke Spot VM menggunakan kubectl karena setiap node baru yang ditambahkan GKE ke node pool tidak mewarisi taint.

kubectl taint nodes NODE_NAME KEY=VALUE:EFFECT

Misalnya, perintah berikut menerapkan taint yang memiliki nilai kunci dedicated=experimental dengan efek NoSchedule ke node mynode:

kubectl taint nodes mynode dedicated=experimental:NoSchedule

Anda juga dapat menambahkan taint ke node yang memiliki label tertentu menggunakan pemilih -l beserta label dan nilai yang ditentukan:

kubectl taint nodes -l LABEL=LABEL_VALUE KEY=VALUE:EFFECT

Misalnya, perintah berikut menambahkan taint dengan kunci dedicated-pool ke node GKE dalam node pool my_pool:

kubectl taint nodes -l cloud.google.com/gke-nodepool=my_pool dedicated-pool=my_pool:NoSchedule

Memeriksa taint untuk node

Untuk melihat taint untuk node, gunakan alat command line kubectl.

  1. Dapatkan daftar semua node di cluster Anda dengan menjalankan perintah berikut:

    kubectl get nodes
    
  2. Periksa node dengan menjalankan perintah berikut:

    kubectl describe node NODE_NAME
    
  3. Pada output yang ditampilkan, cari kolom Taints. Outputnya mirip dengan yang berikut ini:

    Taints:  dedicated-pool=mypool:NoSchedule
    

Menghapus taint dari node

Anda dapat menggunakan kubectl taint untuk menghapus taint. Anda dapat menghapus taint berdasarkan kunci, nilai kunci, atau efek kunci.

Misalnya, perintah berikut menghapus semua taint dengan kunci dedicated dari node mynode:

kubectl taint nodes mynode dedicated-

Menghapus semua taint dari node pool

Untuk menghapus semua taint dari node pool, jalankan perintah berikut:

gcloud beta container node-pools update POOL_NAME \
--node-taints="" \
--cluster=CLUSTER_NAME

Ganti kode berikut:

  • POOL_NAME: nama node pool yang akan diubah.
  • CLUSTER_NAME: nama cluster tempat node pool dibuat.

Langkah berikutnya