Gunakan autoscaler kluster di Azure Kubernetes Service (AKS)
Untuk mengikuti tuntutan aplikasi di AKS, Anda mungkin perlu menyesuaikan jumlah simpul yang menjalankan beban kerja Anda. Komponen autoscaler kluster mengawasi pod di kluster Anda yang tidak dapat dijadwalkan karena kendala sumber daya. Ketika autoscaler kluster mendeteksi masalah, itu meningkatkan jumlah simpul di kumpulan simpul untuk memenuhi permintaan aplikasi. Ini juga secara teratur memeriksa node untuk kurangnya pod yang berjalan dan menurunkan skala jumlah simpul sesuai kebutuhan.
Artikel ini menunjukkan cara mengaktifkan dan mengelola autoscaler kluster di AKS, yang didasarkan pada versi Kubernetes sumber terbuka.
Artikel ini memerlukan Azure CLI versi 2.0.76 atau yang lebih baru. Jalankan az --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
Penting
Autoscaler kluster adalah komponen Kubernetes. Meskipun kluster AKS menggunakan set skala komputer virtual untuk simpul, jangan aktifkan atau edit pengaturan secara manual untuk penskalaan otomatis set skala. Biarkan autoscaler kluster Kubernetes mengelola pengaturan skala yang dibutuhkan. Untuk informasi selengkapnya, lihat Dapatkah saya memodifikasi sumber daya AKS di grup sumber daya node?
Buat grup sumber daya menggunakan
az group create
perintah .az group create --name myResourceGroup --location eastus
Buat kluster AKS menggunakan
az aks create
perintah dan aktifkan dan konfigurasikan autoscaler kluster pada kumpulan simpul untuk kluster menggunakan--enable-cluster-autoscaler
parameter dan menentukan simpul--min-count
dan--max-count
. Contoh perintah berikut membuat kluster dengan satu simpul yang didukung oleh set skala komputer virtual, memungkinkan autoscaler kluster, menetapkan minimal satu dan maksimum tiga simpul:az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 1 \ --vm-set-type VirtualMachineScaleSets \ --load-balancer-sku standard \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3 \ --generate-ssh-keys
Dibutuhkan beberapa menit untuk membuat kluster dan mengonfigurasi pengaturan autoscaler kluster.
Perbarui kluster yang ada menggunakan
az aks update
perintah dan aktifkan dan konfigurasikan autoscaler kluster pada kumpulan simpul menggunakan--enable-cluster-autoscaler
parameter dan tentukan simpul--min-count
dan--max-count
. Contoh perintah berikut memperbarui kluster AKS yang ada untuk mengaktifkan autoscaler kluster pada kumpulan simpul untuk kluster dan menetapkan minimal satu dan maksimum tiga simpul:az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
Dibutuhkan beberapa menit untuk memperbarui kluster dan mengonfigurasi pengaturan autoscaler kluster.
Nonaktifkan autoscaler kluster menggunakan
az aks update
perintah dan--disable-cluster-autoscaler
parameter .az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --disable-cluster-autoscaler
Node tidak dihapus saat autoscaler kluster dinonaktifkan.
Catatan
Anda dapat menskalakan kluster secara manual setelah menonaktifkan autoscaler kluster menggunakan az aks scale
perintah . Jika Anda menggunakan autoscaler pod horizontal, ia terus berjalan dengan autoscaler kluster dinonaktifkan, tetapi pod mungkin akhirnya tidak dapat dijadwalkan jika semua sumber daya node sedang digunakan.
Anda dapat mengaktifkan kembali autoscaler kluster pada kluster yang ada menggunakan az aks update
perintah dan menentukan --enable-cluster-autoscaler
parameter , --min-count
, dan --max-count
.
Anda dapat menggunakan autoscaler kluster dengan beberapa kumpulan simpul dan dapat mengaktifkan autoscaler kluster pada setiap kumpulan simpul individu dan meneruskan aturan penskalakan otomatis unik kepada mereka.
Perbarui pengaturan pada kumpulan simpul yang ada menggunakan
az aks nodepool update
perintah .az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1 \ --update-cluster-autoscaler \ --min-count 1 \ --max-count 5
Nonaktifkan autoscaler kluster pada kumpulan simpul menggunakan
az aks nodepool update
perintah dan--disable-cluster-autoscaler
parameter .az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1 \ --disable-cluster-autoscaler
Anda dapat mengaktifkan kembali autoscaler kluster pada kumpulan simpul menggunakan az aks nodepool update
perintah dan menentukan --enable-cluster-autoscaler
parameter , , --min-count
dan --max-count
.
Catatan
Jika Anda berencana menggunakan autoscaler kluster dengan kumpulan simpul yang mencakup beberapa zona dan memanfaatkan fitur penjadwalan yang terkait dengan zona, seperti penjadwalan topologi volume, kami sarankan Anda memiliki satu kumpulan simpul per zona dan mengaktifkan --balance-similar-node-groups
melalui profil autoscaler. Ini memastikan autoscaler dapat berhasil meningkatkan dan menjaga ukuran kumpulan simpul seimbang.
Saat permintaan aplikasi Anda berubah, Anda mungkin perlu menyesuaikan jumlah simpul autoscaler kluster untuk menskalakan secara efisien.
Ubah jumlah simpul menggunakan
az aks update
perintah dan perbarui autoscaler kluster menggunakan--update-cluster-autoscaler
parameter dan tentukan simpul--min-count
yang diperbarui dan--max-count
.az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --update-cluster-autoscaler \ --min-count 1 \ --max-count 5
Catatan
Autoscaler kluster memberlakukan jumlah minimum dalam kasus di mana jumlah aktual turun di bawah minimum karena faktor eksternal, seperti selama pengeluaran spot atau saat mengubah nilai jumlah minimum dari API AKS.
Anda dapat mengonfigurasi detail yang lebih terperinci dari autoscaler kluster dengan mengubah nilai default di profil autoscaler di seluruh kluster. Misalnya, peristiwa menurunkan penskalaan terjadi setelah node kurang dimanfaatkan setelah 10 menit. Jika Anda memiliki beban kerja yang berjalan setiap 15 menit, Anda mungkin ingin mengubah profil autoscaler untuk menurunkan skala node yang kurang digunakan setelah 15 atau 20 menit. Saat Anda mengaktifkan autoscaler kluster, profil default digunakan kecuali Anda menentukan pengaturan yang berbeda.
Penting
Profil autoscaler kluster memengaruhi semua kumpulan simpul yang menggunakan autoscaler kluster. Anda tidak dapat mengatur profil autoscaler per kumpulan node. Saat Anda mengatur profil, kumpulan simpul yang ada dengan autoscaler kluster diaktifkan segera mulai menggunakan profil.
Tabel berikut mencantumkan pengaturan yang tersedia untuk profil autoscaler kluster:
Pengaturan | Description | Nilai default |
---|---|---|
scan-interval |
Seberapa sering kluster dievaluasi ulang untuk peningkatan atau penurunan skala. | 10 detik |
scale-down-delay-after-add |
Berapa lama setelah peningkatan skala, evaluasi penurunan dilanjutkan. | 10 menit |
scale-down-delay-after-delete |
Berapa lama setelah penghapusan node, evaluasi penurunan skala dilanjutkan. | scan-interval |
scale-down-delay-after-failure |
Berapa lama setelah kegagalannya, evaluasi penurunan skala akan dilanjutkan. | Tiga menit |
scale-down-unneeded-time |
Berapa lama node tidak dibutuhkan sebelum memenuhi syarat untuk penurunan skala. | 10 menit |
scale-down-unready-time |
Berapa lama node yang belum siap tidak dibutuhkan sebelum memenuhi syarat untuk penurunan skala. | 20 menit |
ignore-daemonsets-utilization |
Apakah pod DaemonSet akan diabaikan saat menghitung pemanfaatan sumber daya untuk menurunkan skala. | false |
daemonset-eviction-for-empty-nodes |
Apakah Pod DaemonSet akan dihentikan dengan baik dari node kosong. | false |
daemonset-eviction-for-occupied-nodes |
Apakah Pod DaemonSet akan dihentikan dengan baik dari node yang tidak kosong. | true |
scale-down-utilization-threshold |
Tingkat pemanfaatan node, didefinisikan sebagai jumlah sumber daya yang diminta dibagi berdasarkan kapasitas, di mana simpul dapat dipertimbangkan untuk menurunkan skala. | 0,5 |
max-graceful-termination-sec |
Jumlah detik maksimum, yang dilalui oleh alat penskalaan otomatis kluster untuk menunggu hingga pod dihentikan, ketika mencoba menurunkan skala node. | 600 detik |
balance-similar-node-groups |
Mendeteksi kumpulan node serupa dan menyeimbangkan jumlah node di antaranya. | false |
expander |
Jenis pembluas kumpulan simpul yang digunakan dalam peningkatan skala. Nilai yang mungkin antara lain most-pods , random , least-waste , dan priority . |
random |
skip-nodes-with-local-storage |
Jika true , autoscaler kluster tidak menghapus simpul dengan pod dengan penyimpanan lokal, misalnya, EmptyDir atau HostPath. |
false |
skip-nodes-with-system-pods |
Jika true , autoscaler kluster tidak menghapus simpul dengan pod dari kube-system (kecuali daemonSet atau mirror pod). |
true |
max-empty-bulk-delete |
Jumlah maksimum node kosong yang dapat dihapus pada saat yang sama. | 10 node |
new-pod-scale-up-delay |
Untuk skenario seperti skala burst/batch di mana Anda tidak ingin CA bertindak sebelum penjadwal Kubernetes dapat menjadwalkan semua pod, Anda dapat memberi tahu CA untuk mengabaikan pod yang tidak dijadwalkan sebelum mencapai usia tertentu. | 0 detik |
max-total-unready-percentage |
Persentase maksimum pada node yang belum dibaca di dalam kluster. Setelah persentase ini terlampaui, CA menghentikan operasi. | 45% |
max-node-provision-time |
Waktu maksimum yang dilalui oleh alat penskalaan otomatis untuk menunggu munculnya ketersediaan sebuah node. | 15 menit |
ok-total-unready-count |
Jumlah simpul yang belum dibaca yang diizinkan, terlepas dari max-total-unready-percentage. | Tiga simpul |
Catatan
Parameter ignore-daemonsets-utilization, daemonset-eviction-for-empty-node, dan daemonset-eviction-for-occupied-nodes adalah GA dari API versi 2024-05-01. Jika Anda menggunakan CLI untuk memperbarui bendera ini, pastikan Anda menggunakan versi 2.63 atau yang lebih baru.
Buat kluster AKS menggunakan
az aks create
perintah dan atur profil autoscaler kluster menggunakancluster-autoscaler-profile
parameter .az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 1 \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3 \ --cluster-autoscaler-profile scan-interval=30s \ --generate-ssh-keys
Atur autoscaler kluster pada kluster yang ada menggunakan
az aks update
perintah dancluster-autoscaler-profile
parameter . Contoh berikut mengonfigurasi pengaturan interval pemindaian sebagai 30 detik:az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --cluster-autoscaler-profile scan-interval=30s
Catatan
Menurunkan skala secara agresif tidak disarankan untuk kluster yang sering mengalami peluasan skala dan penyempitan skala dalam interval singkat, karena berpotensi mengakibatkan waktu provisi simpul yang diperpanjang dalam keadaan ini. Peningkatan scale-down-delay-after-add
dapat membantu dalam keadaan ini dengan menjaga simpul sekitar lebih lama untuk menangani beban kerja yang masuk.
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--cluster-autoscaler-profile scan-interval=30s,scale-down-delay-after-add=0m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m
az aks update \
--resource-group "myResourceGroup" \
--name myAKSCluster \
--cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m
Reset profil autoscaler kluster menggunakan
az aks update
perintah .az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --cluster-autoscaler-profile ""
Anda dapat mengambil log dan pembaruan status dari autoscaler kluster untuk membantu mendiagnosis dan men-debug peristiwa autoscaler. AKS mengelola autoscaler kluster atas nama Anda dan menjalankannya di sarana kontrol terkelola. Anda dapat mengaktifkan simpul sarana kontrol untuk melihat log dan operasi dari autoscaler kluster.
Siapkan aturan untuk log sumber daya untuk mendorong log autoscaler kluster ke Analitik Log menggunakan instruksi di sini. Pastikan Anda mencentang kotak
cluster-autoscaler
saat memilih opsi untuk Log.Pilih bagian Log pada kluster Anda.
Masukkan contoh kueri berikut ke dalam Analitik Log:
AzureDiagnostics | where Category == "cluster-autoscaler"
Lihat peningkatan skala autoscaler kluster tidak memicu peristiwa pada CLI.
kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
Lihat peristiwa peringatan autoscaler kluster di CLI.
kubectl get events --field-selector source=cluster-autoscaler,type=Warning
Autoscaler kluster juga menuliskan status kesehatan ke bernama
configmap
cluster-autoscaler-status
. Anda dapat mengambil log ini menggunakan perintah berikutkubectl
:kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
Untuk informasi selengkapnya, lihat FAQ proyek GitHub Kubernetes/autoscaler.
Anda dapat mengaktifkan metrik sarana kontrol (Pratinjau) untuk melihat log dan operasi dari autoscaler kluster dengan layanan terkelola Azure Monitor untuk add-on Prometheus
Artikel ini menunjukkan kepada Anda tentang cara menskalakan jumlah node AKS secara otomatis. Anda juga dapat menggunakan autoscaler pod horizontal untuk menyesuaikan jumlah pod yang menjalankan aplikasi Anda secara otomatis. Untuk langkah-langkah menggunakan autoscaler pod horizontal, lihat Menskalakan aplikasi di AKS.
Untuk lebih membantu meningkatkan pemanfaatan sumber daya kluster dan membebaskan CPU dan memori untuk pod lain, lihat Penskala Otomatis Pod Vertikal.
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: