Container Service for Kubernetes mendukung Advanced Horizontal Pod Autoscaler (AHPA). AHPA menganalisis data historis untuk memprediksi kebutuhan resource di masa depan dan menyesuaikan jumlah replika Pod secara dinamis. Dengan demikian, kapasitas resource diperluas dan dipra-ambil sebelum permintaan mencapai puncaknya, sehingga meningkatkan kecepatan respons dan stabilitas sistem. Saat periode lalu lintas rendah diprediksi, AHPA juga melakukan skala-masuk resource pada waktu yang tepat untuk menghemat biaya.
Prasyarat
Anda telah membuat ACK managed cluster atau ACK serverless cluster. Untuk informasi selengkapnya, lihat Create an ACK managed cluster atau Create a cluster.
Anda telah mengaktifkan Managed Service for Prometheus. Pastikan Managed Service for Prometheus telah mengumpulkan data historis aplikasi minimal selama tujuh hari, seperti penggunaan CPU dan memori. Untuk informasi selengkapnya tentang cara mengaktifkan Managed Service for Prometheus, lihat Connect to and configure Managed Service for Prometheus.
Langkah 1: Instal AHPA Controller
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang ingin Anda kelola lalu klik namanya. Di panel navigasi kiri, klik Add-ons.
Pada halaman Component Management, temukan komponen AHPA Controller, klik Install pada kartunya, lalu ikuti petunjuk di layar untuk menyelesaikan instalasi.
Langkah 2: Konfigurasikan sumber data Prometheus
Masuk ke ARMS console.
Di panel navigasi kiri, pilih .
Di bagian atas halaman Instances, pilih wilayah instans Prometheus, lalu klik nama instans target. Nama instans sama dengan nama kluster ACK.
Pada halaman Settings, di bagian HTTP API URL (Grafana Read URL), catat nilai untuk item konfigurasi berikut.
(Opsional) Jika token diaktifkan, catat token akses tersebut.
Catat titik akhir jaringan internal (Internal Network) (Prometheus URL).
Atur titik akhir kueri Prometheus di kluster ACK.
Buat file bernama application-intelligence.yaml dengan konten berikut.
prometheusUrl: Titik akhir Managed Service for Prometheus.token: Token akses untuk Prometheus.
apiVersion: v1 kind: ConfigMap metadata: name: application-intelligence namespace: kube-system data: prometheusUrl: "http://cn-hangzhou-intranet.arms.aliyuncs.com:9443/api/v1/prometheus/da9d7dece901db4c9fc7f5b9c40****/158120454317****/cc6df477a982145d986e3f79c985a****/cn-hangzhou" token: "eyJhxxxxx"CatatanUntuk melihat dasbor AHPA di Managed Service for Prometheus, Anda juga perlu mengonfigurasi bidang berikut dalam ConfigMap ini:
Untuk informasi selengkapnya, lihat Enable the Prometheus dashboard for AHPA.
Jalankan perintah berikut untuk menerapkan konfigurasi `application-intelligence`.
kubectl apply -f application-intelligence.yaml
Langkah 3: Deploy layanan uji coba
Layanan uji coba mencakup fib-deployment, fib-svc, dan fib-loader, yang mensimulasikan puncak dan lembah permintaan. Resource Horizontal Pod Autoscaler (HPA) juga diterapkan untuk membandingkan hasil penskalaannya dengan AHPA.
Buat file bernama demo.yaml dengan konten berikut.
apiVersion: apps/v1
kind: Deployment
metadata:
name: fib-deployment
namespace: default
annotations:
k8s.aliyun.com/eci-use-specs: "1-2Gi"
spec:
replicas: 1
selector:
matchLabels:
app: fib-deployment
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: fib-deployment
spec:
containers:
- image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-server:20200820-171837
imagePullPolicy: IfNotPresent
name: user-container
ports:
- containerPort: 8080
name: user-port
protocol: TCP
resources:
limits:
cpu: "1"
memory: 2000Mi
requests:
cpu: "1"
memory: 2000Mi
---
apiVersion: v1
kind: Service
metadata:
name: fib-svc
namespace: default
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
selector:
app: fib-deployment
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: fib-loader
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: fib-loader
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: fib-loader
spec:
containers:
- args:
- -c
- |
/ko-app/fib-loader --service-url="http://fib-svc.${NAMESPACE}?size=35&interval=0" --save-path=/tmp/fib-loader-chart.html
command:
- sh
env:
- name: NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-loader:20201126-110434
imagePullPolicy: IfNotPresent
name: loader
ports:
- containerPort: 8090
name: chart
protocol: TCP
resources:
limits:
cpu: "8"
memory: 16000Mi
requests:
cpu: "2"
memory: 4000Mi
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: fib-hpa
namespace: default
spec:
maxReplicas: 50
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: fib-deployment
targetCPUUtilizationPercentage: 50
---Langkah 4: Deploy AHPA
Konfigurasikan kebijakan elastis dengan mengirimkan resource `AdvancedHorizontalPodAutoscaler`.
Buat file bernama ahpa-demo.yaml dengan konten berikut.
apiVersion: autoscaling.alibabacloud.com/v1beta1 kind: AdvancedHorizontalPodAutoscaler metadata: name: ahpa-demo spec: scaleStrategy: observer metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 40 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: fib-deployment maxReplicas: 100 minReplicas: 2 stabilizationWindowSeconds: 300 prediction: quantile: 0.95 scaleUpForward: 180 instanceBounds: - startTime: "2021-12-16 00:00:00" endTime: "2031-12-16 00:00:00" bounds: - cron: "* 0-8 ? * MON-FRI" maxReplicas: 15 minReplicas: 4 - cron: "* 9-15 ? * MON-FRI" maxReplicas: 15 minReplicas: 10 - cron: "* 16-23 ? * MON-FRI" maxReplicas: 20 minReplicas: 15Berikut penjelasan beberapa parameter:
Parameter
Wajib
Deskripsi
scaleTargetRef
Ya
Menentukan deployment target.
metrics
Ya
Mengonfigurasi metrik penskalaan. Metrik yang didukung mencakup CPU, GPU, Memory, QPS, dan RT.
target
Ya
Ambang batas target. Misalnya,
averageUtilization: 40menunjukkan bahwa target penggunaan CPU adalah 40%.scaleStrategy
Tidak
Menetapkan mode penskalaan. Nilai default adalah observer.
auto: AHPA melakukan operasi penskalaan.
observer: AHPA hanya mengamati tetapi tidak melakukan tindakan penskalaan. Anda dapat menggunakan mode ini untuk memeriksa apakah AHPA berfungsi sesuai harapan.
proactive: Hanya prediksi proaktif yang berlaku.
reactive: Hanya prediksi reaktif yang berlaku.
maxReplicas
Ya
Jumlah maksimum replika untuk skala keluar.
minReplicas
Ya
Jumlah minimum replika untuk skala-masuk.
stabilizationWindowSeconds
Tidak
Waktu pendinginan untuk skala-masuk. Nilai default adalah 300 detik.
prediction. quantile
Ya
Kuantil prediksi. Nilai yang lebih tinggi menunjukkan prediksi yang lebih konservatif, artinya probabilitas lebih tinggi bahwa nilai metrik aktual akan berada di bawah nilai target. Nilainya harus antara 0 hingga 1, dan mendukung dua tempat desimal. Nilai default adalah 0,99. Disarankan menggunakan nilai antara 0,90 hingga 0,99.
prediction. scaleUpForward
Ya
Waktu yang dibutuhkan agar Pod menjadi Ready (waktu cold start).
instanceBounds
Tidak
Batas jumlah instans selama periode penskalaan.
startTime: Waktu mulai.
endTime: Waktu selesai.
instanceBounds. bounds. cron
Tidak
Mengonfigurasi tugas terjadwal. Ekspresi cron merepresentasikan serangkaian waktu. Ekspresi ini menggunakan lima bidang yang dipisahkan spasi. Misalnya,
- cron: "* 0-8 ? * MON-FRI"menunjukkan bahwa tugas dijalankan dari pukul 00.00 hingga 08.59 setiap Senin hingga Jumat.Tabel berikut menjelaskan bidang-bidang dalam ekspresi cron. Untuk informasi selengkapnya, lihat Scheduled tasks.
Nama bidang
Wajib
Nilai yang diizinkan
Karakter khusus yang diizinkan
Minutes
Ya
0 hingga 59
* / , -
Hours
Ya
0 hingga 23
* / , -
Day of Month
Ya
1 hingga 31
* / , – ?
Month
Ya
1 hingga 12 atau JAN hingga DEC
* / , -
Day of Week
Tidak
0 hingga 6 atau SUN hingga SAT
* / , – ?
CatatanNilai untuk bidang Month dan Day of Week tidak peka huruf besar/kecil. Misalnya,
SUN,Sun, dansunmemiliki efek yang sama.Jika bidang Day of Week tidak dikonfigurasi, nilai default-nya adalah
*.Karakter khusus:
*: Menunjukkan semua nilai yang mungkin./: Menentukan penambahan untuk nilai numerik.,: Mencantumkan nilai-nilai yang dienumerasi.-: Menunjukkan rentang.?: Menunjukkan bahwa tidak ada nilai spesifik yang ditentukan.
Jalankan perintah berikut untuk membuat kebijakan elastis AHPA.
kubectl apply -f ahpa-demo.yaml
Langkah 5: Lihat hasil prediksi
Untuk melihat hasil prediksi elastis AHPA, enable the Prometheus dashboard for AHPA.
Karena prediksi memerlukan data historis selama tujuh hari, Anda hanya dapat melihat hasil prediksi setelah deployment contoh berjalan minimal selama tujuh hari. Jika Anda memiliki aplikasi online yang sudah ada, Anda dapat langsung menentukannya dalam konfigurasi AHPA.
Dokumen ini menggunakan mode observer sebagai contoh. Dalam mode ini, hasilnya dibandingkan dengan kebijakan HPA. Perbandingan ini memberikan referensi mengenai resource aktual yang dibutuhkan aplikasi dan membantu Anda memverifikasi apakah hasil prediksi AHPA sesuai ekspektasi.

