Bagikan melalui


Menggunakan PowerShell untuk penskalaan otomatis kluster di AKS yang diaktifkan oleh Azure Arc

Berlaku untuk: AKS di Azure Local 22H2, AKS di Windows Server

Anda dapat menggunakan PowerShell untuk mengaktifkan autoscaler dan mengelola penskalaan otomatis kumpulan simpul di kluster target Anda di AKS yang diaktifkan oleh Arc. Anda juga dapat menggunakan PowerShell untuk mengonfigurasi dan mengelola autoscaling kluster.

Buatlah objek AksHciAutoScalerConfig baru

Untuk membuat objek AksHciAutoScalerConfig baru untuk diteruskan New-AksHciCluster ke perintah atau Set-AksHciCluster , gunakan perintah ini:

New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}

Anda dapat menyediakan objek autoscalerconfig saat membuat kluster Anda. Objek berisi parameter untuk alat penskalaan otomatis Anda. Untuk informasi parameter, lihat Cara menggunakan profil autoscaler.

Mengubah objek profil AksHciAutoScalerConfig yang ada

Saat Anda memperbarui objek profil AksHciAutoScalerConfig yang ada, kluster yang menggunakan objek tersebut diperbarui untuk menggunakan parameter baru:

Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }

Anda dapat memperbarui objek autoscalerconfig , yang berisi parameter untuk autoscaler Anda. Untuk informasi parameter, lihat Cara menggunakan profil autoscaler.

Mengaktifkan penskalaan otomatis untuk kluster baru

Untuk mengaktifkan autoscaling secara otomatis pada semua kumpulan simpul yang baru dibuat, gunakan parameter berikut dengan New-AksHciCluster perintah :

New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile

Aktifkan penskalaan otomatis pada kluster yang ada

Untuk mengaktifkan autoscaling secara otomatis pada setiap kumpulan simpul yang baru dibuat pada kluster yang ada, gunakan enableAutoScaler parameter dengan Set-AksHciCluster perintah :

Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>] 

Aktifkan autoscaling pada kumpulan simpul yang ada

Untuk mengaktifkan autoscaling pada kumpulan simpul yang ada, gunakan autoScaler parameter dengan Set-AksHciNodePool perintah :

Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true

Nonaktifkan penskalaan otomatis

Untuk menonaktifkan autoscaling pada semua kumpulan simpul yang ada dan yang baru dibuat pada kluster yang ada, atur enableAutoScaler ke false menggunakan Set-AksHciCluster perintah :

Set-AksHciCluster -Name <string> -enableAutoScaler $false

Memanfaatkan autoscaler horizontal secara efektif

Sekarang setelah kluster dan kumpulan simpul dikonfigurasi untuk menskalakan secara otomatis, Anda dapat mengonfigurasi beban kerja untuk juga menskalakan dengan cara yang menggunakan kemampuan autoscaler horizontal.

Dua metode tersedia untuk penskalaan beban kerja:

  • Autoscaler Pod Horizontal Kubernetes: Berdasarkan karakteristik beban, Autoscaler Pod Horizontal (juga dikenal sebagai autoscaler horizontal) menskalakan pod penyebaran aplikasi ke simpul yang tersedia di kluster Kubernetes. Jika tidak ada lagi simpul yang tersedia untuk dijadwalkan, autoscaler horizontal membuat instans simpul baru untuk menjadwalkan pod. Jika beban aplikasi turun, simpul diskalakan kembali lagi.
  • Aturan anti-afinitas simpul Kubernetes: Aturan anti-afinitas untuk penyebaran Kubernetes dapat menentukan bahwa satu set pod tidak dapat diskalakan pada simpul yang sama, dan simpul yang berbeda diperlukan untuk menskalakan beban kerja. Dalam kombinasi dengan karakteristik beban atau jumlah pod target untuk instans aplikasi, autoscaler horizontal membuat instans simpul baru di kumpulan simpul untuk memenuhi permintaan. Jika permintaan aplikasi mereda, penskala otomatis horizontal menurunkan skala kumpulan simpul lagi.

Bagian ini berisi beberapa contoh.

Penskala pod horizontal

