全部产品
Search
文档中心

Container Service for Kubernetes:Deploy AHPA

更新时间:Jul 02, 2025

Container Service for Kubernetes mendukung Advanced Horizontal Pod Autoscaler (AHPA). AHPA memprediksi permintaan sumber daya masa depan dengan menganalisis data historis, menyesuaikan jumlah replika pod secara dinamis. Ini memastikan sumber daya diperluas dan di-prafetch sebelum puncak permintaan yang diprediksi, meningkatkan kecepatan respons dan stabilitas sistem. Sebaliknya, AHPA mengurangi sumber daya sebelum palung permintaan yang diprediksi untuk menghemat biaya.

Prasyarat

  • Sebuah ACK managed cluster atau ACK Serverless cluster telah dibuat. Untuk informasi lebih lanjut, lihat Buat ACK managed cluster atau Buat ACK Serverless cluster.

  • Managed Service for Prometheus (Prometheus) diaktifkan, dan statistik aplikasi dalam tujuh hari terakhir dikumpulkan oleh Prometheus. Statistik tersebut mencakup detail penggunaan CPU dan memori aplikasi. Untuk informasi lebih lanjut tentang cara mengaktifkan Prometheus, lihat Gunakan Managed Service for Prometheus.

Langkah 1: Instal controller AHPA

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

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

  3. Pada halaman Add-ons, temukan kartu AHPA Controller. Klik Install pada kartu AHPA Controller dan ikuti petunjuk di layar untuk menginstal komponen tersebut.

Langkah 2: Tambahkan Prometheus sebagai sumber data

  1. Masuk ke Konsol ARMS.

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

  3. Di pojok kiri atas halaman Instances, pilih wilayah tempat instance Prometheus Anda diterapkan. Temukan instance Prometheus yang ingin Anda kelola dan klik namanya. Nama instance Prometheus sama dengan nama cluster ACK.

  4. Pada halaman Settings, temukan bagian HTTP API URL (Grafana Read URL), dan catat informasi berikut:

    • Opsional. Jika token akses diaktifkan, konfigurasikan token akses untuk kluster Anda.

    • Catat internal titik akhir.

  5. Tentukan titik akhir instance Prometheus dalam konfigurasi kluster ACK.

    1. Buat file bernama application-intelligence.yaml. Salin dan tempel konten berikut ke file tersebut.

      • prometheusUrl: Titik akhir instance Prometheus.

      • token: Token akses instance 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

      Jika Anda ingin melihat metrik Layanan Prometheus yang ditampilkan pada dasbor AHPA, atur parameter berikut dalam ConfigMap:

      • prometheus_writer_url: Tentukan titik akhir remote write internal dari instance Prometheus.

      • prometheus_writer_ak: Tentukan ID AccessKey akun Alibaba Cloud.

      • prometheus_writer_sk: Tentukan Rahasia AccessKey akun Alibaba Cloud.

      Untuk informasi lebih lanjut, lihat Aktifkan Managed Service for Prometheus untuk AHPA.

    2. Jalankan perintah berikut untuk menerapkan application-intelligence:

      kubectl apply -f application-intelligence.yaml

Langkah 3: Terapkan layanan uji

Terapkan layanan uji yang terdiri dari Deployment bernama fib-deployment dan Service bernama fib-svc. Terapkan aplikasi bernama fib-loader yang digunakan untuk mengirim permintaan ke layanan uji untuk mensimulasikan fluktuasi lalu lintas. Kemudian, terapkan Horizontal Pod Autoscaler (HPA) untuk menskalakan layanan uji. Dengan cara ini, Anda dapat membandingkan hasil penskalaan HPA dan hasil prediksi AHPA.

Buat file bernama demo.yaml. Salin dan tempel konten berikut ke file tersebut:

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: Terapkan AHPA