Penggunaan CPU aktual dan prediksi: Kurva hijau merepresentasikan penggunaan CPU aktual dengan HPA. Kurva kuning merepresentasikan penggunaan CPU yang diprediksi oleh AHPA.
Kurva kuning berada di atas kurva hijau, yang menunjukkan bahwa kapasitas CPU yang diprediksi mencukupi.
Kurva kuning mendahului kurva hijau, yang menunjukkan bahwa resource yang dibutuhkan telah disiapkan sebelumnya.
Tren Pod: Kurva hijau merepresentasikan jumlah Pod aktual yang diskalakan oleh HPA. Kurva kuning merepresentasikan jumlah Pod yang diprediksi oleh AHPA.
Kurva kuning berada di bawah kurva hijau, yang menunjukkan bahwa AHPA memprediksi jumlah Pod yang lebih sedikit.
Kurva kuning lebih mulus daripada kurva hijau, yang menunjukkan bahwa penskalaan dengan AHPA menyebabkan fluktuasi lebih sedikit dan meningkatkan stabilitas layanan.
Tren prediksi sesuai ekspektasi. Setelah periode pengamatan, jika hasilnya memenuhi ekspektasi Anda, Anda dapat mengatur mode penskalaan ke auto agar AHPA mengelola penskalaan.
Dokumen terkait
Untuk menggunakan Managed Service for Prometheus guna memantau metrik GPU dan menerapkan penskalaan prediktif dengan AHPA berdasarkan metrik GPU, lihat Use AHPA to perform predictive scaling based on GPU metrics.
Untuk melihat dasbor yang disediakan oleh Managed Service for Prometheus, lihat Enable the Prometheus dashboard for AHPA.