Mengubah ukuran kumpulan node di Azure Kubernetes Service (AKS)

Anda mungkin ingin mengubah ukuran komputer virtual (VM) Anda untuk mengakomodasi peningkatan jumlah penyebaran atau untuk menjalankan beban kerja yang lebih besar. Mengubah ukuran instans AKS secara langsung tidak didukung saat menggunakan Virtual Machine Scale Sets di AKS, seperti yang diuraikan dalam kebijakan dukungan untuk AKS:

Simpul agen AKS muncul di portal Microsoft Azure sebagai sumber daya IaaS Azure biasa. Tetapi mesin virtual ini disebarkan ke grup sumber daya Azure kustom (biasanya diawali dengan MC_*). Anda tidak dapat membuat kustomisasi langsung ke simpul ini menggunakan API atau sumber daya IaaS. Setiap perubahan kustom yang tidak dilakukan melalui API AKS tidak akan bertahan melalui peningkatan, skala, pembaruan, atau boot ulang.

Dalam artikel ini, Anda mempelajari metode yang direkomendasikan untuk mengubah ukuran kumpulan simpul dengan membuat kumpulan simpul baru dengan ukuran SKU yang diinginkan, mengotori dan menguras simpul yang ada, lalu menghapus kumpulan simpul yang ada.

Penting

Metode ini khusus untuk kluster AKS berbasis Virtual Machine Scale Sets. Saat menggunakan kumpulan simpul berbasis Komputer Virtual, Anda dapat dengan mudah memperbarui ukuran VM di kumpulan simpul yang ada menggunakan satu perintah Azure CLI dan memiliki beberapa ukuran VM dalam kumpulan simpul yang sama. Untuk informasi selengkapnya, lihat dokumentasi kumpulan simpul Komputer Virtual.

Mengubah ukuran kumpulan simpul VMSS di tempat (pratinjau)

Penting

Fitur pratinjau AKS tersedia atas dasar layanan mandiri dan pendaftaran sukarela. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan pratinjau tersebut dikecualikan dari perjanjian tingkat layanan (SLA) serta garansi terbatas. Fitur pratinjau AKS sebagian didukung oleh dukungan pelanggan sebatas upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:

Anda sekarang dapat mengubah ukuran VM (SKU) dari kumpulan simpul berbasis VMSS yang ada dalam satu perintah menggunakan az aks nodepool update --node-vm-size <new-size>. Saat Anda memicu pembaruan ini, penyedia sumber daya AKS melakukan peningkatan bergulir dengan:

  1. Menambahkan node baru dengan ukuran VM yang ditargetkan.
  2. Mengisolasi dan menguras node lama.
  3. Menghapus simpul lama.

Ini menghindari alur kerja manual pembuatan/cordon/drain/penghapusan yang dijelaskan di bagian lain artikel ini.

Cara kerja peluncuran pengubahan ukuran

Peluncuran pengubahan ukuran menggunakan mesin peningkatan bergulir yang sama dengan peningkatan gambar simpul dan peningkatan versi Kubernetes, sehingga mematuhi pengaturan terkait peningkatan berikut yang sudah dikonfigurasi pada kumpulan simpul. Secara khusus, penyesuaian ukuran mematuhi hal-hal berikut:

  • Lonjakan maks (--max-surge): Mengontrol berapa banyak simpul tambahan dengan ukuran VM target yang ditambahkan selama peluncuran. Nilai yang lebih tinggi mengubah ukuran kumpulan lebih cepat tetapi mengonsumsi lebih banyak komputasi dan kuota IP; nilai yang lebih rendah lebih lambat tetapi kurang mengganggu. Default AKS adalah 1, dan 33% direkomendasikan untuk kumpulan simpul produksi.
  • Batas waktu pengosongan node (--drain-timeout): Berapa lama AKS menunggu pengeluaran pod pada setiap node lama sebelum menghapusnya dengan paksa. Defaultnya adalah 30 menit. Padukan ini dengan PodDisruptionBudgets yang sesuai agar beban kerja dapat dipindahkan dengan aman.
  • Durasi rendam node (--node-soak-duration): Berapa lama AKS menunggu setelah node baru menjadi Siap sebelum melanjutkan ke batch berikutnya. Berguna untuk memungkinkan beban kerja stabil pada ukuran VM baru sebelum melanjutkan peluncuran.

Karena pengubahan ukuran menggunakan kembali alur peningkatan, prasyarat yang sama berlaku: pastikan langganan Anda memiliki kapasitas yang cukup untuk ukuran VM target dan alamat IP subnet yang tersedia bagi node surge, serta PodDisruptionBudgets Anda mengizinkan setidaknya satu replika untuk digusur pada satu waktu; jika tidak, proses pengubahan ukuran dapat terhambat selama proses drain. Untuk rekomendasi secara menyeluruh, lihat Praktik terbaik untuk peningkatan versi kumpulan node AKS.

