Menggunakan taint simpul di kluster Azure Kubernetes Service (AKS)
Artikel ini menjelaskan cara menggunakan taint simpul di kluster Azure Kubernetes Service (AKS).
Gambaran Umum
Mekanisme penjadwalan AKS bertanggung jawab untuk menempatkan pod ke simpul dan didasarkan pada penjadwal Kubernetes upstream, penjadwal kube. Anda dapat membatasi pod untuk berjalan pada simpul tertentu dengan melampirkan pod ke satu set simpul menggunakan afinitas node atau dengan menginstruksikan simpul untuk mengusir sekumpulan pod menggunakan taint simpul, yang berinteraksi dengan penjadwal AKS.
Taint node berfungsi dengan menandai simpul sehingga penjadwal menghindari penempatan pod tertentu pada simpul yang ditandai. Anda dapat menempatkan toleransi pada pod untuk memungkinkan penjadwal menjadwalkan pod tersebut pada simpul dengan taint yang cocok. Taint dan toleransi bekerja sama untuk membantu Anda mengontrol bagaimana penjadwal menempatkan pod ke simpul. Untuk informasi selengkapnya, lihat contoh kasus penggunaan taint dan toleransi.
Taint adalah pasangan kunci-nilai dengan efek. Ada tiga nilai untuk bidang efek saat menggunakan taint simpul: NoExecute
, NoSchedule
, dan PreferNoSchedule
.
NoExecute
: Pod yang sudah berjalan pada simpul segera dikeluarkan jika tidak memiliki toleransi yang cocok. Jika pod memiliki toleransi yang cocok, pod mungkin dikeluarkan jikatolerationSeconds
ditentukan.NoSchedule
: Hanya pod dengan toleransi yang cocok yang ditempatkan pada simpul ini. Pod yang ada tidak dikeluarkan.PreferNoSchedule
: Penjadwal menghindari penempatan pod apa pun yang tidak memiliki toleransi yang cocok.
Opsi taint node
Ada dua jenis taint simpul yang dapat diterapkan ke simpul AKS Anda: taint node dan taint inisialisasi node.
- Taint node dimaksudkan untuk tetap secara permanen pada simpul untuk menjadwalkan pod dengan afinitas node. Taint simpul hanya dapat ditambahkan, diperbarui, atau dihapus sepenuhnya menggunakan API AKS.
- Taint inisialisasi node ditempatkan pada simpul pada waktu boot dan dimaksudkan untuk digunakan sementara, seperti dalam skenario di mana Anda mungkin memerlukan waktu tambahan untuk menyiapkan simpul Anda. Anda dapat menghapus taint inisialisasi node menggunakan API Kubernetes dan tidak dijamin selama siklus hidup simpul. Simpul muncul hanya setelah node ditingkatkan atau ditingkatkan/direimage. Simpul baru masih memiliki taint inisialisasi node setelah penskalaan. Taint inisialisasi node muncul di semua simpul setelah peningkatan. Jika ingin menghapus taint inisialisasi sepenuhnya, Anda dapat menghapusnya menggunakan API AKS setelah membatalkan node menggunakan API Kubernetes. Setelah Anda menghapus taint inisialisasi dari spesifikasi kluster menggunakan API AKS, simpul yang baru dibuat tidak muncul dengan taint inisialisasi tersebut. Jika taint inisialisasi masih ada pada simpul yang ada, Anda dapat menghapusnya secara permanen dengan melakukan operasi peningkatan gambar simpul.
Catatan
Taint node dan label yang diterapkan menggunakan API kumpulan simpul AKS tidak dapat dimodifikasi dari API Kubernetes dan sebaliknya. Modifikasi pada taint sistem tidak diizinkan.
Ini tidak berlaku untuk taint inisialisasi node.
Menggunakan taint simpul
Prasyarat
Artikel ini mengasumsikan Anda memiliki kluster AKS yang sudah ada. Jika Anda memerlukan kluster AKS, Anda dapat membuatnya menggunakan Azure CLI, Azure PowerShell, atau portal Azure.
Membuat kumpulan simpul dengan taint simpul
Buat kumpulan simpul dengan taint menggunakan
az aks nodepool add
perintah dan gunakan--node-taints
parameter untuk menentukansku=gpu:NoSchedule
taint.az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 1 \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Memperbarui kumpulan simpul untuk menambahkan taint simpul
Perbarui kumpulan simpul untuk menambahkan taint simpul menggunakan
az aks nodepool update
perintah dan gunakan--node-taints
parameter untuk menentukansku=gpu:NoSchedule
taint.az aks nodepool update \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Menggunakan taint inisialisasi node (pratinjau)
Penting
Fitur pratinjau AKS tersedia berdasarkan layanan mandiri. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan mereka dikecualikan dari perjanjian tingkat layanan dan garansi terbatas. Pratinjau AKS sebagian dicakup oleh dukungan pelanggan berdasarkan upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:
Prasyarat dan batasan
- Anda memerlukan versi Azure CLI atau yang
3.0.0b3
lebih baru diinstal dan dikonfigurasi. Jalankanaz --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI. - Anda hanya dapat menerapkan taint inisialisasi melalui pembuatan atau peningkatan kluster saat menggunakan API AKS. Jika menggunakan templat ARM, Anda dapat menentukan taint inisialisasi node selama pembuatan dan pembaruan kumpulan simpul.
- Anda tidak dapat menerapkan taint inisialisasi ke kumpulan simpul Windows menggunakan Azure CLI.
Dapatkan informasi masuk untuk kluster Anda
Dapatkan kredensial untuk kluster AKS Anda menggunakan
az aks get-credentials
perintah .az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Memasang ekstensi aks-preview
Azure CLI
Daftarkan atau perbarui ekstensi aks-preview menggunakan
az extension add
perintah atauaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Daftarkan NodeInitializationTaintsPreview
bendera fitur
Daftarkan
NodeInitializationTaintsPreview
bendera fitur menggunakanaz feature register
perintah .az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Dibutuhkan beberapa menit agar status menampilkan Terdaftar.
Verifikasi status pendaftaran menggunakan
az feature show
perintah .az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Saat status mencerminkan Terdaftar, refresh pendaftaran penyedia sumber daya Microsoft.ContainerService menggunakan
az provider register
perintah .az provider register --namespace Microsoft.ContainerService
Membuat kluster dengan taint inisialisasi node
Buat kluster dengan taint inisialisasi node menggunakan
az aks create
perintah dan--node-initialization-taints
parameter yang akan ditentukansku=gpu:NoSchedule
untuk taint.Penting
Taint inisialisasi node yang Anda tentukan berlaku untuk semua kumpulan simpul dalam kluster. Untuk menerapkan taint inisialisasi ke simpul tertentu, Anda dapat menggunakan templat ARM alih-alih CLI.
az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-count 1 \ --node-init-taints "sku=gpu:NoSchedule" \ --generate-ssh-keys
Memperbarui kluster untuk menambahkan taint inisialisasi node
Perbarui kluster untuk menambahkan taint inisialisasi node menggunakan
az aks update
perintah dan--node-initialization-taints
parameter yang akan ditentukansku=gpu:NoSchedule
untuk taint.Penting
Saat memperbarui kluster dengan taint inisialisasi node, taint berlaku untuk semua kumpulan simpul dalam kluster. Anda dapat melihat pembaruan pada taint inisialisasi node pada simpul setelah operasi reimage.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
Periksa status kumpulan simpul
Setelah menerapkan taint node atau taint inisialisasi, periksa status kumpulan simpul menggunakan
az aks nodepool list
perintah .az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
Jika Anda menerapkan taint simpul, contoh output berikut menunjukkan bahwa kumpulan
<node-pool-name>
simpul adalahCreating
simpul dengan yang ditentukannodeTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Jika Anda menerapkan taint inisialisasi node, contoh output berikut menunjukkan bahwa kumpulan
<node-pool-name>
simpul adalahCreating
simpul dengan yang ditentukannodeInitializationTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Periksa apakah taint diatur pada simpul
Periksa taint node dan taint inisialisasi node dalam konfigurasi node menggunakan
kubectl describe node
perintah .kubectl describe node $NODE_NAME
Jika Anda menerapkan taint simpul, contoh output berikut menunjukkan bahwa kumpulan
<node-pool-name>
simpul memiliki yang ditentukanTaints
:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Menghapus taint simpul
Menghapus taint simpul tertentu
Hapus taint simpul menggunakan
az aks nodepool update
perintah . Contoh perintah berikut menghapus"sku=gpu:NoSchedule"
taint simpul dari kumpulan simpul.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-taints "sku=gpu:NoSchedule"
Hapus semua taint simpul
Hapus semua taint simpul dari kumpulan simpul menggunakan
az aks nodepool update
perintah . Contoh perintah berikut menghapus semua taint simpul dari kumpulan simpul.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --name $NODE_POOL_NAME \ --node-taints ""
Menghapus taint inisialisasi node
Anda memiliki opsi berikut untuk menghapus taint inisialisasi node dari simpul:
- Hapus taint inisialisasi node untuk sementara menggunakan API Kubernetes. Jika Anda menghapusnya dengan cara ini, taint muncul kembali setelah penskalaan atau peningkatan simpul terjadi. Simpul baru masih memiliki taint inisialisasi node setelah penskalaan. Taint inisialisasi node muncul di semua simpul setelah peningkatan.
- Hapus taint inisialisasi node secara permanen dengan membatalkan node menggunakan API Kubernetes, lalu hapus taint menggunakan API AKS. Setelah taint inisialisasi dihapus dari spesifikasi kluster menggunakan API AKS, simpul yang baru dibuat setelah operasi pencitraan ulang tidak lagi memiliki taint inisialisasi.
Saat Anda menghapus semua kemunculan taint inisialisasi dari replika kumpulan simpul, taint inisialisasi yang ada mungkin muncul kembali setelah peningkatan dengan taint inisialisasi baru.
Menghapus taint inisialisasi node untuk sementara
Hapus taint inisialisasi node untuk sementara menggunakan
kubectl taint nodes
perintah .Perintah ini menghapus taint hanya dari simpul yang ditentukan. Jika Anda ingin menghapus taint dari setiap simpul di kumpulan simpul, Anda perlu menjalankan perintah untuk setiap simpul yang Anda inginkan untuk menghapus taint.
kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
Setelah dihapus, taint inisialisasi node muncul kembali setelah penskalaan atau peningkatan simpul terjadi.
Menghapus taint inisialisasi node secara permanen
Ikuti langkah-langkah dalam Menghapus taint inisialisasi node untuk sementara untuk menghapus taint inisialisasi node menggunakan API Kubernetes.
Hapus taint dari simpul menggunakan API AKS menggunakan
az aks update
perintah . Perintah ini menghapus taint inisialisasi node dari setiap simpul dalam kluster.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Periksa apakah taint telah dihapus dari simpul
Periksa taint node dan taint inisialisasi node dalam konfigurasi node menggunakan
kubectl describe node
perintah .kubectl describe node $NODE_NAME
Jika Anda menghapus taint simpul, contoh output berikut menunjukkan bahwa kumpulan
<node-pool-name>
simpul tidak memiliki taint yang dihapus di bawahTaints
:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Langkah berikutnya
- Pelajari selengkapnya tentang contoh kasus penggunaan untuk taint dan toleransi.
- Pelajari selengkapnya tentang praktik terbaik untuk fitur penjadwal AKS tingkat lanjut.
- Pelajari lebih lanjut label Kubernetes dalam dokumentasi label Kubernetes.
Azure Kubernetes Service