Untuk menerapkan AHPA dan mengonfigurasi kebijakan AHPA, lakukan langkah-langkah berikut:

  1. Buat file bernama ahpa-demo.yaml. Salin dan tempel konten berikut ke file tersebut:

    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.

    Parameter

    Diperlukan

    Deskripsi

    scaleTargetRef

    Ya

    Deployment yang ingin Anda konfigurasikan untuk penskalaan prediktif.

    metrics

    Ya

    Metrik berdasarkan mana kebijakan AHPA dilaksanakan. Metrik berikut didukung: CPU, GPU, memori, permintaan per detik (QPS), dan waktu respons (RT).

    target

    Ya

    Ambang batas penskalaan. Misalnya, jika Anda menentukan averageUtilization: 40, ambang batas utilisasi CPU untuk memulai penskalaan adalah 40%.

    scaleStrategy

    Tidak

    Mode penskalaan AHPA. Nilai default: observer. Nilai valid:

    • auto: AHPA secara otomatis melakukan operasi penskalaan.

    • observer: AHPA mengamati penggunaan sumber daya tetapi tidak melakukan operasi penskalaan. Anda dapat menggunakan mode observer untuk memeriksa apakah AHPA bekerja sesuai harapan.

    • scalingUpOnly: AHPA hanya melakukan operasi skala-out tetapi tidak melakukan operasi skala-in.

    • proactive: Hanya prediksi aktif yang berlaku.

    • reactive: Hanya prediksi pasif yang berlaku.

    maxReplicas

    Ya

    Jumlah maksimum replika pod yang diizinkan.

    minReplicas

    Ya

    Jumlah minimum replika pod yang harus dijamin.

    stabilizationWindowSeconds

    Tidak

    Waktu cooldown aktivitas skala-in. Nilai default: 300. Unit: detik.

    prediction. quantile

    Ya

    Kuantil di mana nilai metrik aktual diharapkan berada di bawah ambang batas penskalaan. Nilai yang lebih besar menunjukkan prediksi yang lebih konservatif, yang menunjukkan probabilitas yang lebih tinggi bahwa sistem akan menskalakan sumber daya masuk atau keluar untuk memastikan stabilitas bisnis. Nilai valid: 0 hingga 1. Nilai default: 0.99. Nilai akurat hingga dua tempat desimal. Kami merekomendasikan Anda mengatur parameter ini ke nilai antara 0.90 hingga 0.99.

    prediction. scaleUpForward

    Ya

    Durasi cold start, yaitu periode waktu dari saat pod dibuat hingga pod berada dalam keadaan Ready.

    instanceBounds

    Tidak

    Durasi operasi penskalaan. Jumlah replika pod dibatasi oleh jumlah maksimum dan minimum replika pod yang ditentukan oleh AHPA.

    • startTime: waktu mulai operasi penskalaan.

    • endTime: waktu akhir operasi penskalaan.

    instanceBounds. bounds. cron

    Tidak

    Parameter ini digunakan untuk membuat pekerjaan penskalaan terjadwal. Ekspresi CRON - cron: "* 0-8 ? * MON-FRI" menentukan bahwa pekerjaan penskalaan berjalan dari 00:00:00 hingga 08:00:00 pada hari Senin hingga Jumat setiap bulan.

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

    Bidang

    Diperlukan

    Nilai valid

    Karakter spesial valid

    Menit

    Ya

    0 hingga 59

    * / , -

    Jam

    Ya

    0 hingga 23

    * / , -

    Hari dalam Bulan

    Ya

    1 hingga 31

    * / , – ?

    Bulan

    Ya

    1 hingga 12 atau JAN hingga DEC

    * / , -

    Hari dalam Minggu

    Tidak

    0 hingga 6 atau SUN hingga SAT

    * / , – ?

    Catatan
    • Bidang Bulan dan Hari dalam Minggu tidak bersifat case-sensitive. Misalnya, Anda dapat menentukan SUN, Sun, atau sun.

    • Jika Anda tidak menentukan bidang Hari dalam Minggu, nilai default * digunakan.

    • Daftar berikut menjelaskan karakter spesial:

      • *: menentukan nilai arbitrer.

      • /: menentukan penambahan.

      • ,: memisahkan daftar nilai.

      • -: menentukan rentang.

      • ?: menentukan placeholder.

  2. Jalankan perintah berikut untuk menerapkan kebijakan AHPA:

    kubectl apply -f fib-deployment.yaml

Langkah 5: Lihat hasil prediksi

Periksa apakah AHPA bekerja sesuai harapan. Anda dapat melihat hasilnya menggunakan Prometheus. Untuk informasi lebih lanjut, lihat Aktifkan Managed Service for Prometheus untuk AHPA.

Catatan

Hasil prediksi AHPA dihasilkan berdasarkan data historis dalam tujuh hari terakhir. Oleh karena itu, Anda harus menunggu tujuh hari setelah menerapkan kebijakan AHPA. Untuk menerapkan kebijakan AHPA ke aplikasi yang ada, tentukan aplikasi tersebut dalam konfigurasi kebijakan AHPA.

Dalam contoh ini, kebijakan AHPA menggunakan mode penskalaan observer. Gambar berikut menunjukkan hasil prediksi AHPA yang dibandingkan dengan hasil penskalaan HPA. Hasil penskalaan HPA menunjukkan konsumsi sumber daya aktual selama runtime aplikasi. Anda dapat menggunakan perbandingan ini untuk memeriksa apakah hasil prediksi AHPA sesuai harapan.

image.png

  • Penggunaan CPU Aktual dan Prediksi: Penggunaan CPU aktual berdasarkan HPA diwakili oleh garis hijau. Penggunaan CPU yang diprediksi oleh AHPA diwakili oleh garis kuning.

    • Gambar di atas menunjukkan bahwa penggunaan CPU yang diprediksi lebih tinggi daripada penggunaan CPU aktual. Ini menunjukkan bahwa kapasitas CPU yang diprediksi cukup.

    • Gambar di atas menunjukkan bahwa penggunaan CPU yang diprediksi mencapai nilai tertentu lebih awal daripada penggunaan CPU aktual. Ini menunjukkan bahwa sumber daya yang diperlukan telah disiapkan sebelumnya.

  • Tren Pod: Jumlah pod aktual yang disediakan oleh HPA diwakili oleh garis hijau. Jumlah pod yang diprediksi oleh AHPA diwakili oleh garis kuning.

    • Gambar di atas menunjukkan bahwa nilai yang diwakili oleh garis kuning lebih kecil daripada nilai yang diwakili oleh garis hijau. Ini menunjukkan bahwa jumlah pod yang diprediksi lebih kecil daripada jumlah pod aktual.

    • Gambar di atas menunjukkan bahwa kurva kuning lebih halus daripada kurva hijau. Ini menunjukkan bahwa perubahan jumlah pod lebih stabil dengan menggunakan layanan penskalaan AHPA, yang meningkatkan stabilitas bisnis.

Hasil menunjukkan bahwa AHPA dapat menggunakan penskalaan prediktif untuk menangani beban kerja fluktuatif sesuai harapan. Setelah Anda mengonfirmasi hasil prediksi, Anda dapat mengatur mode penskalaan ke auto, yang memungkinkan AHPA secara otomatis menskalakan pod.

Referensi