全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan Knative dan AHPA untuk menerapkan penskalaan otomatis berjadwal

更新时间:Jul 02, 2025

Advanced Horizontal Pod Autoscaler (AHPA) mendukung penskalaan prediktif berdasarkan metrik historis seperti permintaan per detik (RPS), konkurensi, penggunaan CPU, dan memori. Kemampuan ini memungkinkan perencanaan penskalaan proaktif, membantu menghindari penundaan dalam penskalaan layanan. AHPA juga memungkinkan Anda menentukan jumlah maksimum dan minimum pod replika dalam periode tertentu. Dengan menggunakan ekspresi cron, Anda dapat mengatur rentang penskalaan untuk interval waktu tertentu, menentukan jumlah replika yang diinginkan guna memastikan alokasi sumber daya optimal selama berbagai waktu dalam sehari.

Prasyarat

Langkah 1: Gunakan AHPA untuk mengonfigurasi metrik untuk penskalaan otomatis

Gunakan template YAML berikut untuk membuat file konfigurasi AHPA dan terapkan ke kluster:

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
  name: ahpa-demo
spec:
  metrics:
  - type: Resource
    resource:
      name: rps
      target:
        type: Utilization
        averageUtilization: 10 # Ambang batas RPS diatur menjadi 10. 
  maxReplicas: 50 # Jumlah maksimum pod yang direplikasi diatur menjadi 50. 
  minReplicas: 0 # Jumlah minimum pod yang direplikasi diatur menjadi 0. 
  prediction:
    quantile: 95 # Tingkat kepercayaan prediksi diatur menjadi 95%. 
    scaleUpForward: 180 # Rentang waktu prediksi maju diatur menjadi 180 detik. 
# Jumlah pod yang direplikasi dibatasi oleh jumlah maksimum dan minimum pod yang direplikasi yang ditentukan oleh AHPA dari 00:00:00 pada 1 Juni 2023 hingga 00:00:00 pada 1 Juni 2123. 
  instanceBounds:
  - startTime: "2023-06-01 00:00:00"
    endTime: "2123-06-01 00:00:00"
    bounds:
# Jumlah minimum pod yang direplikasi adalah 0 dan jumlah maksimum pod yang direplikasi adalah 50 dari pukul 0 pagi hingga 6 pagi. 
    - cron: '* 0-6 ? * *'
      maxReplicas: 50
      minReplicas: 0
# Jumlah minimum pod yang direplikasi adalah 5 dan jumlah maksimum pod yang direplikasi adalah 50 dari pukul 7 pagi hingga 9 pagi. 
    - cron: '* 7-9 ? * *'
      maxReplicas: 50
      minReplicas: 5
# Jumlah minimum pod yang direplikasi adalah 10 dan jumlah maksimum pod yang direplikasi adalah 50 dari pukul 10 pagi hingga 4 sore. 
    - cron: '* 10-16 ? * *'
      maxReplicas: 50
      minReplicas: 10
# Jumlah minimum pod yang direplikasi adalah 2 dan jumlah maksimum pod yang direplikasi adalah 50 dari pukul 5 sore hingga 11 malam. 
    - cron: '* 17-23 ? * *'
      maxReplicas: 50
      minReplicas: 2

Parameter

Diperlukan

Deskripsi

metrics

Ya

Konfigurasikan metrik untuk penskalaan otomatis. Metrik RPS, konkurensi, CPU, dan memori didukung.

maxReplicas

Ya

Jumlah maksimum pod yang direplikasi yang diizinkan.

minReplicas

Ya

Jumlah minimum pod yang direplikasi yang harus dijamin.

instanceBounds

Tidak

Periode waktu selama jumlah pod yang direplikasi dibatasi oleh jumlah maksimum dan minimum pod yang direplikasi yang ditentukan oleh AHPA.

  • startTime: waktu mulai.

  • endTime: waktu akhir.

bounds

Tidak

Jumlah maksimum dan minimum pod yang direplikasi dalam periode waktu yang ditentukan.

  • cron: ekspresi cron yang menentukan periode waktu. Anda dapat memasukkan ekspresi cron untuk mengonfigurasi CronJob.

    Untuk informasi lebih lanjut tentang cara menggunakan ekspresi cron untuk mengonfigurasi CronJob atau secara otomatis menambah pod, lihat bagian Bidang yang digunakan dalam ekspresi cron dan lihat definisi karakter khusus dan karakter wildcard yang digunakan dalam ekspresi cron.

  • maxReplicas: jumlah maksimum pod yang direplikasi.

  • minReplicas: jumlah minimum pod yang direplikasi.

