全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan AHPA untuk mengonfigurasi metrik kustom untuk penskalaan aplikasi

更新时间:Jul 02, 2025

Dalam beberapa skenario, Anda mungkin perlu melakukan penskalaan aplikasi berdasarkan metrik kustom seperti QPS permintaan HTTP atau panjang antrian pesan. Autoscaling Horizontal Pod Autoscaler (AHPA) menyediakan mekanisme External Metrics yang bekerja sama dengan komponen alibaba-cloud-metrics-adapter untuk memungkinkan penskalaan aplikasi berdasarkan metrik kustom. Topik ini menjelaskan cara menggunakan AHPA untuk mengonfigurasi metrik kustom.

Prasyarat

Langkah 1: Persiapkan

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

  2. Di halaman Clusters, temukan cluster yang ingin dikelola dan klik namanya. Di panel sebelah kiri, pilih Workloads > Deployments.

  3. Di halaman Deployments, klik Create from YAML di pojok kanan atas.

  4. Di halaman Create, salin konten YAML berikut untuk membuat Deployment bernama sample-app, sebuah Service, dan Deployment bernama fib-loader-qps untuk uji stres, lalu klik Create.

    Catatan

    Metrik kustom requests_per_second yang menunjukkan jumlah permintaan per detik dikumpulkan.

    Klik untuk melihat 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
            env:
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
  5. Di halaman Create, salin konten YAML berikut untuk membuat ServiceMonitor dan klik Create:

    Klik untuk melihat 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
  6. Aktifkan ServiceMonitor.

    1. Masuk ke Konsol Application Real-Time Monitoring Service (ARMS). Di panel navigasi sebelah kiri, pilih Prometheus Service > Prometheus Instances.

    2. Di pojok kiri atas halaman Prometheus Service, pilih wilayah tempat instans Prometheus diterapkan dan klik nama instans tersebut, yang sesuai dengan nama cluster ACK Anda.

    3. Di panel navigasi sebelah kiri, klik Service Discovery. Klik tab Configure di sebelah kanan, lalu klik tab ServiceMonitor.

    4. Nyalakan saklar di kolom Operation untuk sample-app.1.jpg

Langkah 2: Terapkan ack-alibaba-cloud-metrics-adapter

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

    1. Masuk ke Konsol ARMS. Di panel navigasi sebelah kiri, pilih Prometheus Service > Prometheus Instances.

    2. Di pojok kiri atas halaman Managed Service for Prometheus, pilih wilayah tempat instans Prometheus diterapkan dan klik nama instans tersebut. Instans Prometheus dinamai dalam format arms_metrics_{RegionId}_XXX.

    3. Di panel navigasi sebelah kiri, klik Settings. Di bagian HTTP API URL (Grafana Read URL), catat titik akhir di sebelah kanan Internal Network.

      • Opsional. Jika token akses diaktifkan, konfigurasikan token akses untuk cluster Anda dan catat token tersebut.

      • Catat titik akhir API HTTP di sebelah kanan Internal Network.

      2.jpg

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

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

    2. Di tab Katalog Aplikasi, temukan dan klik ack-alibaba-cloud-metrics-adapter.

    3. Di pojok kanan atas halaman ack-alibaba-cloud-metrics-adapter, klik Deploy.

    4. Di halaman wizard Basic Information, tentukan Cluster dan Namespace, lalu klik Next.

    5. Di halaman wizard Parameters, tentukan Chart Version. Konfigurasikan prometheus.url dan prometheus.prometheusHeader di bagian Parameters berdasarkan titik akhir API HTTP internal yang telah dicatat, lalu klik OK.

        prometheus:
          enabled: true
          # Masukkan titik akhir API HTTP internal, 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 akses diaktifkan untuk Managed Service for Prometheus, Anda perlu mengonfigurasi prometheusHeader Authorization.
          prometheusHeader:
          - Authorization: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjIwMDc1MTY0MDksImlzcyI6Imh0dHA6******liYWJhY2xvdWQuY29tIiwiaWF0IjoxNjkyMTU2NDA5LCJqdGkiOiI3NmRkOWJkOS0zYzBkLTRjY2MtOTFkYy1lZTU1OGFkNjg3NmMifQ.gltEJ7g4j-QPao2durNk3OiEBYhv2F_nzG-cncVfFtY
  3. Konfigurasikan metrik kustom.

    1. Di halaman Clusters, temukan cluster yang diinginkan dan klik namanya. Di panel navigasi sebelah kiri, pilih Applications > Helm.

    2. Klik Perbarui di kolom Actions untuk alibaba-cloud-metrics-adapter.

    3. Salin konten YAML berikut untuk menimpa kode di editor. Ganti requests_per_second dalam contoh kode berikut dengan metrik aktual yang digunakan di Managed Service for Prometheus, lalu klik OK.

        ......
        prometheus:
          adapter:
            rules:
              custom:
              - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>})
                name:
                  as: requests_per_second
                resources:
                  overrides:
                    namespace:
                      resource: namespace
                seriesQuery: requests_per_second # Tentukan nama metrik yang digunakan di Managed Service for Prometheus.
              default: false
          enabled: true    # Atur nilai menjadi true untuk mengaktifkan ack-alibaba-cloud-metrics-adapter.
          ......
    4. Jalankan perintah berikut untuk menanyakan informasi rinci tentang metrik:

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

  1. Buat sumber daya AHPA berikut.

    • Konfigurasikan external.metric untuk menentukan nama metrik dan matchLabels. Nama metrik harus sesuai dengan yang ditentukan dalam Konfigurasikan metrik kustom. Dalam contoh ini, metrik requests_per_second ditentukan.

    • Tetapkan ambang batas. Dalam contoh ini, AverageValue diatur ke 10. Aplikasi akan diskalakan ketika jumlah permintaan per detik melebihi 10.

    Klik untuk melihat konten 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 menanyakan hasil penskalaan:

    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

    Satuan m atau k digunakan ketika Kubernetes membutuhkan presisi yang lebih tinggi. Sebagai contoh, 1001m sama dengan 1,001 dan 60000m sama dengan 60 dalam contoh ini. Output menunjukkan bahwa jumlah permintaan per detik adalah 60, yang melebihi ambang batas 10. Jumlah pod yang diharapkan (DESIREDPODS) adalah 6.