Bagikan melalui


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.

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.