Container Service for Kubernetes mendukung Advanced Horizontal Pod Autoscaler (AHPA). AHPA memprediksi permintaan sumber daya masa depan dengan menganalisis data historis, menyesuaikan jumlah replika pod secara dinamis. Ini memastikan sumber daya diperluas dan di-prafetch sebelum puncak permintaan yang diprediksi, meningkatkan kecepatan respons dan stabilitas sistem. Sebaliknya, AHPA mengurangi sumber daya sebelum palung permintaan yang diprediksi untuk menghemat biaya.
Prasyarat
Sebuah ACK managed cluster atau ACK Serverless cluster telah dibuat. Untuk informasi lebih lanjut, lihat Buat ACK managed cluster atau Buat ACK Serverless cluster.
Managed Service for Prometheus (Prometheus) diaktifkan, dan statistik aplikasi dalam tujuh hari terakhir dikumpulkan oleh Prometheus. Statistik tersebut mencakup detail penggunaan CPU dan memori aplikasi. Untuk informasi lebih lanjut tentang cara mengaktifkan Prometheus, lihat Gunakan Managed Service for Prometheus.
Langkah 1: Instal controller AHPA
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.
Pada halaman Add-ons, temukan kartu AHPA Controller. Klik Install pada kartu AHPA Controller dan ikuti petunjuk di layar untuk menginstal komponen tersebut.
Langkah 2: Tambahkan Prometheus sebagai sumber data
Masuk ke Konsol ARMS.
Di panel navigasi kiri, pilih .
Di pojok kiri atas halaman Instances, pilih wilayah tempat instance Prometheus Anda diterapkan. Temukan instance Prometheus yang ingin Anda kelola dan klik namanya. Nama instance Prometheus sama dengan nama cluster ACK.
Pada halaman Settings, temukan bagian HTTP API URL (Grafana Read URL), dan catat informasi berikut:
Opsional. Jika token akses diaktifkan, konfigurasikan token akses untuk kluster Anda.
Catat internal titik akhir.
Tentukan titik akhir instance Prometheus dalam konfigurasi kluster ACK.
Buat file bernama application-intelligence.yaml. Salin dan tempel konten berikut ke file tersebut.
prometheusUrl: Titik akhir instance Prometheus.token: Token akses instance 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"CatatanJika Anda ingin melihat metrik Layanan Prometheus yang ditampilkan pada dasbor AHPA, atur parameter berikut dalam ConfigMap:
prometheus_writer_url: Tentukan titik akhir remote write internal dari instance Prometheus.prometheus_writer_ak: Tentukan ID AccessKey akun Alibaba Cloud.prometheus_writer_sk: Tentukan Rahasia AccessKey akun Alibaba Cloud.
Untuk informasi lebih lanjut, lihat Aktifkan Managed Service for Prometheus untuk AHPA.
Jalankan perintah berikut untuk menerapkan application-intelligence:
kubectl apply -f application-intelligence.yaml
Langkah 3: Terapkan layanan uji
Terapkan layanan uji yang terdiri dari Deployment bernama fib-deployment dan Service bernama fib-svc. Terapkan aplikasi bernama fib-loader yang digunakan untuk mengirim permintaan ke layanan uji untuk mensimulasikan fluktuasi lalu lintas. Kemudian, terapkan Horizontal Pod Autoscaler (HPA) untuk menskalakan layanan uji. Dengan cara ini, Anda dapat membandingkan hasil penskalaan HPA dan hasil prediksi AHPA.
Buat file bernama demo.yaml. Salin dan tempel konten berikut ke file tersebut:
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: Terapkan AHPA
Untuk menerapkan AHPA dan mengonfigurasi kebijakan AHPA, lakukan langkah-langkah berikut:
Buat file bernama ahpa-demo.yaml. Salin dan tempel konten berikut ke file tersebut:
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.
Parameter
Diperlukan
Deskripsi
scaleTargetRef
Ya
Deployment yang ingin Anda konfigurasikan untuk penskalaan prediktif.
metrics
Ya
Metrik berdasarkan mana kebijakan AHPA dilaksanakan. Metrik berikut didukung: CPU, GPU, memori, permintaan per detik (QPS), dan waktu respons (RT).
target
Ya
Ambang batas penskalaan. Misalnya, jika Anda menentukan
averageUtilization: 40, ambang batas utilisasi CPU untuk memulai penskalaan adalah 40%.scaleStrategy
Tidak
Mode penskalaan AHPA. Nilai default: observer. Nilai valid:
auto: AHPA secara otomatis melakukan operasi penskalaan.
observer: AHPA mengamati penggunaan sumber daya tetapi tidak melakukan operasi penskalaan. Anda dapat menggunakan mode observer untuk memeriksa apakah AHPA bekerja sesuai harapan.
scalingUpOnly: AHPA hanya melakukan operasi skala-out tetapi tidak melakukan operasi skala-in.
proactive: Hanya prediksi aktif yang berlaku.
reactive: Hanya prediksi pasif yang berlaku.
maxReplicas
Ya
Jumlah maksimum replika pod yang diizinkan.
minReplicas
Ya
Jumlah minimum replika pod yang harus dijamin.
stabilizationWindowSeconds
Tidak
Waktu cooldown aktivitas skala-in. Nilai default: 300. Unit: detik.
prediction. quantile
Ya
Kuantil di mana nilai metrik aktual diharapkan berada di bawah ambang batas penskalaan. Nilai yang lebih besar menunjukkan prediksi yang lebih konservatif, yang menunjukkan probabilitas yang lebih tinggi bahwa sistem akan menskalakan sumber daya masuk atau keluar untuk memastikan stabilitas bisnis. Nilai valid: 0 hingga 1. Nilai default: 0.99. Nilai akurat hingga dua tempat desimal. Kami merekomendasikan Anda mengatur parameter ini ke nilai antara 0.90 hingga 0.99.
prediction. scaleUpForward
Ya
Durasi cold start, yaitu periode waktu dari saat pod dibuat hingga pod berada dalam keadaan Ready.
instanceBounds
Tidak
Durasi operasi penskalaan. Jumlah replika pod dibatasi oleh jumlah maksimum dan minimum replika pod yang ditentukan oleh AHPA.
startTime: waktu mulai operasi penskalaan.
endTime: waktu akhir operasi penskalaan.
instanceBounds. bounds. cron
Tidak
Parameter ini digunakan untuk membuat pekerjaan penskalaan terjadwal. Ekspresi CRON
- cron: "* 0-8 ? * MON-FRI"menentukan bahwa pekerjaan penskalaan berjalan dari 00:00:00 hingga 08:00:00 pada hari Senin hingga Jumat setiap bulan.Tabel berikut menjelaskan bidang-bidang yang terkandung dalam ekspresi CRON. Untuk informasi lebih lanjut, lihat Ekspresi Cron.
Bidang
Diperlukan
Nilai valid
Karakter spesial valid
Menit
Ya
0 hingga 59
* / , -
Jam
Ya
0 hingga 23
* / , -
Hari dalam Bulan
Ya
1 hingga 31
* / , – ?
Bulan
Ya
1 hingga 12 atau JAN hingga DEC
* / , -
Hari dalam Minggu
Tidak
0 hingga 6 atau SUN hingga SAT
* / , – ?
CatatanBidang Bulan dan Hari dalam Minggu tidak bersifat case-sensitive. Misalnya, Anda dapat menentukan
SUN,Sun, atausun.Jika Anda tidak menentukan bidang Hari dalam Minggu, nilai default
*digunakan.Daftar berikut menjelaskan karakter spesial:
*: menentukan nilai arbitrer./: menentukan penambahan.,: memisahkan daftar nilai.-: menentukan rentang.?: menentukan placeholder.
Jalankan perintah berikut untuk menerapkan kebijakan AHPA:
kubectl apply -f fib-deployment.yaml
Langkah 5: Lihat hasil prediksi
Periksa apakah AHPA bekerja sesuai harapan. Anda dapat melihat hasilnya menggunakan Prometheus. Untuk informasi lebih lanjut, lihat Aktifkan Managed Service for Prometheus untuk AHPA.
Hasil prediksi AHPA dihasilkan berdasarkan data historis dalam tujuh hari terakhir. Oleh karena itu, Anda harus menunggu tujuh hari setelah menerapkan kebijakan AHPA. Untuk menerapkan kebijakan AHPA ke aplikasi yang ada, tentukan aplikasi tersebut dalam konfigurasi kebijakan AHPA.
Dalam contoh ini, kebijakan AHPA menggunakan mode penskalaan observer. Gambar berikut menunjukkan hasil prediksi AHPA yang dibandingkan dengan hasil penskalaan HPA. Hasil penskalaan HPA menunjukkan konsumsi sumber daya aktual selama runtime aplikasi. Anda dapat menggunakan perbandingan ini untuk memeriksa apakah hasil prediksi AHPA sesuai harapan.