Bidang yang digunakan dalam ekspresi cron

Tabel berikut menjelaskan bidang dalam ekspresi CRON. Untuk informasi lebih lanjut, lihat Ekspresi Cron.

Bidang

Karakter khusus

Diperlukan

Deskripsi

Menit

* / , -

Ya

Nilai valid: 0 hingga 59.

Jam

* / , -

Ya

Nilai valid: 0 hingga 23.

Hari dalam bulan

* / , – ?

Ya

Nilai valid: 1 hingga 31.

Bulan

* / , -

Ya

Nilai valid: 1 hingga 12 atau JAN hingga DEC.

Catatan

Nilai valid dari JAN hingga DEC tidak peka huruf besar/kecil.

Hari dalam minggu

* / , – ?

Tidak

Nilai valid: 0 hingga 6 atau SUN hingga SAT.

Catatan
  • Nilai valid dari SUN hingga SAT tidak peka huruf besar/kecil. Misalnya, baik SUN maupun sun menunjukkan hari Minggu.

  • Jika Anda tidak menentukan bidang Hari dalam minggu, hari apa pun dalam seminggu akan diterapkan, yang setara dengan karakter wildcard (*).

Karakter khusus dalam ekspresi cron:

  • Tanda bintang (*) menunjukkan nilai apa saja. Contohnya, * menunjukkan menit atau jam apa pun.

  • Garis miring (/) menunjukkan ukuran langkah. Contohnya, /5 menunjukkan lima unit waktu.

  • Koma (,) digunakan sebagai pemisah. Contohnya, 1,3,5 menunjukkan nilai 1, 3, dan 5.

  • Tanda hubung (-) digunakan dalam rentang nilai. Contohnya, 1-5 menunjukkan nilai 1 hingga 5.

  • Tanda tanya (?) hanya digunakan dalam bidang Hari dalam Bulan dan Hari dalam Minggu untuk menunjukkan nilai variabel.

Langkah 2: Buat Layanan Knative dan aktifkan AHPA untuk Layanan tersebut

Setelah mengaktifkan AHPA, Anda dapat menggunakannya melalui Layanan Knative.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih Applications > Knative.

  3. Di tab Layanan halaman Knative, atur Namespace ke default, klik Create from Template, salin konten YAML berikut ke editor, dan klik Create untuk membuat Layanan bernama helloworld-go-demo.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go-demo
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev # Tentukan Plugin AHPA. 
            autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # Jika Anda memodifikasi parameter template AHPA, revisi yang sesuai juga diperbarui. 
        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 Layanan, yang akan digunakan dalam Langkah 3: Akses Layanan.

    image

Langkah 3: Akses Layanan

Jalankan perintah berikut untuk mengakses Layanan:

# 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

Keluaran yang diharapkan:

Hello Knative!

Langkah 4 (Opsional): Verifikasi penskalaan berjadwal

Di Monitoring Dashboards Knative, Anda dapat melihat tren penskalaan pod untuk Layanan Knative. Untuk informasi lebih lanjut tentang dasbor Knative, lihat Lihat Dasbor Pemantauan Knative.

Catatan
  • Ketika jumlah pod untuk aplikasi Knative diskalakan menjadi nol, metrik seperti konkurensi permintaan dan jumlah permintaan yang dikirim per detik tidak dapat dikumpulkan oleh Managed Service for Prometheus. Anda dapat melihat metrik ini di konsol hanya setelah mengakses pod aplikasi Knative.

  • Ketika jumlah pod untuk aplikasi Knative tidak nol, Anda dapat langsung melihat metrik seperti konkurensi permintaan dan jumlah permintaan yang dikirim ke pod per detik di konsol tanpa harus mengakses pod aplikasi Knative.

image.png

Referensi

Anda dapat mengonfigurasi penskalaan otomatis berdasarkan jumlah permintaan pod bersamaan dan konfigurasi RPS. Untuk informasi lebih lanjut, lihat Aktifkan Penskalaan Otomatis untuk Menahan Fluktuasi Lalu Lintas.