All Products
Search
Document Center

Container Service for Kubernetes:Men-deploy AHPA

Last Updated:Apr 24, 2026

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

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 komponen AHPA Controller. Klik Install pada kartu komponen tersebut dan ikuti petunjuk di layar untuk menyelesaikan instalasi.

Langkah 2: Konfigurasikan sumber data Prometheus

  1. Masuk ke ARMS console.

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

  3. Di bagian atas halaman Instances, pilih wilayah instans Prometheus Anda, lalu klik nama instans tersebut, yang sama dengan nama kluster ACK Anda.

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

  5. Atur URL kueri Prometheus di kluster ACK Anda.

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

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

    1. Buat file bernama 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

      Tabel 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: 40 menetapkan 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

      * / , - ?

      Catatan
      • Bidang Bulan dan Hari dalam minggu tidak peka huruf besar/kecil. Misalnya, SUN, Sun, dan sun memiliki 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.

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

    Catatan

    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.

    image.png

    • 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