Prerequisites

Mengubah ukuran kumpulan simpul

az aks nodepool update Gunakan perintah dengan --node-vm-size parameter untuk mengubah ukuran VM dari kumpulan simpul berbasis VMSS yang ada:

az aks nodepool update \
    --resource-group MyResourceGroup \
    --cluster-name MyManagedCluster \
    --name nodepool1 \
    --node-vm-size Standard_D4s_v3

Validasi dan kombinasi yang tidak didukung

Penyedia sumber daya AKS memvalidasi perubahan ukuran permintaan dan memblokir perubahan ukuran VM yang tidak kompatibel. Perubahan berikut tidak didukung dalam pengubahan ukuran VMSS di tempat:

  • Mengubah jenis pengontrol disk (misalnya, SCSI ke NVMe).
  • Mengubah arsitektur CPU (misalnya, x64 ke ARM64).
  • Mengubah dukungan komputasi rahasia (misalnya, mengaktifkan atau menonaktifkan SNP).
  • Mengubah generasi hypervisor (misalnya, V1 ke V2).
  • Menggabungkan pengubahan ukuran dengan peningkatan versi Kubernetes atau perubahan jumlah simpul dalam operasi yang sama.

Jika ukuran VM target Anda memerlukan salah satu perubahan di atas, gunakan alur kerja cordon-and-drain manual yang dijelaskan di bagian berikut sebagai gantinya.

Catatan

Pengubahan ukuran langsung memerlukan kapasitas tambahan sementara untuk menyediakan simpul baru dengan ukuran VM target sebelum mengosongkan simpul lama. Jika kumpulan simpul dikonfigurasi dengan --max-surge 0 (yaitu, --max-unavailable berlaku), permintaan mengubah ukuran ditolak dengan 400 Bad Request. Untuk melanjutkan, atur --max-surge ke setidaknya 1 saat mengubah ukuran menggunakan

az aks nodepool update \
    --resource-group MyResourceGroup \
    --cluster-name MyManagedCluster \
    --name nodepool1 \
    --node-vm-size Standard_D4s_v3 \
    --max-surge 33%

dan secara opsional memulihkan nilai asli --max-surge dan --max-unavailable Anda setelah pengubahan ukuran selesai.

Buat kumpulan node baru dengan SKU yang diinginkan

Catatan

Setiap kluster AKS harus berisi setidaknya satu kumpulan node sistem dengan setidaknya satu node. Dalam contoh ini, kita menggunakan --modeSystem untuk menambahkan kumpulan simpul sistem sebagai pengganti kumpulan simpul sistem yang ingin kita sesuaikan ukurannya. Anda dapat memperbarui mode kumpulan simpul kapan saja. Anda juga dapat menambahkan kumpulan simpul pengguna dengan mengatur --mode ke User.

Saat menyesuaikan ukuran, pastikan Anda mempertimbangkan semua kebutuhan beban kerja, seperti zona ketersediaan, dan Anda dapat mengonfigurasi kumpulan simpul VMSS dengan sesuai. Anda mungkin perlu mengubah perintah berikut agar paling sesuai dengan kebutuhan Anda. Untuk daftar lengkap opsi konfigurasi, lihat az aks nodepool add halaman referensi.

  1. Buat kumpulan simpul baru menggunakan az aks nodepool add perintah . Dalam contoh ini, kami membuat kumpulan simpul baru, mynodepool, dengan tiga simpul dan Standard_DS3_v2 SKU VM untuk menggantikan kumpulan simpul yang ada, nodepool1, yang memiliki Standard_DS2_v2 SKU VM.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3 \
        --node-vm-size Standard_DS3_v2 \
        --mode System \
        --no-wait
    

    Dibutuhkan beberapa menit agar kumpulan simpul baru dibuat.

  2. Dapatkan status kumpulan simpul baru menggunakan kubectl get nodes perintah .

    kubectl get nodes
    

    Output Anda harus menyerupai contoh output berikut, memperlihatkan kumpulan simpul mynodepool baru dan kumpulan nodepool1simpul yang ada :

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   23m   v1.21.9
    aks-nodepool1-12345678-vmss000000    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000001    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000002    Ready    agent   10d   v1.21.9
    

Membatasi node yang ada

