Gunakan taint node dalam kluster Azure Kubernetes Service (AKS)

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 jika tolerationSeconds ditentukan.
  • 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

  1. Buat kumpulan simpul dengan taint menggunakan perintah az aks nodepool add dan gunakan parameter --node-taints untuk menentukan nilai sku=gpu:NoSchedule untuk 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
    
  2. Periksa status kumpulan simpul.

  3. Periksa apakah taint sudah disetel pada node.

Memperbarui kumpulan simpul untuk menambahkan taint pada simpul

  1. Perbarui kumpulan simpul untuk menambahkan taint simpul menggunakan perintah az aks nodepool update dan gunakan parameter --node-taints untuk menentukan sku=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
    
  2. Periksa status kumpulan simpul.

  3. Periksa apakah taint telah diatur pada node.

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:

Prasyarat dan batasan

  • Anda memerlukan versi Azure CLI 3.0.0b3 atau yang lebih baru diinstal dan dikonfigurasi. Jalankan az --version untuk 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 NodeInitializationTaints ada 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-credentials perintah .

    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 add perintah atau az 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

  1. Daftarkan penanda fitur NodeInitializationTaintsPreview menggunakan perintah az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    

    Dibutuhkan beberapa menit agar status menampilkan Terdaftar.

  2. Verifikasi status pendaftaran menggunakan az feature show perintah .

    az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    
  3. 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

  1. Buat kluster dengan taint inisialisasi node menggunakan perintah az aks create dan parameter --node-init-taints untuk menentukan sku=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
    
  2. Periksa status kumpulan simpul.

  3. Periksa apakah taint sudah disetel pada node.

Memperbarui kluster untuk menambahkan taint inisialisasi node

  1. Perbarui kluster untuk menambahkan taint inisialisasi node menggunakan perintah az aks update dan parameter --node-init-taints untuk menentukan sku=gpu:NoSchedule bagi 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"
    
  2. Periksa status kumpulan simpul.

  3. Periksa apakah taint sudah disetel pada node.

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_NAME
    

    Jika Anda menerapkan taint pada simpul, output dari contoh berikut akan menunjukkan bahwa kumpulan simpul <node-pool-name> terdiri dari Creating simpul dengan atribut yang ditentukan nodeTaints.

    [
      {
        ...
        "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 simpul Creating dengan nodeInitializationTaints yang 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_NAME
    

    Jika Anda menerapkan taint node, contoh output berikut menunjukkan bahwa pool node <node-pool-name> memiliki taint yang ditentukan Taints:

    [
        ...
        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

  1. Ikuti langkah-langkah dalam Menghapus taint inisialisasi node untuk sementara untuk menghapus taint inisialisasi node menggunakan API Kubernetes.

  2. 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_NAME
    

    Jika Anda menghapus taint simpul, contoh output berikut menunjukkan bahwa kumpulan <node-pool-name> simpul tidak memiliki taint yang dihapus di bawah Taints:

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: 
        ...
        ],
        ...
     ...
    ]
    

Langkah berikutnya