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.

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.

Menggunakan autoscaler kluster pada kluster AKS

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?

Mengaktifkan autoscaler kluster pada kluster 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 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
    

    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.

Menonaktifkan autoscaler kluster pada 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.

Mengaktifkan kembali autoscaler kluster pada kluster

Anda dapat mengaktifkan kembali autoscaler kluster pada kluster yang ada menggunakan az aks update perintah dan menentukan --enable-cluster-autoscalerparameter , --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 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
    

Mengaktifkan kembali autoscaler kluster pada kumpulan simpul

Anda dapat mengaktifkan kembali autoscaler kluster pada kumpulan simpul menggunakan az aks nodepool update perintah dan menentukan --enable-cluster-autoscalerparameter , , --min-countdan --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 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.

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 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.

Pengaturan profil autoscaler kluster

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 (Pratinjau) Apakah pod DaemonSet akan diabaikan saat menghitung pemanfaatan sumber daya untuk menurunkan skala. false
daemonset-eviction-for-empty-nodes (Pratinjau) Apakah Pod DaemonSet akan dihentikan dengan baik dari node kosong. false
daemonset-eviction-for-occupied-nodes (Pratinjau) 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

Mengatur profil autoscaler kluster 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
    

Mengatur profil autoscaler kluster pada kluster yang ada

  • Atur autoscaler kluster pada kluster yang ada menggunakan az aks update perintah dan cluster-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
    

Mengonfigurasi profil autoscaler kluster untuk menurunkan skala agresif

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=0s,scale-down-delay-after-failure=30s,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

Mengonfigurasi profil autoscaler kluster untuk beban kerja bursty

 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 menggunakan az aks update perintah .

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

Ambil log dan status autoscaler kluster

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.

  1. 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.

  2. Pilih bagian Log pada kluster Anda.

  3. Masukkan contoh kueri berikut ke dalam Analitik Log:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    Selama ada log yang akan diambil, Anda akan melihat log yang mirip dengan log berikut:

    Cuplikan layar log Analitik Log.

  4. Melihat peningkatan skala autoscaler kluster tidak memicu peristiwa pada CLI

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

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. Autoscaler kluster juga menuliskan status kesehatan ke bernama configmapcluster-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 Kluster

Anda dapat mengaktifkan metrik sarana kontrol (Pratinjau) untuk melihat log dan operasi dari autoscaler kluster dengan layanan terkelola Azure Monitor untuk add-on Prometheus

Langkah berikutnya

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.