Prasyarat:

  • AKS yang diaktifkan oleh Arc diinstal.
  • Kluster target diinstal dan tersambung ke Azure.
  • Satu kumpulan simpul Linux disebarkan, dengan setidaknya satu simpul pekerja Linux aktif.
  • Penskala otomatis simpul horizontal diaktifkan pada kluster target dan kumpulan simpul Linux, seperti yang dijelaskan sebelumnya.

Kami menggunakan contoh Panduan Autoscaler Pod Horizontal Kubernetes untuk menunjukkan cara kerja Autoscaler Pod Horizontal.

Agar Autoscaler Pod Horizontal berfungsi, Anda harus menyebarkan komponen Metrics Server di kluster target Anda.

Untuk menyebarkan server metrik ke kluster target yang disebut mycluster, jalankan perintah berikut:

Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Setelah Server Metrik Kubernetes disebarkan, Anda dapat menyebarkan aplikasi ke kumpulan simpul, yang Anda gunakan untuk menskalakan. Kami menggunakan aplikasi pengujian dari situs web komunitas Kubernetes untuk contoh ini:

kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created

Perintah ini membuat penyebaran aplikasi PHP berbasis server web Apache yang akan mengembalikan pesan "OK" ke klien panggilan.

Selanjutnya, konfigurasikan Horizontal Pod Autoscaler untuk menjadwalkan pod baru ketika penggunaan CPU pod saat ini mencapai 50 persen, dan skala dari 1 hingga 50 pod:

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled

Anda dapat memeriksa status Autoscaler Pod Horizontal yang baru dibuat dengan menjalankan perintah berikut:

kubectl get hpa
NAME         REFERENCE                     TARGET    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   0% / 50%  1         10        1          18s

Terakhir, tingkatkan beban di server web untuk melihatnya meluaskan skalanya. Buka jendela PowerShell baru, dan jalankan perintah berikut:

kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

Jika Anda kembali ke jendela PowerShell sebelumnya dan menjalankan perintah berikut, Anda akan melihat jumlah pod berubah dalam waktu singkat:

kubectl get hpa php-apache --watch
NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        1          3m

Dalam contoh ini, jumlah pod berubah dari 1 menjadi 7, seperti yang ditunjukkan di sini:

NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        7          3m

Jika ini tidak cukup untuk memicu autoscaler simpul karena semua pod cocok pada satu simpul, buka lebih banyak jendela PowerShell dan jalankan lebih banyak perintah generator beban. Pastikan untuk mengubah nama pod yang Anda buat setiap kali menjalankan perintah. Misalnya, gunakan load-generator-2 alih-alih load-generator, seperti yang ditunjukkan dalam perintah berikut.

kubectl run -i --tty load-generator-2 --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

Kemudian periksa jumlah simpul yang dibuat dengan perintah berikut:

kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
moc-laondkmydzp   Ready    control-plane,master   3d4h   v1.22.4
moc-lorl6k76q01   Ready    <none>                 3d4h   v1.22.4
moc-lorl4323d02   Ready    <none>                   9m   v1.22.4
moc-lorl43bc3c3   Ready    <none>                   2m   v1.22.4

Untuk melihat penurunan skala, tekan CTRL-C untuk mengakhiri pod generator beban dan tutup jendela PowerShell yang terkait dengannya. Setelah sekitar 30 menit, Anda akan melihat jumlah pod turun. Sekitar 30 menit kemudian, simpul dideprovisi.

Untuk informasi selengkapnya tentang Autoscaler Pod Horizontal Kubernetes, lihat Penskalaan Otomatis Pod Horizontal.

Aturan afinitas node

Anda dapat menggunakan aturan afinitas node untuk mengaktifkan penjadwal Kubernetes untuk menjalankan pod hanya pada serangkaian simpul tertentu dalam kluster atau kumpulan simpul berdasarkan karakteristik tertentu dari simpul. Untuk menampilkan fungsi Autoscaler Simpul Horizontal, Anda dapat menggunakan aturan yang sama untuk memastikan bahwa hanya satu instans pod tertentu yang berjalan pada setiap simpul.

