Bagikan melalui


Mengubah ukuran kumpulan node di Azure Kubernetes Service (AKS)

Karena meningkatnya jumlah penerapan atau untuk menjalankan beban kerja yang lebih besar, Anda mungkin ingin mengubah rencana set skala mesin virtual atau mengubah ukuran instans AKS. Namun, sesuai dengan kebijakan dukungan untuk AKS:

Simpul agen AKS muncul di portal Microsoft Azure sebagai sumber daya Azure IaaS reguler. Tetapi mesin virtual ini disebarkan ke grup sumber daya Azure kustom (biasanya diawali dengan MC_*). Anda tidak dapat melakukan penyesuaian langsung ke node ini menggunakan API atau sumber IaaS. Setiap perubahan kustom yang tidak dilakukan melalui AKS API tidak akan bertahan melalui peningkatan, penskalaan, pembaruan, atau reboot.

Kurangnya persistensi ini juga berlaku untuk operasi pengubahan ukuran, oleh karena itu, pengubahan ukuran instans AKS dengan cara ini tidak didukung. Dalam panduan cara ini, Anda akan mempelajari metode yang disarankan untuk mengatasi skenario ini.

Penting

Metode ini khusus untuk kluster AKS berbasis set skala mesin virtual. Saat menggunakan set ketersediaan mesin virtual, Anda dibatasi hanya pada satu kumpulan node per kluster.

Contoh sumber daya

Asumsikan Anda ingin mengubah ukuran kumpulan simpul yang ada, yang disebut nodepool1, dari ukuran SKU Standard_DS2_v2 ke Standard_DS3_v2. Untuk menyelesaikan tugas ini, Anda harus membuat kumpulan node baru menggunakan Standard_DS3_v2, memindahkan beban kerja dari nodepool1 ke kumpulan node baru, dan menghapus nodepool1. Dalam contoh ini, kami akan memanggil kumpulan node baru ini mynodepool.

Cuplikan layar halaman portal Azure untuk kluster, dinavigasi ke Kumpulan Node Pengaturan>. Satu kumpulan simpul, bernama kumpulan simpul 1, ditampilkan.

kubectl get nodes

NAME                                STATUS   ROLES   AGE   VERSION
aks-nodepool1-31721111-vmss000000   Ready    agent   10d   v1.21.9
aks-nodepool1-31721111-vmss000001   Ready    agent   10d   v1.21.9
aks-nodepool1-31721111-vmss000002   Ready    agent   10d   v1.21.9
kubectl get pods -o wide -A

NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE                                NOMINATED NODE   READINESS GATES
default       sampleapp2-74b4b974ff-676sz           1/1     Running   0          93m     10.244.1.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
default       sampleapp2-76b6c4c59b-pfgbh           1/1     Running   0          94m     10.244.1.5   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-4n66k             1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-9p4c8             1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   azure-ip-masq-agent-nb7mx             1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   coredns-845757d86-dtvvs               1/1     Running   0          10d     10.244.0.2   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   coredns-845757d86-x27pp               1/1     Running   0          10d     10.244.2.3   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   coredns-autoscaler-5f85dc856b-nfrmh   1/1     Running   0          10d     10.244.2.4   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   csi-azuredisk-node-9nfzt              3/3     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   csi-azuredisk-node-bblsb              3/3     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   csi-azuredisk-node-tjhj4              3/3     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   csi-azurefile-node-9pcr8              3/3     Running   0          3d10h   10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   csi-azurefile-node-bh2pc              3/3     Running   0          3d10h   10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   csi-azurefile-node-h75gq              3/3     Running   0          3d10h   10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-ngdlb   1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-rvvqt   1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   kube-proxy-4wzx7                      1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   kube-proxy-g5tvr                      1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   kube-proxy-mrv54                      1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   metrics-server-774f99dbf4-h52hn       1/1     Running   1          3d10h   10.244.1.3   aks-nodepool1-31721111-vmss000002   <none>           <none>

