Bagikan melalui


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 jika tolerationSeconds 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