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. Iniconfigmap
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 informasikubeconfig
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:
- Get-AksHciAutoScalerProfile
- Get-AksHciCluster untuk AKS
- Get-AksHciNodePool untuk AKS
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool