Bagikan melalui


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

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

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

  3. Periksa apakah taint diatur pada simpul.

Memperbarui kumpulan simpul untuk menambahkan taint simpul

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

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. Jalankan az --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 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 bendera fitur

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

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

  1. Buat kluster dengan taint inisialisasi node menggunakan az aks create perintah dan --node-initialization-taints parameter yang akan ditentukan 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 diatur pada simpul.

Memperbarui kluster untuk menambahkan taint inisialisasi node

  1. Perbarui kluster untuk menambahkan taint inisialisasi node menggunakan az aks update perintah dan --node-initialization-taints parameter yang akan ditentukan sku=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"
    
  2. Periksa status kumpulan simpul.

  3. Periksa apakah taint diatur pada simpul.

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 adalah Creating simpul dengan 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, contoh output berikut menunjukkan bahwa kumpulan <node-pool-name> simpul adalah Creating simpul dengan yang ditentukan nodeInitializationTaints:

    [
      {
        ...
        "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 ditentukan Taints:

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

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

  2. 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 bawah Taints:

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

Langkah berikutnya