Container Service for Kubernetes mendukung Advanced Horizontal Pod Autoscaler (AHPA). AHPA menganalisis data historis untuk memprediksi permintaan resource di masa depan, lalu secara dinamis menyesuaikan jumlah replika Pod guna melakukan scale out dan pemanasan resource sebelum puncak traffic terjadi. Hal ini meningkatkan responsivitas dan stabilitas sistem. Selama periode off-peak, AHPA juga melakukan scale in terhadap resource untuk mengurangi biaya.
Prasyarat
Anda memiliki ACK managed cluster atau ACK Serverless cluster. Untuk informasi lebih lanjut, lihat Create an ACK managed cluster atau Create a cluster.
Managed Service for Prometheus harus diaktifkan dan telah mengumpulkan setidaknya tujuh hari data historis aplikasi, seperti penggunaan CPU dan memori. Untuk informasi lebih lanjut tentang cara mengaktifkannya, lihat Access and configure Managed Service for 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 komponen AHPA Controller. Klik Install pada kartu komponen tersebut dan 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 Anda, lalu klik nama instans tersebut, yang sama dengan nama kluster ACK Anda.
Pada halaman Settings, di bagian HTTP API Address (Grafana Read Address), catat nilai bidang-bidang berikut:
(Opsional) Jika autentikasi berbasis token diaktifkan, catat token akses.
Lihat dan catat titik akhir jaringan internal (Internal Network) (URL Prometheus).
Atur URL kueri Prometheus di kluster ACK Anda.
Buat file bernama
application-intelligence.yamldengan konten berikut.prometheusUrl: Titik akhir untuk 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 harus mengonfigurasi bidang-bidang berikut dalam ConfigMap ini:
Untuk informasi lebih lanjut, lihat Enable the Prometheus dashboard for AHPA.
Jalankan perintah berikut untuk menerapkan
application-intelligence.kubectl apply -f application-intelligence.yaml
Langkah 3: Deploy layanan uji coba
Layanan uji coba mencakup Penyebaran bernama fib-deployment, layanan bernama fib-svc, dan generator beban bernama fib-loader untuk mensimulasikan fluktuasi traffic. Anda juga akan menerapkan resource HorizontalPodAutoscaler (HPA) untuk menetapkan garis dasar sebagai perbandingan 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
Untuk mengonfigurasi kebijakan penskalaan, buat resource AdvancedHorizontalPodAutoscaler.
Buat file bernama
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: 15Tabel berikut menjelaskan beberapa parameter tersebut.
Parameter
Wajib
Deskripsi
scaleTargetRef
Ya
Menentukan target Deployment.
metrics
Ya
Mengonfigurasi metrik untuk penskalaan. Metrik yang didukung mencakup CPU, GPU, memori, QPS, dan RT.
target
Ya
Ambang batas target. Misalnya,
averageUtilization: 40menetapkan target penggunaan CPU sebesar 40%.scaleStrategy
Tidak
Menentukan mode penskalaan. Nilai default-nya adalah
observer.auto: AHPA melakukan operasi penskalaan.observer: AHPA hanya mengamati tetapi tidak melakukan operasi penskalaan. Anda dapat menggunakan mode ini untuk memeriksa apakah AHPA bekerja sesuai harapan.proactive: Hanya prediksi proaktif yang berlaku.reactive: Hanya penskalaan reaktif yang berlaku.
maxReplicas
Ya
Jumlah maksimum replika untuk scale out.
minReplicas
Ya
Jumlah minimum replika untuk scale in.
stabilizationWindowSeconds
Tidak
Jendela stabilisasi untuk operasi penskalaan. Ini mencegah fluktuasi cepat pada jumlah replika. Nilai default-nya adalah 300 detik.
prediction.quantile
Ya
Kuantil prediksi. Nilai yang lebih tinggi menghasilkan prediksi yang lebih konservatif. Nilainya harus antara 0 hingga 100. Rentang yang direkomendasikan adalah 90 hingga 99, dengan nilai default 99.
prediction.scaleUpForward
Ya
Waktu yang dibutuhkan Pod baru untuk menjadi
Ready. Ini juga dikenal sebagai waktu cold start.instanceBounds
Tidak
Batas jumlah replika dalam periode waktu tertentu.
startTime: Waktu mulai.endTime: Waktu selesai.
instanceBounds.bounds.cron
Tidak
Mengonfigurasi tugas terjadwal. Ekspresi cron menentukan jadwal menggunakan beberapa bidang yang dipisahkan spasi untuk menentukan serangkaian waktu. Misalnya,
- cron: "* 0-8 ? * MON-FRI"menentukan bahwa tugas dijalankan setiap menit dari pukul 00.00 hingga 08.59 pada hari Senin hingga Jumat.Bidang-bidang dalam ekspresi cron dijelaskan sebagai berikut. Untuk informasi lebih lanjut, 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
* / , - ?
CatatanBidang Bulan dan Hari dalam minggu tidak peka huruf besar/kecil. Misalnya,
SUN,Sun, dansunmemiliki efek yang sama.Jika bidang Hari dalam Minggu tidak dikonfigurasi, nilainya default menjadi
*.Karakter khusus:
*: Mencocokkan semua nilai yang mungkin dalam bidang tersebut./: Menentukan penambahan nilai.,: Menyebutkan daftar nilai.-: Menentukan rentang.?: Menunjukkan bahwa tidak ada nilai spesifik yang ditetapkan. Gunakan ini di bidang Hari dalam bulan atau Hari dalam minggu ketika bidang lainnya telah ditentukan.
Jalankan perintah berikut untuk membuat kebijakan penskalaan AHPA.
kubectl apply -f ahpa-demo.yaml
Langkah 5: Lihat hasil prediksi
Untuk melihat hasil penskalaan prediktif AHPA, Anda dapat mengaktifkan dasbor Prometheus untuk AHPA.
Karena prediksi memerlukan tujuh hari data historis, Anda harus menjalankan aplikasi contoh selama tujuh hari setelah deployment untuk melihat hasil prediksi. Jika Anda memiliki aplikasi produksi yang sudah ada, Anda dapat langsung menentukannya dalam resource AHPA.
Contoh ini menggunakan mode penskalaan observer (mode observer) untuk membandingkan hasil prediksi AHPA dengan hasil dari kebijakan HPA standar. Hasil HPA berfungsi sebagai garis dasar untuk kebutuhan resource aktual aplikasi. Perbandingan ini membantu Anda mengamati apakah prediksi AHPA sesuai dengan ekspektasi Anda.