Penggunaan CPU Aktual dan Prediksi: Penggunaan CPU aktual berdasarkan HPA diwakili oleh garis hijau. Penggunaan CPU yang diprediksi oleh AHPA diwakili oleh garis kuning.
Gambar di atas menunjukkan bahwa penggunaan CPU yang diprediksi lebih tinggi daripada penggunaan CPU aktual. Ini menunjukkan bahwa kapasitas CPU yang diprediksi cukup.
Gambar di atas menunjukkan bahwa penggunaan CPU yang diprediksi mencapai nilai tertentu lebih awal daripada penggunaan CPU aktual. Ini menunjukkan bahwa sumber daya yang diperlukan telah disiapkan sebelumnya.
Tren Pod: Jumlah pod aktual yang disediakan oleh HPA diwakili oleh garis hijau. Jumlah pod yang diprediksi oleh AHPA diwakili oleh garis kuning.
Gambar di atas menunjukkan bahwa nilai yang diwakili oleh garis kuning lebih kecil daripada nilai yang diwakili oleh garis hijau. Ini menunjukkan bahwa jumlah pod yang diprediksi lebih kecil daripada jumlah pod aktual.
Gambar di atas menunjukkan bahwa kurva kuning lebih halus daripada kurva hijau. Ini menunjukkan bahwa perubahan jumlah pod lebih stabil dengan menggunakan layanan penskalaan AHPA, yang meningkatkan stabilitas bisnis.
Hasil menunjukkan bahwa AHPA dapat menggunakan penskalaan prediktif untuk menangani beban kerja fluktuatif sesuai harapan. Setelah Anda mengonfirmasi hasil prediksi, Anda dapat mengatur mode penskalaan ke auto, yang memungkinkan AHPA secara otomatis menskalakan pod.
Referensi
Untuk informasi lebih lanjut tentang cara menggunakan Prometheus untuk memantau metrik GPU dan cara menggunakan AHPA untuk melakukan penskalaan prediktif berdasarkan metrik GPU, lihat Gunakan AHPA untuk melakukan penskalaan prediktif berdasarkan metrik GPU.
Untuk informasi lebih lanjut tentang cara menggunakan dasbor yang disediakan oleh Prometheus untuk memantau aplikasi Anda, lihat Aktifkan Managed Service for Prometheus untuk AHPA.