All Products
Search
Document Center

Container Service for Kubernetes:Deploy AHPA

Last Updated:Dec 26, 2025

Container Service for Kubernetes mendukung Advanced Horizontal Pod Autoscaler (AHPA). AHPA menganalisis data historis untuk memprediksi kebutuhan resource di masa depan dan menyesuaikan jumlah replika Pod secara dinamis. Dengan demikian, kapasitas resource diperluas dan dipra-ambil sebelum permintaan mencapai puncaknya, sehingga meningkatkan kecepatan respons dan stabilitas sistem. Saat periode lalu lintas rendah diprediksi, AHPA juga melakukan skala-masuk resource pada waktu yang tepat untuk menghemat biaya.

Prasyarat

  • Anda telah membuat ACK managed cluster atau ACK serverless cluster. Untuk informasi selengkapnya, lihat Create an ACK managed cluster atau Create a cluster.

  • Anda telah mengaktifkan Managed Service for Prometheus. Pastikan Managed Service for Prometheus telah mengumpulkan data historis aplikasi minimal selama tujuh hari, seperti penggunaan CPU dan memori. Untuk informasi selengkapnya tentang cara mengaktifkan Managed Service for Prometheus, lihat Connect to and configure Managed Service for Prometheus.

Langkah 1: Instal AHPA Controller

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

  2. Pada halaman Clusters, temukan kluster yang ingin Anda kelola lalu klik namanya. Di panel navigasi kiri, klik Add-ons.

  3. Pada halaman Component Management, temukan komponen AHPA Controller, klik Install pada kartunya, lalu 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, lalu klik nama instans target. Nama instans sama dengan nama kluster ACK.

  4. Pada halaman Settings, di bagian HTTP API URL (Grafana Read URL), catat nilai untuk item konfigurasi berikut.

    • (Opsional) Jika token diaktifkan, catat token akses tersebut.

    • Catat titik akhir jaringan internal (Internal Network) (Prometheus URL).

  5. Atur titik akhir kueri Prometheus di kluster ACK.

    1. Buat file bernama application-intelligence.yaml dengan konten berikut.

      • prometheusUrl: Titik akhir 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 perlu mengonfigurasi bidang berikut dalam ConfigMap ini:

        Untuk informasi selengkapnya, lihat Enable the Prometheus dashboard for AHPA.

      • Jalankan perintah berikut untuk menerapkan konfigurasi `application-intelligence`.

        kubectl apply -f application-intelligence.yaml

    Langkah 3: Deploy layanan uji coba

    Layanan uji coba mencakup fib-deployment, fib-svc, dan fib-loader, yang mensimulasikan puncak dan lembah permintaan. Resource Horizontal Pod Autoscaler (HPA) juga diterapkan untuk membandingkan hasil penskalaannya 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

    Konfigurasikan kebijakan elastis dengan mengirimkan 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: 0.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

      Berikut penjelasan beberapa parameter:

      Parameter

      Wajib

      Deskripsi

      scaleTargetRef

      Ya

      Menentukan deployment target.

      metrics

      Ya

      Mengonfigurasi metrik penskalaan. Metrik yang didukung mencakup CPU, GPU, Memory, QPS, dan RT.

      target

      Ya

      Ambang batas target. Misalnya, averageUtilization: 40 menunjukkan bahwa target penggunaan CPU adalah 40%.

      scaleStrategy

      Tidak

      Menetapkan mode penskalaan. Nilai default adalah observer.

      • auto: AHPA melakukan operasi penskalaan.

      • observer: AHPA hanya mengamati tetapi tidak melakukan tindakan penskalaan. Anda dapat menggunakan mode ini untuk memeriksa apakah AHPA berfungsi sesuai harapan.

      • proactive: Hanya prediksi proaktif yang berlaku.

      • reactive: Hanya prediksi reaktif yang berlaku.

      maxReplicas

      Ya

      Jumlah maksimum replika untuk skala keluar.

      minReplicas

      Ya

      Jumlah minimum replika untuk skala-masuk.

      stabilizationWindowSeconds

      Tidak

      Waktu pendinginan untuk skala-masuk. Nilai default adalah 300 detik.

      prediction. quantile

      Ya

      Kuantil prediksi. Nilai yang lebih tinggi menunjukkan prediksi yang lebih konservatif, artinya probabilitas lebih tinggi bahwa nilai metrik aktual akan berada di bawah nilai target. Nilainya harus antara 0 hingga 1, dan mendukung dua tempat desimal. Nilai default adalah 0,99. Disarankan menggunakan nilai antara 0,90 hingga 0,99.

      prediction. scaleUpForward

      Ya

      Waktu yang dibutuhkan agar Pod menjadi Ready (waktu cold start).

      instanceBounds

      Tidak

      Batas jumlah instans selama periode penskalaan.

      • startTime: Waktu mulai.

      • endTime: Waktu selesai.

      instanceBounds. bounds. cron

      Tidak

      Mengonfigurasi tugas terjadwal. Ekspresi cron merepresentasikan serangkaian waktu. Ekspresi ini menggunakan lima bidang yang dipisahkan spasi. Misalnya, - cron: "* 0-8 ? * MON-FRI" menunjukkan bahwa tugas dijalankan dari pukul 00.00 hingga 08.59 setiap Senin hingga Jumat.

      Tabel berikut menjelaskan bidang-bidang dalam ekspresi cron. Untuk informasi selengkapnya, lihat Scheduled tasks.

      Nama bidang

      Wajib

      Nilai yang diizinkan

      Karakter khusus yang diizinkan

      Minutes

      Ya

      0 hingga 59

      * / , -

      Hours

      Ya

      0 hingga 23

      * / , -

      Day of Month

      Ya

      1 hingga 31

      * / , – ?

      Month

      Ya

      1 hingga 12 atau JAN hingga DEC

      * / , -

      Day of Week

      Tidak

      0 hingga 6 atau SUN hingga SAT

      * / , – ?

      Catatan
      • Nilai untuk bidang Month dan Day of Week tidak peka huruf besar/kecil. Misalnya, SUN, Sun, dan sun memiliki efek yang sama.

      • Jika bidang Day of Week tidak dikonfigurasi, nilai default-nya adalah *.

      • Karakter khusus:

        • *: Menunjukkan semua nilai yang mungkin.

        • /: Menentukan penambahan untuk nilai numerik.

        • ,: Mencantumkan nilai-nilai yang dienumerasi.

        • -: Menunjukkan rentang.

        • ?: Menunjukkan bahwa tidak ada nilai spesifik yang ditentukan.

    2. Jalankan perintah berikut untuk membuat kebijakan elastis AHPA.

      kubectl apply -f ahpa-demo.yaml

    Langkah 5: Lihat hasil prediksi

    Untuk melihat hasil prediksi elastis AHPA, enable the Prometheus dashboard for AHPA.

    Catatan

    Karena prediksi memerlukan data historis selama tujuh hari, Anda hanya dapat melihat hasil prediksi setelah deployment contoh berjalan minimal selama tujuh hari. Jika Anda memiliki aplikasi online yang sudah ada, Anda dapat langsung menentukannya dalam konfigurasi AHPA.

    Dokumen ini menggunakan mode observer sebagai contoh. Dalam mode ini, hasilnya dibandingkan dengan kebijakan HPA. Perbandingan ini memberikan referensi mengenai resource aktual yang dibutuhkan aplikasi dan membantu Anda memverifikasi apakah hasil prediksi AHPA sesuai ekspektasi.

    image.png

    • Penggunaan CPU aktual dan prediksi: Kurva hijau merepresentasikan penggunaan CPU aktual dengan HPA. Kurva kuning merepresentasikan penggunaan CPU yang diprediksi oleh AHPA.

      • Kurva kuning berada di atas kurva hijau, yang menunjukkan bahwa kapasitas CPU yang diprediksi mencukupi.

      • Kurva kuning mendahului kurva hijau, yang menunjukkan bahwa resource yang dibutuhkan telah disiapkan sebelumnya.

    • Tren Pod: Kurva hijau merepresentasikan jumlah Pod aktual yang diskalakan oleh HPA. Kurva kuning merepresentasikan jumlah Pod yang diprediksi oleh AHPA.

      • Kurva kuning berada di bawah kurva hijau, yang menunjukkan bahwa AHPA memprediksi jumlah Pod yang lebih sedikit.

      • Kurva kuning lebih mulus daripada kurva hijau, yang menunjukkan bahwa penskalaan dengan AHPA menyebabkan fluktuasi lebih sedikit dan meningkatkan stabilitas layanan.

    Tren prediksi sesuai ekspektasi. Setelah periode pengamatan, jika hasilnya memenuhi ekspektasi Anda, Anda dapat mengatur mode penskalaan ke auto agar AHPA mengelola penskalaan.

    Dokumen terkait