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 cluster autoscaler memantau pod di kluster Anda yang tidak dapat dijadwalkan akibat keterbatasan sumber daya. Saat cluster autoscaler mendeteksi adanya kendala, komponen ini akan menambah jumlah node dalam pool node untuk memenuhi kebutuhan aplikasi. Sistem ini juga secara berkala memeriksa node yang tidak memiliki pod yang berjalan dan mengurangi jumlah node sesuai kebutuhan.

Artikel ini menunjukkan cara mengaktifkan dan mengelola autoscaler kluster di AKS, yang didasarkan pada versi Kubernetes sumber terbuka.

Sebelum Anda mulai

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.

Gunakan autoscaler kluster pada kluster AKS

Penting

Autoscaler klaster adalah komponen Kubernetes. Meskipun kluster AKS menggunakan virtual machine scale set untuk node, jangan aktifkan atau ubah pengaturan autoskalanya secara manual. Biarkan autoscaler kluster Kubernetes mengelola pengaturan skala yang dibutuhkan. Untuk informasi selengkapnya, lihat Dapatkah saya memodifikasi sumber daya AKS di grup sumber daya node?

Aktifkan penskala otomatis klaster di klaster baru

  1. Buat grup sumber daya menggunakan az group create perintah .

    az group create --name myResourceGroup --location eastus
    
  2. 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 mesin virtual, mengaktifkan penskala otomatis kluster, serta menetapkan minimum satu simpul 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.

Mengaktifkan penskala otomatis kluster pada kluster yang ada

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 penskala otomatis kluster pada kluster

Nonaktifkan penskala otomatis kluster menggunakan perintah az aks update dan parameter --disable-cluster-autoscaler.

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, autoscaler tersebut tetap berjalan meskipun autoscaler kluster dinonaktifkan, tetapi pod mungkin tidak dapat dijadwalkan jika semua sumber daya node sedang digunakan.

Aktifkan kembali penskala otomatis klaster di klaster

Anda dapat mengaktifkan kembali autoscaler kluster pada kluster yang sudah ada menggunakan perintah az aks update dengan menentukan parameter --enable-cluster-autoscaler, --min-count, dan --max-count.

Menggunakan autoscaler kluster pada kumpulan simpul

Menggunakan autoscaler kluster pada beberapa kumpulan simpul

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

Menonaktifkan autoscaler kluster pada kumpulan simpul

Nonaktifkan cluster autoscaler pada node pool menggunakan perintah az aks nodepool update dan parameter --disable-cluster-autoscaler.

az aks nodepool update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name nodepool1 \
    --disable-cluster-autoscaler

Mengaktifkan kembali autoscaler kluster pada kumpulan simpul

Anda dapat mengaktifkan kembali autoscaler kluster pada kumpulan simpul dengan menggunakan perintah az aks nodepool update serta menyertakan parameter --enable-cluster-autoscaler, --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.

Memperbarui pengaturan autoscaler kluster

Saat permintaan aplikasi Anda berubah, Anda mungkin perlu menyesuaikan jumlah simpul autoscaler kluster untuk menskalakan secara efisien.

Ubah jumlah simpul menggunakan perintah az aks update dan perbarui cluster autoscaler menggunakan parameter --update-cluster-autoscaler dengan menentukan --min-count dan --max-count simpul yang telah diperbarui.

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.

Menggunakan profil autoscaler kluster

Anda dapat mengonfigurasi detail yang lebih terperinci dari autoscaler kluster dengan mengubah nilai default di profil autoscaler di seluruh kluster. Misalnya, peristiwa penurunan skala terjadi setelah node kurang digunakan selama 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 menetapkan profil, kumpulan node yang ada dan mengaktifkan cluster autoscaler akan langsung mulai menggunakan profil tersebut.

Pengaturan profil penskalaan otomatis kluster

Tabel berikut mencantumkan pengaturan yang tersedia untuk profil autoscaler kluster:

