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
, atauNoExecute
.KEY=VALUE
: pasangan nilai kunci yang terkait denganEFFECT
.
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:
Buka halaman Google Kubernetes Engine di Konsol Google Cloud.
Klik add_box Create.
Konfigurasi cluster Anda sesuai keinginan.
Dari panel navigasi, di bagian Node Pools, luaskan node pool yang ingin Anda ubah, lalu klik Metadata.
Di bagian Node taints, klik add Add Taint.
Dalam menu drop-down Effect, pilih efek yang diinginkan.
Masukkan pasangan nilai kunci yang diinginkan di kolom Kunci dan Nilai.
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
, atauNoExecute
.KEY=VALUE
: pasangan nilai kunci yang terkait denganEFFECT
.
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:
Buka halaman Google Kubernetes Engine di Konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Di halaman Cluster details, klik add_box Add Node Pool.
Dari panel navigasi, klik Metadata.
Di bagian Node taint, klik add Add Taint.
Pilih efek yang diinginkan dalam menu drop-down Effect.
Masukkan pasangan nilai kunci yang diinginkan di kolom Kunci dan Nilai.
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
.
Dapatkan daftar semua node di cluster Anda dengan menjalankan perintah berikut:
kubectl get nodes
Periksa node dengan menjalankan perintah berikut:
kubectl describe node NODE_NAME
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
- Pelajari lebih lanjut node pool.
- Baca dokumentasi Kubernetes untuk mengetahui taint dan toleransi.
- Baca dokumentasi
kubectl taint