All Products
Search
Document Center

Container Service for Kubernetes:Konfigurasikan penskalaan aplikasi dengan metrik kustom dan AHPA

Last Updated:Mar 25, 2026

Dalam banyak skenario, Anda perlu menskalakan aplikasi berdasarkan metrik kustom, seperti jumlah permintaan per detik (QPS) dari permintaan HTTP atau panjang antrian pesan. AHPA (AdvancedHorizontalPodAutoscaler) menyediakan mekanisme metrik eksternal. Ketika dikombinasikan dengan komponen ack-alibaba-cloud-metrics-adapter, AHPA menawarkan solusi penskalaan yang lebih fleksibel untuk aplikasi Anda.

Prasyarat

Kontroler AHPA telah diinstal.

Langkah 1: Siapkan aplikasi contoh

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

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  3. Pada halaman Deployments, klik Create from YAML. Gunakan YAML berikut untuk membuat aplikasi contoh bernama sample-app, Service-nya yang sesuai, serta aplikasi uji stres bernama fib-loader-qps. Lalu, klik Create.

    Catatan

    Kontainer ini mengekspos metrik kustom requests_per_second, yang menunjukkan jumlah permintaan per detik.

    Konten YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sample-app
      labels:
        app: sample-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sample-app
      template:
        metadata:
          labels:
            app: sample-app
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/acs/knative-sample-fib-server:v1
            name: metrics-provider
            ports:
            - name: http
              containerPort: 8080
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sample-app
      namespace: default
      labels:
        app: sample-app
    spec:
      ports:
        - port: 8080
          name: http
          protocol: TCP
          targetPort: 8080
      selector:
        app: sample-app
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: fib-loader-qps
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: fib-loader-qps
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: fib-loader-qps
        spec:
          containers:
          - args:
            - -c
            - |
              /ko-app/fib-loader --service-url="http://sample-app.${NAMESPACE}:8080/" --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
  4. Pada halaman Create, gunakan YAML berikut untuk membuat ServiceMonitor, lalu klik Create.

    Konten YAML

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: sample-app
      namespace: default
    spec:
      endpoints:
      - interval: 30s
        port: http
        path: /metrics
      namespaceSelector:
        any: true
      selector:
        matchLabels:
          app: sample-app
  5. Aktifkan ServiceMonitor.

    1. Masuk ke Konsol ARMS.

    2. Di panel navigasi kiri, klik Integration Management.

    3. Pada tab Integrated Environments, lihat daftar lingkungan di tab Container Service. Temukan instans ACK dan klik Metric Scraping pada kolom Actions.

    4. Temukan sample-app dalam daftar ServiceMonitor, klik Enable pada kolom Actions, lalu klik OK pada kotak dialog yang muncul.

      image

Langkah 2: Sebarkan adapter metrik

  1. Dapatkan titik akhir API HTTP internal dari instans Prometheus.

    1. Masuk ke Konsol ARMS.

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

    3. Di bagian atas halaman Prometheus Instances, pilih wilayah tempat instans Prometheus berada, lalu klik nama instans target. Nama instans mengikuti format arms_metrics_{RegionId}_XXX.

    4. Di bilah navigasi kiri, klik Settings, lalu di bagian HTTP API Address (Grafana Read Address), lihat dan catat alamat Internal network (URL Prometheus).

      • (Opsional) Jika otentikasi berbasis token diaktifkan, catat token akses.

      • Catat titik akhir Internal Network (URL Prometheus).

      2.jpg

  2. Sebarkan ack-alibaba-cloud-metrics-adapter.

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

    2. Klik tab App Catalog, cari dan klik ack-alibaba-cloud-metrics-adapter. Di pojok kanan atas halaman, klik Deploy.

    3. Pada halaman Basic Information, pilih Cluster dan Namespace, lalu klik Next.

    4. Pada wizard Parameter Configuration, pilih Chart Version. Berdasarkan nilai yang Anda peroleh pada langkah di Dapatkan titik akhir API HTTP internal dari instans Prometheus, konfigurasikan prometheus.url dan prometheus.prometheusHeader di area Parameters, lalu klik OK.

        prometheus:
          enabled: true
          # Masukkan alamat jaringan internal API HTTP, yaitu URL Managed Service for Prometheus.
          url: http://cn-beijing-intranet.arms.aliyuncs.com:9090/api/v1/prometheus/6b4b40986a3bec4f92ea418534****/115964845466****/arms-metrics-6fae216078e4****/cn-beijing
          # Jika token otentikasi diaktifkan untuk Managed Service for Prometheus, konfigurasikan prometheusHeader Authorization.
          prometheusHeader:
          - Authorization: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjIwMDc1MTY0MDksImlzcyI6Imh0dHA6******liYWJhY2xvdWQuY29tIiwiaWF0IjoxNjkyMTU2NDA5LCJqdGkiOiI3NmRkOWJkOS0zYzBkLTRjY2MtOTFkYy1lZTU1OGFkNjg3NmMifQ.gltEJ7g4j-QPao2durNk3OiEBYhv2F_nzG-cncVfFtY
  3. Konfigurasikan metrik kustom.

    1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Applications > Helm.

    2. Temukan alibaba-cloud-metrics-adapter dan klik Update pada kolom Actions.

    3. Salin konten YAML berikut dan tempelkan untuk menimpa parameter yang sesuai dalam templat. Perhatikan bahwa parameter requests_per_second harus diubah menjadi metrik Prometheus aktual untuk jumlah permintaan per detik. Lalu, klik Update.

        ......
        prometheus:
          adapter:
            rules:
              custom:
              - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>})
                name:
                  as: requests_per_second
                resources:
                  overrides:
                    namespace:
                      resource: namespace
                seriesQuery: requests_per_second # Tetapkan nama metrik. Pastikan nama metrik di Managed Service for Prometheus sama dengan yang ditentukan di sini.
              default: false
          enabled: true    # Tetapkan parameter ini ke true untuk mengaktifkan Prometheus Adapter.
          ......
    4. Jalankan perintah berikut untuk mengkueri detail metrik yang tersedia dari API External Metrics.

      kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/requests_per_second"
      {"kind":"ExternalMetricValueList","apiVersion":"external.metrics.k8s.io/v1beta1","metadata":{},"items":[{"metricName":"requests_per_second","metricLabels":{},"timestamp":"2023-08-15T07:59:09Z","value":"10"}]}

Langkah 3: Sebarkan AHPA

  1. Buat resource AHPA.

    • Tetapkan external.metric dan tentukan nama metrik serta matchLabels. Nama metrik harus sama dengan yang ditentukan di Konfigurasikan metrik kustom. Dalam contoh ini, metrik kustom diatur ke requests_per_second.

    • Tetapkan ambang batas target. Misalnya, atur AverageValue ke 10. Artinya, aktivitas skala keluar dipicu ketika jumlah permintaan per detik melebihi 10.

    Detail YAML

    apiVersion: autoscaling.alibabacloud.com/v1beta1
    kind: AdvancedHorizontalPodAutoscaler
    metadata:
      name: customer-deployment
      namespace: default
    spec:
      metrics:
      - external:
          metric:
            name: requests_per_second
            selector:
              matchLabels:
                namespace: default
                service: sample-app
          target:
            type: AverageValue
            averageValue: 10
        type: External
      minReplicas: 0
      maxReplicas: 50
      prediction:
        quantile: 95
        scaleUpForward: 180
      scaleStrategy: observer
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: sample-app
      instanceBounds:
      - startTime: "2023-08-01 00:00:00"
        endTime: "2033-08-01 00:00:00"
        bounds:
        - cron: "* 0-8 ? * MON-FRI"
          maxReplicas: 50
          minReplicas: 4
        - cron: "* 9-15 ? * MON-FRI"
          maxReplicas: 50
          minReplicas: 5
        - cron: "* 16-23 ? * MON-FRI"
          maxReplicas: 50
          minReplicas: 1
  2. Jalankan perintah berikut untuk memeriksa hasil AHPA.

    custom-metric % kubectl get ahpa
    NAME                  STRATEGY   REFERENCE                   METRIC                TARGETS     DESIREDPODS   REPLICAS   MINPODS   MAXPODS   AGE
    customer-deployment   observer   Deployment/sample-app       requests_per_second   60000m/10   6             1          1         50        7h53m

    Kubernetes menggunakan satuan seperti m (milli) saat presisi tinggi diperlukan. Misalnya, 1001m sama dengan 1,001. Dalam contoh ini, 60000m sama dengan 60. Output menunjukkan bahwa jumlah permintaan per detik adalah 60, yang melebihi ambang batas target sebesar 10. Jumlah Pod yang diinginkan (DESIREDPODS) yang dihitung adalah 6.