Pengepungan menandai node tertentu sebagai tidak dapat dijadwalkan dan mencegah pod tambahan ditambahkan ke node.

  1. Dapatkan nama simpul yang ingin Anda lakukan cordon menggunakan perintah kubectl get nodes.

    kubectl get nodes
    

    Output Anda harus menyerupai contoh output berikut, memperlihatkan simpul-simpul dalam kumpulan nodepool1 yang ingin Anda isolasi.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000001   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000002   Ready    agent   7d21h   v1.21.9
    
  2. Cordon simpul-simpul yang ada menggunakan perintah kubectl cordon, tentukan simpul yang diinginkan dalam daftar yang dipisahkan dengan spasi. Contohnya:

    kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002
    

    Output Anda harus menyerupai contoh output berikut, yang menunjukkan bahwa node tersebut diblokir:

    node/aks-nodepool1-12345678-vmss000000 cordoned
    node/aks-nodepool1-12345678-vmss000001 cordoned
    node/aks-nodepool1-12345678-vmss000002 cordoned
    

Mengosongkan node yang ada

Penting

Agar berhasil mengosongkan node dan mengeluarkan pod yang sedang berjalan, pastikan bahwa PodDisruptionBudgets (PDB) memungkinkan setidaknya satu replika pod dipindahkan sekali. Jika tidak demikian, operasi pengosongan/pengusiran gagal. Untuk memeriksa hal ini, Anda dapat menjalankan kubectl get pdb -A dan memverifikasi ALLOWED DISRUPTIONS setidaknya 1 atau lebih tinggi.

Ketika Anda mengosongkan node, pod yang berjalan di atasnya dikeluarkan dan dibuat ulang pada node lain yang dapat dijadwalkan.

  1. Mengeluarkan simpul yang ada menggunakan perintah kubectl drain dengan bendera --ignore-daemonsets dan --delete-emptydir-data, menentukan simpul yang diinginkan dalam daftar yang dipisahkan dengan spasi. Contohnya:

    Penting

    Penggunaan --delete-emptydir-data diperlukan untuk mengeluarkan pod yang dibuat oleh AKS, yaitu coredns dan metrics-server. Jika Anda tidak menggunakan bendera ini, Anda mendapatkan kesalahan. Untuk informasi lebih lanjut, lihat dokumentasi tentang emptydir.

    kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-data
    
  2. Setelah operasi pengurasan selesai, semua pod (tidak termasuk pod yang dikontrol oleh set daemon) harus berjalan pada kumpulan simpul baru. Anda dapat memverifikasi ini menggunakan kubectl get pods perintah .

    kubectl get pods -o wide -A
    

Memecahkan masalah pengusiran pod

Anda mungkin mengalami kesalahan berikut saat menguras simpul:

Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.

Secara bawaan, kluster Anda memiliki anggaran gangguan pod yang dikelola AKS (seperti coredns-pdb atau konnectivity-agent) dengan MinAvailable dari 1. Misalnya, jika ada dua coredns pod yang berjalan, hanya satu pod yang dapat terganggu pada satu waktu. Meskipun salah satunya sedang dibuat ulang dan tidak tersedia, pod coredns lainnya tidak dapat dipindahkan karena anggaran gangguan pod. Masalah ini diselesaikan sendiri setelah pod coredns awal dijadwalkan dan mulai berjalan, memungkinkan agar pod kedua dapat dievakuasi dan dibuat ulang dengan baik.

Tip

Pertimbangkan untuk mengalihkan beban kerja pada node satu per satu untuk pengalaman migrasi yang lebih lancar dan untuk menghindari pembatasan. Untuk informasi selengkapnya, lihat:

Menghapus kumpulan node yang ada

Penting

Saat Anda menghapus kumpulan node, AKS tidak melakukan cordon dan drain. Untuk meminimalkan gangguan penjadwalan ulang pod yang saat ini berjalan pada kumpulan nodus yang ingin Anda hapus, lakukan cordon dan pengosongan pada semua nodus di kumpulan nodus sebelum menghapus.

  1. Hapus kumpulan simpul asli menggunakan az aks nodepool delete perintah .

    az aks nodepool delete \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name nodepool1
    
  2. Verifikasi bahwa kluster AKS Anda hanya memiliki kumpulan simpul baru dengan aplikasi dan pod yang berjalan dengan benar menggunakan perintah kubectl get nodes.

    kubectl get nodes
    

    Output Anda harus menyerupai contoh output berikut, hanya menampilkan kumpulan simpul mynodepoolbaru :

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   63m   v1.21.9
    

Langkah berikutnya

Setelah mengubah ukuran kumpulan node dengan mengkarantina dan mengosongkan, pelajari lebih lanjut tentang menggunakan beberapa kumpulan node.