全部产品
Search
文档中心

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

更新时间:Jul 02, 2025

Dalam beberapa skenario, Anda mungkin perlu menaikkan atau menurunkan skala aplikasi berdasarkan metrik kustom seperti permintaan per detik (QPS) dari permintaan HTTP atau panjang antrian pesan. Horizontal Pod Autoscaler (AHPA) menyediakan mekanisme External Metrics yang bekerja sama dengan komponen alibaba-cloud-metrics-adapter untuk memungkinkan penskalaan aplikasi berdasarkan metrik kustom.

Prasyarat

Kontroler AHPA telah diinstal.

Langkah 1: Persiapan

  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. Salin konten YAML berikut untuk membuat Penyebaran bernama sample-app, Layanan, dan Penyebaran bernama fib-loader-qps untuk uji stres, lalu klik Create.

    Catatan

    Metrik kustom requests_per_second yang menunjukkan jumlah permintaan per detik terpapar.

    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
  4. 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
  5. Aktifkan ServiceMonitor.

    1. Masuk ke Konsol ARMS.

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

    3. Di bilah navigasi atas, pilih wilayah tempat instance Prometheus diterapkan dan klik nama instance tersebut, yang sesuai dengan nama cluster ACK Anda.

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

    5. Nyalakan sakelar di kolom Operation untuk sample-app.1.jpg

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

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

    1. Masuk ke Konsol ARMS.

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

    3. Di bilah navigasi atas halaman Instances, pilih wilayah tempat instance Prometheus diterapkan dan klik nama instance tersebut. Instance Prometheus dinamai dalam format arms_metrics_{RegionId}_XXX.

    4. 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 kluster Anda dan catat token tersebut.

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

      2.jpg

  2. Pasang 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. Lalu, klik Deploy di pojok kanan atas halaman.

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

    4. 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 terperinci 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: Pasang AHPA

  1. Buat sumber daya AHPA berikut.

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

    • 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 memerlukan presisi lebih tinggi. Misalnya, 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.