Pengaturan Deskripsi Nilai bawaan
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 sebuah node harus tidak dibutuhkan sebelum layak untuk diturunkan skalanya. 10 menit
scale-down-unready-time Berapa lama node yang tidak siap harus tetap tidak diperlukan sebelum memenuhi syarat untuk diturunkan skalanya. 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 secara aman pada node kosong. false
daemonset-eviction-for-occupied-nodes Apakah pod DaemonSet akan dihentikan dengan semestinya pada node yang tidak kosong. true
scale-down-utilization-threshold Nilai maksimum antara jumlah permintaan CPU dan jumlah permintaan Memori dari semua pod yang berjalan pada simpul, dibagi dengan sumber daya yang dapat dialokasikan simpul tersebut. Di bawah nilai ini, simpul dapat dipertimbangkan untuk menurunkan skala. 0,5
max-graceful-termination-sec Jumlah detik maksimum yang ditunggu oleh autoscaler kluster untuk penghentian pod saat mencoba menurunkan skala node. 600 detik
balance-similar-node-groups Mendeteksi kumpulan node serupa dan menyeimbangkan jumlah node di antaranya. false
expander Jenis kumpulan simpul yang digunakan expander saat penskalaan ke atas. Nilai yang mungkin antara lain most-pods, random, least-waste, dan priority. random
skip-nodes-with-local-storage Jika true, cluster autoscaler tidak menghapus node yang memiliki pod dengan penyimpanan lokal, misalnya EmptyDir atau HostPath. false
skip-nodes-with-system-pods Jika true, cluster autoscaler tidak menghapus node dengan pod dari kube-system (kecuali untuk DaemonSet atau pod mirror). 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 node yang belum siap 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 node yang belum siap yang diizinkan, terlepas dari max-total-unready-percentage. Tiga simpul

Catatan

Parameter ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes, dan daemonset-eviction-for-occupied-nodes telah tersedia secara umum sejak versi API 2024-05-01.

Atur profil penskala otomatis pada kluster baru

Buat kluster AKS menggunakan az aks create perintah dan atur profil autoscaler kluster menggunakan cluster-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

Mengatur profil autoscaler kluster pada kluster yang ada

Atur cluster autoscaler pada cluster yang sudah ada menggunakan perintah az aks update dan parameter cluster-autoscaler-profile. Contoh berikut mengonfigurasi pengaturan interval pemindaian sebagai 30 detik:

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --cluster-autoscaler-profile scan-interval=30s

Konfigurasikan profil penskala otomatis kluster untuk penurunan skala yang agresif

Catatan

Menurunkan skala secara agresif tidak disarankan untuk kluster yang sering mengalami scale-out dan scale-in dalam interval singkat, karena hal ini berpotensi menyebabkan waktu penyediaan node menjadi lebih lama dalam kondisi tersebut. 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

Konfigurasikan profil autoscaler kluster untuk beban kerja yang melonjak

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

Atur ulang profil autoscaler kluster ke nilai default

Reset profil autoscaler kluster dengan menggunakan perintah az aks update.

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --cluster-autoscaler-profile ""

Mengambil log dan status autoscaler klaster

Anda dapat mengambil log dan pembaruan status dari cluster autoscaler untuk membantu mendiagnosis dan menelusuri masalah pada kejadian cluster autoscaler. AKS mengelola autoscaler kluster atas nama Anda dan menjalankannya di sarana kontrol terkelola. Anda dapat mengaktifkan pengelogan sarana kontrol untuk melihat log dan operasi dari autoscaler kluster.

  1. Siapkan aturan untuk log sumber daya guna mengirim log cluster autoscaler ke Log Analytics dengan mengikuti petunjuk di sini. Pastikan Anda mencentang kotak cluster-autoscaler saat memilih opsi untuk Log.

  2. Pilih bagian Log pada kluster Anda.

  3. Masukkan contoh kueri berikut ke dalam Analitik Log:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    
  4. Lihat peristiwa peningkatan skala autoscaler kluster yang tidak terpicu di CLI.

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Lihat peristiwa peringatan autoscaler kluster di CLI.

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. Autoscaler cluster juga menulis status kesehatan ke sumber daya configmap yang bernama cluster-autoscaler-status. Anda dapat mengambil log ini menggunakan perintah berikut kubectl :

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

Untuk informasi selengkapnya, lihat FAQ proyek GitHub Kubernetes/autoscaler.

Metrik autoscaler klaster

Anda dapat mengaktifkan metrik bidang kontrol (Pratinjau) untuk melihat log dan operasi dari cluster autoscaler dengan add-on layanan terkelola Azure Monitor untuk 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.