Buat kumpulan node baru dengan SKU yang diinginkan

Gunakan perintah az aks nodepool add untuk membuat kumpulan node baru bernama mynodepool dengan tiga node menggunakan Standard_DS3_v2 VM SKU:

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

Catatan

Setiap kluster AKS harus berisi setidaknya satu kumpulan node sistem dengan setidaknya satu node. Dalam contoh di atas, kami menggunakan --mode dari System, karena kluster diasumsikan hanya memiliki satu kumpulan node, sehingga memerlukan kumpulan node System untuk menggantikannya. Mode kumpulan node dapat diperbarui setiap saat.

Saat mengubah ukuran, pastikan untuk mempertimbangkan persyaratan lain dan mengonfigurasi kumpulan node Anda sesuai dengan itu. Anda mungkin perlu mengubah perintah di atas. Untuk daftar lengkap opsi konfigurasi, lihat halaman referensi az aks nodepool add.

Setelah beberapa menit, kumpulan node baru telah dibuat:

Cuplikan layar halaman portal Azure untuk kluster, dinavigasi ke Kumpulan Node Pengaturan>. Dua kumpulan simpul, bernama kumpulan simpul 1 dan kumpulan simpul saya ditampilkan.

kubectl get nodes

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

Menjaga node yang ada

Penjagaan menandai node tertentu sebagai tidak terjadwal dan mencegah pod lagi ditambahkan ke node.

Pertama, dapatkan nama node yang ingin Anda jaga dengan kubectl get nodes. Output Anda akan terlihat seperti berikut:

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-31721111-vmss000000   Ready    agent   7d21h   v1.21.9
aks-nodepool1-31721111-vmss000001   Ready    agent   7d21h   v1.21.9
aks-nodepool1-31721111-vmss000002   Ready    agent   7d21h   v1.21.9

Selanjutnya, dengan menggunakan kubectl cordon <node-names>, tentukan node yang diinginkan dalam daftar yang dipisahkan spasi:

kubectl cordon aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002
node/aks-nodepool1-31721111-vmss000000 cordoned
node/aks-nodepool1-31721111-vmss000001 cordoned
node/aks-nodepool1-31721111-vmss000002 cordoned

Mengalirkan node yang ada

Penting

Agar berhasil menguras simpul dan mengeluarkan pod yang sedang berjalan, pastikan bahwa PodDisruptionBudgets (PDB) memungkinkan setidaknya satu replika pod dipindahkan pada satu waktu. Jika tidak, operasi pengurasan/pengeluaran akan gagal. Untuk memeriksa hal ini, Anda dapat menjalankan kubectl get pdb -A dan memverifikasi ALLOWED DISRUPTIONS setidaknya satu atau lebih tinggi.

Mengalirkan node akan menyebabkan pod yang berjalan di dalamnya dikeluarkan dan dibuat ulang di node lain yang dapat dijadwalkan.

Untuk mengalirkan node, gunakan kubectl drain <node-names> --ignore-daemonsets --delete-emptydir-data, sekali lagi gunakan daftar nama node yang dipisahkan spasi:

Penting

Penggunaan --delete-emptydir-data diperlukan untuk mengeluarkan pod coredns dan metrics-server yang dibuat AKS. Jika tanda ini tidak digunakan, akan terjadi kesalahan. Untuk informasi lebih lanjut, lihat dokumentasi tentang emptydir.

kubectl drain aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002 --ignore-daemonsets --delete-emptydir-data

Setelah operasi pengurasan selesai, semua pod selain yang dikendalikan oleh set daemon akan berjalan di kumpulan node baru:

kubectl get pods -o wide -A

NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE                                 NOMINATED NODE   READINESS GATES
default       sampleapp2-74b4b974ff-676sz           1/1     Running   0          15m     10.244.4.5   aks-mynodepool-20823458-vmss000002   <none>           <none>
default       sampleapp2-76b6c4c59b-rhmzq           1/1     Running   0          16m     10.244.4.3   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-4n66k             1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   azure-ip-masq-agent-9p4c8             1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   azure-ip-masq-agent-nb7mx             1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   azure-ip-masq-agent-sxn96             1/1     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-tsq98             1/1     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   azure-ip-masq-agent-xzrdl             1/1     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   coredns-845757d86-d2pkc               1/1     Running   0          17m     10.244.3.2   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   coredns-845757d86-f8g9s               1/1     Running   0          17m     10.244.5.2   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   coredns-autoscaler-5f85dc856b-f8xh2   1/1     Running   0          17m     10.244.4.2   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   csi-azuredisk-node-7md2w              3/3     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   csi-azuredisk-node-9nfzt              3/3     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   csi-azuredisk-node-bblsb              3/3     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   csi-azuredisk-node-lcmtz              3/3     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   csi-azuredisk-node-mmncr              3/3     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   csi-azuredisk-node-tjhj4              3/3     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   csi-azurefile-node-29w6z              3/3     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   csi-azurefile-node-4nrx7              3/3     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   csi-azurefile-node-9pcr8              3/3     Running   0          3d11h   10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   csi-azurefile-node-bh2pc              3/3     Running   0          3d11h   10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   csi-azurefile-node-gqqnv              3/3     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   csi-azurefile-node-h75gq              3/3     Running   0          3d11h   10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-2bbp5   1/1     Running   0          17m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-7xzxj   1/1     Running   0          16m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   kube-proxy-4wzx7                      1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   kube-proxy-7h8r5                      1/1     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   kube-proxy-g5tvr                      1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   kube-proxy-mrv54                      1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   kube-proxy-nqmnj                      1/1     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   kube-proxy-zn77s                      1/1     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   metrics-server-774f99dbf4-2x6x8       1/1     Running   0          16m     10.244.4.4   aks-mynodepool-20823458-vmss000002   <none>           <none>

Pemecahan Masalah

Anda mungkin melihat kesalahan seperti berikut:

Kesalahan saat mengeluarkan pod/[podname] -n [namespace] (akan mencoba lagi setelah 5 detik): Tidak dapat mengeluarkan pod karena akan melanggar anggaran gangguan pod.

Secara default, kluster Anda memiliki anggaran gangguan pod terkelola AKS_ (seperti coredns-pdb atau konnectivity-agent) dengan MinAvailable 1. Jika, misalnya, ada dua coredns pod yang berjalan, sementara salah satunya sedang dibuat ulang dan tidak tersedia, yang lain tidak dapat terpengaruh karena anggaran gangguan pod. Ini diselesaikan dengan sendirinya setelah coredns pod awal dijadwalkan dan berjalan, memungkinkan pod kedua dikeluarkan dan dibuat ulang dengan benar.

Tip

Pertimbangkan untuk mengalirkan node satu per satu untuk pengalaman pengeluaran yang lebih lancar dan untuk menghindari pelambatan. Untuk informasi selengkapnya, lihat:

Menghapus kumpulan node yang ada

Untuk menghapus kumpulan node yang ada, gunakan portal Azure atau perintah az aks nodepool delete:

az aks nodepool delete \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name nodepool1

Setelah selesai, pada akhirnya kluster AKS memiliki satu kumpulan node baru dengan ukuran SKU baru yang diinginkan dan semua aplikasi serta pod berjalan dengan baik:

Cuplikan layar halaman portal Azure untuk kluster, dinavigasi ke Kumpulan Node Pengaturan>. Satu kumpulan simpul, bernama kumpulan simpul saya, ditampilkan.

kubectl get nodes

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

Langkah berikutnya

Setelah mengubah ukuran kumpulan node dengan menjaga dan mengalirkan, pelajari lebih lanjut tentang menggunakan beberapa kumpulan node.