Prasyarat:

  • AKS Arc diinstal.
  • Kluster target diinstal dan tersambung ke Azure.
  • Satu kumpulan simpul Linux disebarkan, dengan setidaknya satu simpul Linux Worker aktif.
  • Autoscaler Simpul Horizontal diaktifkan pada kluster target, dan kumpulan simpul Linux, seperti yang dijelaskan sebelumnya.

Buat file YAML dengan konten berikut, dan simpan sebagai node-anti-affinity.yaml di folder lokal.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-cache
spec:
  selector:
    matchLabels:
      app: store
  replicas: 4
  template:
    metadata:
      labels:
        app: store
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - store
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: redis-server
        image: redis:3.2-alpine

Buka jendela PowerShell, dan muat kredensial untuk kluster target Anda. Dalam contoh ini, kluster diberi nama mycluster:

Get-AksHciCredential -name mycluster

Sekarang, terapkan file YAML ke kluster target:

kubectl apply -f node-anti-affinity.yaml

Setelah beberapa menit, Anda dapat menggunakan perintah berikut untuk memeriksa apakah simpul baru telah online:

kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
moc-laondkmydzp   Ready    control-plane,master   3d4h   v1.22.4
moc-lorl6k76q01   Ready    <none>                 3d4h   v1.22.4
moc-lorl4323d02   Ready    <none>                   9m   v1.22.4
moc-lorl43bc3c3   Ready    <none>                   9m   v1.22.4
moc-lorl44ef56c   Ready    <none>                   9m   v1.22.4

Untuk menghapus simpul, hapus penyebaran server redis dengan perintah ini:

kubectl delete -f node-anti-affinity.yaml

Untuk informasi selengkapnya tentang aturan afinitas pod Kubernetes, lihat Menetapkan Pod ke Simpul.

Memecahkan masalah alat penskalaan otomatis horizontal

Ketika Autoscaler Pod Horizontal diaktifkan untuk kluster target, penyebaran Kubernetes baru yang disebut <cluster_name>-cluster-autoscaler dibuat di kluster manajemen. Penyebaran ini memantau kluster target untuk memastikan ada cukup node pekerja untuk menjadwalkan pod.

Berikut adalah beberapa cara berbeda untuk men-debug masalah yang terkait dengan autoscaler:

  • Pod autoscaler kluster yang berjalan pada kluster manajemen mengumpulkan informasi yang berguna tentang bagaimana ia membuat keputusan penskalaan, jumlah simpul yang perlu dimunculkan atau dihapus, dan kesalahan umum apa pun yang mungkin dialaminya. Penskala otomatis menyimpan informasi ini ke log. Jalankan perintah berikut untuk mengakses log:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
    
  • Log operator cloud merekam peristiwa Kubernetes di kluster manajemen, yang dapat membantu untuk memahami kapan autoscaler telah diaktifkan atau dinonaktifkan untuk kluster dan kumpulan simpul. Ini dapat dilihat dengan menjalankan perintah berikut:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
    
  • Penyebaran alat penskalaan otomatis kluster membuat configmap di kluster target yang dikelolanya. Ini configmap menyimpan informasi tentang tingkat seluruh kluster status autoscaler dan per kumpulan simpul. Jalankan perintah berikut terhadap kluster target untuk melihat status:

    Catatan

    Pastikan Anda telah menjalankan Get-AksHciCredentials -Name <clustername> untuk mengambil informasi kubeconfig untuk mengakses kluster target yang dimaksud.

    kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
    
  • Autoscaler kluster mencatat peristiwa pada status configmap autoscaler kluster saat menskalakan kumpulan simpul kluster. Anda dapat melihat log ini dengan menjalankan perintah ini terhadap kluster target:

    kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
    
  • Alat penskalaan otomatis kluster memancarkan peristiwa pada pod di kluster target ketika membuat keputusan penskalaan jika pod tidak dapat dijadwalkan. Jalankan perintah ini untuk melihat peristiwa pada pod:

    kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
    

Referensi PowerShell

Lihat halaman referensi berikut untuk cmdlet PowerShell yang mendukung penskalaan otomatis kluster:

Langkah berikutnya