All Products
Search
Document Center

Container Service for Kubernetes:Deploy AHPA untuk penskalaan otomatis prediktif

Last Updated:Aug 27, 2026

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

Langkah 1: Instal AHPA Controller

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

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Components and Add-ons .

  3. Pada halaman Add-ons, temukan AHPA Controller lalu klik Install. Ikuti petunjuk yang muncul.

Langkah 2: Konfigurasikan sumber data Prometheus

  1. Masuk ke ARMS console.

  2. Di panel navigasi kiri, pilih Managed Service for Prometheus > Instances.

  3. Pada halaman Instances, pilih wilayah, lalu klik instans yang dinamai sesuai kluster ACK Anda.

  4. 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).

  5. Tetapkan URL kueri Prometheus di kluster ACK Anda.

    1. Buat file application-intelligence.yaml dengan 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"
      Catatan

      Untuk 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.

      Lihat Aktifkan Dasbor Prometheus untuk AHPA.

    2. 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.

  1. Buat file ahpa-demo.yaml dengan 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: 15

    Parameter 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: 40 menargetkan 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

    * / , - ?

    Catatan
    • Bulan dan Hari dalam minggu tidak peka huruf besar/kecil. Misalnya, SUN, Sun, dan sun setara.

    • 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.

  2. 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.

Catatan

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.

image.png

  • 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.

Dokumen terkait