Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara menggunakan node taints dalam kluster Azure Kubernetes Service (AKS).
Gambaran Umum
Mekanisme penjadwalan AKS bertanggung jawab untuk menempatkan pod ke simpul dan didasarkan pada penjadwal Kubernetes upstream, kube-scheduler. Anda dapat membatasi pod untuk berjalan pada simpul tertentu dengan melampirkan pod pada satu set simpul menggunakan afinitas node atau dengan menginstruksikan simpul untuk mengusir sekumpulan pod menggunakan taint node, yang berinteraksi dengan penjadwal AKS.
Taint node berfungsi dengan menandai simpul sehingga penjadwal menghindari penempatan pod tertentu pada simpul yang ditandai. Anda dapat menempatkan tolerations pada pod agar penjadwal dapat menempatkan pod tersebut pada simpul dengan taint yang cocok. Taint dan Toleransi bekerja sama untuk membantu Anda mengontrol bagaimana penjadwal menempatkan pod ke node. Untuk informasi selengkapnya, lihat contoh kasus penggunaan taint dan toleransi.
Taint adalah pasangan kunci-nilai yang memiliki efek. Ada tiga nilai untuk bidang efek saat menggunakan taint node: NoExecute, NoSchedule, dan PreferNoSchedule.
-
NoExecute: Pod yang sudah berjalan pada node segera diusir jika tidak memiliki toleransi yang sesuai. Jika pod memiliki toleransi yang cocok, pod mungkin dikeluarkan jikatolerationSecondsditentukan. -
NoSchedule: Hanya pod dengan toleransi yang cocok yang akan ditempatkan pada simpul ini. Pod yang sudah ada tidak akan diusir. -
PreferNoSchedule: Penjadwal menghindari menempatkan pod yang tidak memiliki toleransi yang sesuai.
Opsi penandaan node
Ada dua jenis taint simpul yang dapat diterapkan ke node AKS Anda: taint simpul dan taint inisialisasi simpul.
- Taint node dimaksudkan untuk tetap permanen di simpul agar pod dijadwalkan sesuai afinitas node. Taint simpul hanya dapat ditambahkan, diperbarui, atau dihapus sepenuhnya menggunakan API AKS.
- Taint inisialisasi node ditempatkan pada node saat booting dan dimaksudkan untuk digunakan sementara, seperti dalam skenario di mana mungkin Anda memerlukan waktu tambahan untuk menyiapkan node Anda. Anda dapat menghapus taint inisialisasi node menggunakan API Kubernetes, namun keberadaan taint tersebut tidak dijamin selama siklus hidup node. Ini akan muncul pada replika baru dari node ketika diskalakan atau pada semua replika ketika node ditingkatkan. Jika Anda ingin menghapus taint inisialisasi sepenuhnya, Anda dapat menghapusnya menggunakan API AKS setelah menghapus taint dari node menggunakan API Kubernetes. Setelah Anda menghapus taint inisialisasi dari spesifikasi kluster menggunakan API AKS, node baru tidak memiliki taint inisialisasi tersebut. Jika taint pada awal inisialisasi masih ada di simpul saat ini, Anda dapat menghapusnya secara permanen dengan melakukan operasi upgrade gambar simpul.
Catatan
Taint dan label node yang diterapkan menggunakan API kumpulan simpul AKS tidak dapat dimodifikasi dari API Kubernetes maupun sebaliknya. Modifikasi pada pencemaran sistem tidak diizinkan.
Ini tidak berlaku untuk taint pada saat inisialisasi node.
Menggunakan taint pada node
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.
Buat kumpulan node dengan noda simpul
Buat kumpulan simpul dengan taint menggunakan perintah
az aks nodepool adddan gunakan parameter--node-taintsuntuk menentukan nilaisku=gpu:NoScheduleuntuk 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 pada simpul
Perbarui kumpulan simpul untuk menambahkan taint simpul menggunakan perintah
az aks nodepool updatedan gunakan parameter--node-taintsuntuk menentukansku=gpu:NoScheduletaint.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 dengan sistem opt-in. 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:
- Kebijakan dukungan AKS
- TANYA JAWAB UMUM Azure support
Prasyarat dan batasan
- Anda memerlukan versi Azure CLI
3.0.0b3atau yang lebih baru diinstal dan dikonfigurasi. Jalankanaz --versionuntuk menemukan versinya. Jika Anda perlu menginstal atau meningkatkan, lihat Install Azure CLI. - Anda hanya dapat menerapkan taint inisialisasi saat membuat atau meningkatkan kluster ketika menggunakan API AKS. Jika menggunakan templat ARM yang akan menghasilkan operasi pada tingkat Kluster Terkelola, Anda dapat menentukan taint inisialisasi node saat pembuatan dan pembaruan pool node. Operasi tingkat agentpool diblokir ketika
NodeInitializationTaintsada di isi permintaan. - Anda tidak dapat menerapkan taint inisialisasi ke kumpulan simpul Windows menggunakan Azure CLI.
Dapatkan kredensial untuk kluster Anda
Dapatkan kredensial untuk kluster AKS Anda menggunakan
az aks get-credentialsperintah .az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Instal ekstensi aks-preview Azure CLI
Daftarkan atau perbarui ekstensi aks-preview menggunakan
az extension addperintah 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 penanda fitur
Daftarkan penanda fitur
NodeInitializationTaintsPreviewmenggunakan perintahaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Dibutuhkan beberapa menit agar status menampilkan Terdaftar.
Verifikasi status pendaftaran menggunakan
az feature showperintah .az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Saat status mencerminkan Registered, perbarui pendaftaran penyedia sumber daya Microsoft.ContainerService menggunakan perintah
az provider register.az provider register --namespace Microsoft.ContainerService
Membuat kluster dengan taint inisialisasi node
Buat kluster dengan taint inisialisasi node menggunakan perintah
az aks createdan parameter--node-init-taintsuntuk menentukansku=gpu:NoScheduleuntuk 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 perintah
az aks updatedan parameter--node-init-taintsuntuk menentukansku=gpu:NoSchedulebagi taint.Penting
Saat memperbarui kluster dengan taint inisialisasi pada node, taint tersebut berlaku untuk semua kumpulan node dalam kluster. Jika simpul Anda menggunakan VMSS, Anda dapat melihat pembaruan pada taint awal simpul setelah model VMSS pada simpul diperbarui (misalnya, setelah operasi pemutakhiran versi gambar simpul). Taint initialisasi tidak akan muncul pada node Anda sampai operasi yang menyebabkan pembaruan model VMSS terjadi.
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 node pool menggunakan perintah
az aks nodepool list.az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAMEJika Anda menerapkan taint pada simpul, output dari contoh berikut akan menunjukkan bahwa kumpulan simpul
<node-pool-name>terdiri dariCreatingsimpul dengan atribut yang ditentukannodeTaints.[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]Jika Anda menerapkan taint inisialisasi node, output contoh berikut menunjukkan bahwa kolam simpul
<node-pool-name>terdiri dari simpulCreatingdengannodeInitializationTaintsyang ditentukan:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Periksa apakah taint diatur pada node
Periksa taint node dan taint inisialisasi node dalam konfigurasi node menggunakan perintah
kubectl describe node.kubectl describe node $NODE_NAMEJika Anda menerapkan taint node, contoh output berikut menunjukkan bahwa pool node
<node-pool-name>memiliki taint yang ditentukanTaints:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Penting
Jika simpul Anda menggunakan VMSS, taint inisialisasi node tidak akan terlihat pada node aktual di kluster Anda hingga operasi yang memicu pembaruan model VMSS terjadi (misalnya, peningkatan versi Kubernetes atau peningkatan versi gambar simpul).
Menghapus noda simpul
Menghapus taint simpul tertentu
Hapus taint simpul menggunakan perintah
az aks nodepool update. Contoh perintah berikut menghapus taint node dari kumpulan node.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-taints ""
Hapus semua penandaan simpul
Hapus semua taint dari kelompok node menggunakan perintah
az aks nodepool update. Perintah contoh berikut menghapus semua penanda node dari kolam node.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 pada node:
- Hapus sementara taint inisialisasi node menggunakan API Kubernetes. Jika Anda menghapusnya dengan cara ini, taint akan muncul kembali setelah penskalaan atau peningkatan node terjadi. Simpul baru masih memiliki pengaruh inisialisasi node setelah peningkatan skala. Taint inisialisasi node muncul di semua node setelah peningkatan.
- Hapus taint inisialisasi node secara permanen dengan menghilangkan taint dari node menggunakan API Kubernetes, lalu hapus kembali taint tersebut 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 sudah ada mungkin akan muncul kembali setelah peningkatan, bersamaan dengan taint inisialisasi baru.
Menghapus taint inisialisasi node untuk sementara
Hapus sementara taint inisialisasi node menggunakan perintah
kubectl taint nodes.Perintah ini menghilangkan noda hanya dari simpul yang ditentukan. Jika Anda ingin menghapus taint dari setiap simpul di kumpulan tersebut, Anda perlu menjalankan perintah pada setiap simpul yang taint-nya ingin Anda hapus.
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 dengan menggunakan API AKS dengan perintah
az aks update. Perintah ini menghapuskan taint inisialisasi node dari setiap simpul di kluster.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Periksa apakah taint telah dihapus dari node
Periksa taint node dan taint inisialisasi node dalam konfigurasi node menggunakan perintah
kubectl describe node.kubectl describe node $NODE_NAMEJika 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 lebih lanjut tentang contoh penerapan taint dan toleransi.
- Pelajari selengkapnya tentang praktik terbaik untuk fitur penjadwal AKS canggih.
- Pelajari lebih lanjut tentang label Kubernetes di dokumentasi label Kubernetes.