Layanan Knative dapat mengalami lonjakan lalu lintas yang dapat diprediksi—misalnya, jam sibuk bisnis, periode sepi semalam, atau jendela batch terjadwal. Advanced Horizontal Pod Autoscaler (AHPA) menangani kedua pola tersebut: ia memprediksi permintaan berdasarkan metrik historis (RPS, konkurensi, CPU, dan memori) serta melakukan penskalaan secara proaktif, sedangkan instanceBounds memungkinkan Anda menetapkan batas bawah dan atas jumlah replika selama jendela waktu tertentu menggunakan ekspresi cron.
Saat jendela terjadwal dimulai, AHPA menskalakan Pod hingga mencapai jumlah minimum yang ditentukan. Ketika jendela berakhir, AHPA mengembalikan skala. Hal ini menjadikan penskalaan otomatis berbasis jadwal berguna untuk memastikan jumlah replika yang memadai selama jam kerja dan memungkinkan skala kembali ke nol semalam.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Knative dideploy di kluster Anda. Untuk informasi lebih lanjut, lihat Deploy Knative.
-
AHPA dideploy. Untuk informasi lebih lanjut, lihat Deploy AHPA.
Langkah 1: Konfigurasikan metrik autoscaling dengan AHPA
Buat resource AdvancedHorizontalPodAutoscalerTemplate yang mendefinisikan metrik penskalaan prediktif dan batas replika terjadwal. Terapkan YAML berikut ke kluster Anda:
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
name: ahpa-demo
spec:
metrics:
- type: Resource
resource:
name: rps
target:
type: Utilization
averageUtilization: 10 # Lakukan scale out ketika RPS per pod melebihi 10
maxReplicas: 50 # Batas atas global
minReplicas: 0 # Batas bawah global (memungkinkan scale-to-zero)
prediction:
quantile: 95 # Gunakan prediksi persentil ke-95 untuk penskalaan konservatif
scaleUpForward: 180 # Prediksi 180 detik ke depan agar penskalaan terjadi sebelum permintaan tiba
instanceBounds:
- startTime: "2023-06-01 00:00:00" # Batas aktif mulai tanggal ini
endTime: "2123-06-01 00:00:00" # Batas aktif hingga tanggal ini
bounds:
- cron: '* 0-6 ? * *' # Pukul 00.00 – 06.00: izinkan scale-to-zero
maxReplicas: 50
minReplicas: 0
- cron: '* 7-9 ? * *' # Pukul 07.00 – 09.00: pertahankan minimal 5 replika
maxReplicas: 50
minReplicas: 5
- cron: '* 10-16 ? * *' # Pukul 10.00 – 16.00: pertahankan minimal 10 replika
maxReplicas: 50
minReplicas: 10
- cron: '* 17-23 ? * *' # Pukul 17.00 – 23.00: pertahankan minimal 2 replika
maxReplicas: 50
minReplicas: 2
Parameter utama:
| Parameter | Wajib | Deskripsi |
|---|---|---|
metrics |
Ya | Metrik yang digunakan untuk autoscaling. Nilai yang didukung: RPS, concurrency, CPU, dan memory. |
maxReplicas |
Ya | Jumlah maksimum replika yang diizinkan secara global. |
minReplicas |
Ya | Jumlah minimum replika yang harus dipertahankan secara global. |
instanceBounds |
Tidak | Rentang waktu selama AHPA memberlakukan batas replika per periode. Berisi startTime dan endTime. |
bounds |
Tidak | Batas replika per periode. Setiap entri menentukan ekspresi cron, maxReplicas, dan minReplicas. |
Sintaks ekspresi cron
Ekspresi cron terdiri dari lima bidang yang dipisahkan spasi. Untuk referensi lengkap, lihat Cron expressions.
| Bidang | Karakter khusus | Wajib | Nilai valid |
|---|---|---|---|
| Menit | * / , - |
Ya | 0–59 |
| Jam | * / , - |
Ya | 0–23 |
| Hari dalam bulan | * / , - ? |
Ya | 1–31 |
| Bulan | * / , - |
Ya | 1–12 atau JAN–DEC (tidak peka huruf besar/kecil) |
| Hari dalam minggu | * / , - ? |
Tidak | 0–6 atau SUN–SAT (tidak peka huruf besar/kecil). Jika dihilangkan, berlaku untuk hari apa pun dalam minggu. |
Karakter khusus:
-
*— cocok dengan nilai apa pun (misalnya,*pada Jam berarti setiap jam) -
/— menentukan langkah (misalnya,/5berarti setiap 5 unit) -
,— memisahkan nilai individual (misalnya,1,3,5) -
-— menentukan rentang (misalnya,1-5) -
?— menunjukkan nilai variabel; hanya berlaku pada Hari dalam bulan dan Hari dalam minggu
Langkah 2: Buat layanan Knative dan aktifkan AHPA
Hubungkan AHPA ke layanan Knative dengan menambahkan dua anotasi ke manifes layanan. Ketika Anda memperbarui templat AHPA, Knative secara otomatis membuat revisi baru.
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, temukan kluster Anda dan klik namanya. Di panel navigasi kiri, pilih Applications > Knative.
-
Pada tab Services, atur Namespace ke default, klik Create from Template, tempel YAML berikut, lalu klik Create.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go-demo spec: template: metadata: annotations: autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev # Gunakan autoscaler AHPA autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # Referensi templat AHPA dari Langkah 1 spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"Setelah layanan dibuat, catat alamat gateway dan nama domain-nya—Anda memerlukannya di Langkah 3.
Langkah 3: Akses layanan
Jalankan perintah berikut untuk mengirim permintaan ke layanan. Ganti nama domain dan alamat gateway dengan nilai yang dicatat di Langkah 2.
# helloworld-go-demo.default.example.com adalah nama domain default layanan.
# alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com adalah alamat gateway layanan.
curl -H "Host: helloworld-go-demo.default.example.com" http://alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com
Output yang diharapkan:
Hello Knative!
Langkah 4 (Opsional): Verifikasi penskalaan terjadwal
Lihat tren penskalaan Pod pada Monitoring Dashboards di halaman Knative. Untuk petunjuk penyiapan, lihat View the Knative monitoring dashboard.
Langkah berikutnya
Konfigurasikan autoscaling berdasarkan permintaan konkuren dan RPS tanpa batas jadwal. Untuk informasi lebih lanjut, lihat Enable autoscaling to withstand traffic fluctuations.