Penggunaan CPU Aktual dan Prediksi: Garis hijau merepresentasikan penggunaan CPU aktual yang dikelola oleh HPA. Garis kuning merepresentasikan penggunaan CPU yang diprediksi oleh AHPA.
Ketika kurva kuning berada di atas kurva hijau, ini menunjukkan bahwa kapasitas CPU yang diprediksi mencukupi.
Ketika kurva kuning naik sebelum kurva hijau, ini menunjukkan bahwa AHPA menyiapkan resource yang diperlukan lebih awal.
Tren Pod: Garis hijau merepresentasikan jumlah Pod aktual yang diskalakan oleh HPA. Garis kuning merepresentasikan jumlah Pod yang diprediksi oleh AHPA.
Kurva kuning yang lebih rendah dapat menunjukkan bahwa AHPA mencapai tujuan yang sama dengan jumlah Pod lebih sedikit.
Kurva kuning lebih mulus daripada kurva hijau, menunjukkan bahwa event penskalaan yang dikelola oleh AHPA lebih stabil, sehingga meningkatkan stabilitas layanan.
Hasil prediksi menunjukkan bahwa tren penskalaan sesuai ekspektasi. Jika tren tersebut memenuhi ekspektasi Anda setelah periode pengamatan, Anda dapat mengatur mode penskalaan ke auto dan membiarkan AHPA mengelola penskalaan.
Dokumen terkait
Untuk menggunakan metrik GPU dari Managed Service for Prometheus dalam penskalaan prediktif AHPA, lihat Configure AHPA predictive scaling based on GPU metrics.
Untuk melihat dasbor pemantauan yang disediakan oleh Managed Service for Prometheus, lihat Enable the Prometheus dashboard for AHPA.