Menggunakan taint simpul dalam AKS yang diaktifkan oleh kluster Azure Arc
Berlaku untuk: Azure Local, versi 23H2
Artikel ini menjelaskan cara menggunakan taint simpul dalam kluster 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 menginstruksikan simpul untuk menolak serangkaian 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.
Sebelum Anda mulai
- 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.
- Saat membuat kumpulan simpul, Anda dapat menambahkan taint ke dalamnya. Ketika Anda menambahkan taint, semua node dalam kumpulan node itu juga akan mendapatkan taint tersebut.
Penting
Anda harus menambahkan taint atau label ke simpul untuk seluruh kumpulan simpul menggunakan az aksarc nodepool
. Kami tidak menyarankan penggunaan kubectl
untuk menerapkan taint atau label ke simpul individual dalam kumpulan simpul.
Mengatur taint kumpulan simpul
Buat kumpulan simpul dengan taint menggunakan az aksarc nodepool add
perintah . Tentukan nama taintnp
dan gunakan --node-taints
parameter untuk menentukan sku=gpu:NoSchedule
taint:
az aksarc nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name taintnp \
--node-count 1 \
--node-taints sku=gpu:NoSchedule \
--no-wait
Periksa status kumpulan simpul menggunakan az aksarc nodepool list
perintah :
az aksarc nodepool list -g myResourceGroup --cluster-name myAKSCluster
Contoh output berikut menunjukkan bahwa kumpulan taintnp
simpul membuat simpul dengan yang ditentukan nodeTaints
:
[
{
...
"count": 1,
...
"name": "taintnp",
...
"provisioningState": "Succeeded",
...
"nodeTaints": [
"sku=gpu:NoSchedule"
],
...
},
...
]
Informasi taint terlihat di Kubernetes untuk menangani aturan penjadwalan simpul. Penjadwal Kubernetes dapat menggunakan taint dan toleransi untuk membatasi beban kerja mana yang dapat berjalan pada simpul.
- Taint diterapkan pada simpul yang menunjukkan hanya Pod-Pod tertentu yang dapat dijadwalkan padanya.
- Toleransi kemudian diterapkan ke pod yang memungkinkan mereka untuk "mentolerir" taint node.
Mengatur toleransi kumpulan simpul
Pada langkah sebelumnya, Anda menerapkan sku=gpu:NoSchedule
taint saat membuat kumpulan simpul. Contoh manifes YAML berikut menggunakan toleransi untuk memungkinkan penjadwal Kubernetes menjalankan pod NGINX pada node di kumpulan simpul tersebut:
Buat file bernama nginx-toleration.yaml dan salin/tempel contoh YAML berikut:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
name: mypod
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 1
memory: 2G
tolerations:
- key: "sku"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
Jadwalkan Pod menggunakan perintah kubectl apply
:
kubectl apply -f nginx-toleration.yaml
Perlu beberapa detik untuk menjadwalkan Pod dan menarik gambar NGINX.
Periksa status menggunakan kubectl describe pod
perintah :
kubectl describe pod mypod
Contoh output ringkas berikut menunjukkan bahwa sku=gpu:NoSchedule
toleransi diterapkan. Di bagian Peristiwa , penjadwal menetapkan pod ke simpul moc-lbeof1gn6x3
:
[...]
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
sku=gpu:NoSchedule
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 54s default-scheduler Successfully assigned default/mypod to moc-lbeof1gn6x3
Normal Pulling 53s kubelet Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
Normal Pulled 48s kubelet Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" in 3.025148695s (3.025157609s including waiting)
Normal Created 48s kubelet Created container
Normal Started 48s kubelet Started container
Hanya pod yang menerapkan toleransi ini yang dapat dijadwalkan pada simpul di taintnp
. Pod lain dijadwalkan dalam kumpulan simpul nodepool1 . Jika Anda membuat lebih banyak kumpulan simpul, Anda dapat menggunakan taint dan toleransi untuk membatasi pod apa yang dapat dijadwalkan pada sumber daya simpul tersebut.
Memperbarui kumpulan simpul kluster untuk menambahkan taint simpul
Perbarui kluster untuk menambahkan taint simpul menggunakan az aksarc update
perintah dan parameter yang --node-taints
akan ditentukan sku=gpu:NoSchedule
untuk taint. Semua taint yang ada diganti dengan nilai baru. Taint lama dihapus:
az aksarc update -g myResourceGroup --cluster-name myAKSCluster --name taintnp --node-taints "sku=gpu:NoSchedule"
Langkah berikutnya
- Gunakan label dalam kluster AKS dengan dukungan Azure Arc.