Container Service for Kubernetes mendukung AHPA (Advanced Horizontal Pod Autoscaler). AHPA mempelajari metrik historis, memprediksi permintaan sumber daya di masa depan, dan menyesuaikan jumlah replika Pod secara dinamis—meningkatkan skala serta melakukan pemanasan sebelum puncak trafik guna meningkatkan responsivitas dan stabilitas, serta mengurangi skala selama periode rendah untuk menghemat biaya.
Prasyarat
Kluster ACK managed cluster atau kluster ACK Serverless cluster telah dibuat. Lihat Create an ACK managed cluster atau Create a cluster.
Managed Service for Prometheus (Prometheus) telah diaktifkan dengan minimal tujuh hari data historis aplikasi, seperti penggunaan CPU dan memori. Lihat Access and configure Prometheus.
Langkah 1: Instal AHPA Controller
-
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Components and Add-ons .
Pada halaman Add-ons, temukan AHPA Controller lalu klik Install. Ikuti petunjuk yang muncul.
Langkah 2: Konfigurasikan sumber data Prometheus
Masuk ke ARMS console.
-
Di panel navigasi kiri, pilih .
Pada halaman Instances, pilih wilayah, lalu klik instans yang dinamai sesuai kluster ACK Anda.
Pada halaman Settings, di bagian HTTP API Address (Grafana Read Address), catat:
(Opsional) token akses, jika autentikasi berbasis token diaktifkan.
Titik akhir Internal Network (URL Prometheus).
Tetapkan URL kueri Prometheus di kluster ACK Anda.
Buat file
application-intelligence.yamldengan konten berikut.prometheusUrl: Titik akhir 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 Prometheus, konfigurasikan juga bidang-bidang berikut dalam ConfigMap ini:
prometheus_writer_url: Titik akhir internal untuk Remote Write.prometheus_writer_ak: ID AccessKey Akun Alibaba Cloud Anda.prometheus_writer_sk: Rahasia AccessKey Akun Alibaba Cloud Anda.
Deploy
application-intelligence.kubectl apply -f application-intelligence.yaml
Langkah 3: Deploy layanan uji coba
Layanan uji coba mencakup Penyebaran fib-deployment, layanan fib-svc, dan generator beban fib-loader yang mensimulasikan trafik. HPA menyediakan garis dasar untuk perbandingan dengan AHPA.
Buat file 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
Untuk mengonfigurasi kebijakan penskalaan, buat resource AdvancedHorizontalPodAutoscaler.
Buat file
ahpa-demo.yamldengan 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: 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: 15Parameter yang dipilih.
Parameter
Wajib
Deskripsi
scaleTargetRef
Ya
Penyebaran target.
metrics
Ya
Metrik penskalaan. Metrik yang didukung mencakup CPU, GPU, memori, QPS, dan RT.
target
Ya
Ambang batas target. Contohnya,
averageUtilization: 40menargetkan pemanfaatan CPU sebesar 40%.scaleStrategy
Tidak
Mode penskalaan. Default:
observer.auto: AHPA melakukan penskalaan.observer: AHPA hanya mengamati tanpa melakukan penskalaan. Gunakan untuk memverifikasi perilaku AHPA.proactive: Hanya prediksi proaktif yang berlaku.reactive: Hanya penskalaan reaktif yang berlaku.
maxReplicas
Ya
Jumlah replika maksimum.
minReplicas
Ya
Jumlah replika minimum.
stabilizationWindowSeconds
Tidak
Jendela stabilisasi untuk mencegah fluktuasi replika yang cepat. Default: 300 detik.
prediction.quantile
Ya
Kuantil prediksi (0–100). Nilai yang lebih tinggi menghasilkan prediksi yang lebih konservatif. Direkomendasikan: 90–99. Default: 99.
prediction.scaleUpForward
Ya
Waktu yang dibutuhkan pod baru untuk menjadi
Ready, juga dikenal sebagai waktu cold start.instanceBounds
Tidak
Batas jumlah replika untuk periode waktu tertentu.
startTime: Waktu mulai.endTime: Waktu selesai.
instanceBounds.bounds.cron
Tidak
Ekspresi cron untuk tugas terjadwal. Contohnya,
- cron: "* 0-8 ? * MON-FRI"dijalankan setiap menit dari pukul 00.00 hingga 08.59, Senin hingga Jumat.Bidang ekspresi cron. Lihat Cron scheduled tasks.
Bidang
Wajib
Nilai yang diizinkan
Karakter khusus
Menit
Ya
0–59
* / , -
Jam
Ya
0–23
* / , -
Hari dalam bulan
Ya
1–31
* / , - ?
Bulan
Ya
1–12 atau JAN–DEC
* / , -
Hari dalam minggu
Ya
0–6 atau SUN–SAT
* / , - ?
CatatanBulan dan Hari dalam minggu tidak peka huruf besar/kecil. Misalnya,
SUN,Sun, dansunsetara.Hari dalam minggu menggunakan nilai default
*jika tidak ditentukan.Karakter khusus:
*: Cocok dengan semua nilai./: Menentukan penambahan.,: Mencantumkan nilai-nilai yang disebutkan.-: Menentukan rentang.?: Tidak ada nilai spesifik. Gunakan pada Hari dalam bulan atau Hari dalam minggu ketika yang lainnya telah ditetapkan.
Buat kebijakan penskalaan AHPA.
kubectl apply -f ahpa-demo.yaml
Langkah 5: Lihat hasil prediksi
Enable the Prometheus dashboard for AHPA untuk melihat hasil prediksi.
Prediksi memerlukan tujuh hari data historis. Jalankan aplikasi contoh selama tujuh hari, atau tentukan aplikasi produksi yang sudah ada dalam resource AHPA.
Contoh ini menggunakan observer mode penskalaan (observer mode) untuk membandingkan prediksi AHPA terhadap garis dasar HPA terkait kebutuhan sumber daya aktual.

Penggunaan CPU Aktual dan Prediksi: Garis hijau: penggunaan CPU aktual (HPA). Garis kuning: penggunaan CPU yang diprediksi oleh AHPA.
Kuning di atas hijau: kapasitas yang diprediksi mencukupi.
Kuning naik sebelum hijau: AHPA melakukan pemanasan sumber daya sebelum permintaan meningkat.
Tren Pod: Garis hijau: jumlah pod aktual (HPA). Garis kuning: jumlah pod yang diprediksi oleh AHPA.
Kurva kuning lebih rendah: AHPA mencapai tujuan yang sama dengan jumlah pod lebih sedikit.
Kurva kuning lebih mulus: penskalaan AHPA lebih stabil, meningkatkan stabilitas sistem.
Jika tren prediksi sesuai ekspektasi, atur mode penskalaan ke auto agar AHPA mengelola penskalaan.