全部产品
Search
文档中心

Container Service for Kubernetes:Implementasikan penskalaan horizontal otomatis berdasarkan metrik Prometheus

更新时间:Jul 02, 2025

Secara default, Horizontal Pod Autoscaler (HPA) mendukung penskalaan otomatis berdasarkan metrik CPU dan memori. Namun, metrik ini mungkin tidak cukup untuk skenario operasional yang kompleks. Untuk mengonversi metrik kustom dan eksternal yang dikumpulkan oleh Managed Service for Prometheus menjadi metrik yang didukung HPA, Anda dapat merujuk pada topik ini, yang menjelaskan cara mengambil data pemantauan dan mengimplementasikan konfigurasi penskalaan yang sesuai. Solusi ini menawarkan mekanisme penskalaan fleksibel dan nyaman untuk aplikasi Anda.

Prasyarat

Fitur

Secara default, HPA hanya mendukung penskalaan otomatis berdasarkan penggunaan CPU dan memori, yang mungkin tidak memenuhi persyaratan O&M. Managed Service for Prometheus adalah layanan pemantauan sepenuhnya dikelola yang terhubung dengan ekosistem open-source Prometheus. Managed Service for Prometheus memantau berbagai komponen dan menyediakan beberapa dasbor siap pakai. Untuk mengaktifkan penskalaan pod horizontal otomatis berdasarkan metrik Prometheus, ikuti langkah-langkah berikut:

  1. Gunakan Managed Service for Prometheus di kluster ACK untuk mengekspos metrik.

  2. Gunakan ack-alibaba-cloud-metrics-adapter untuk mengonversi metrik Prometheus menjadi metrik Kubernetes yang didukung HPA. Untuk informasi lebih lanjut, lihat Penskalaan Otomatis pada Metrik yang Tidak Terkait dengan Objek Kubernetes.

  3. Konfigurasikan dan terapkan HPA untuk melakukan penskalaan otomatis berdasarkan metrik sebelumnya.

    Metrik dapat diklasifikasikan ke dalam jenis-jenis berikut berdasarkan skenario:

Berikut ini menjelaskan cara mengonfigurasi alibaba-cloud-metrics-adapter untuk mengonversi metrik Prometheus menjadi metrik yang didukung HPA untuk penskalaan otomatis.

Langkah 1: Kumpulkan metrik Prometheus

Contoh 1: Gunakan metrik yang telah ditentukan sebelumnya

Anda dapat melakukan penskalaan otomatis berdasarkan metrik yang telah ditentukan sebelumnya yang tersedia di Managed Service for Prometheus yang diinstal di kluster ACK Anda. Metrik yang telah ditentukan sebelumnya mencakup metrik cadvisor untuk pemantauan kontainer, metrik Node-Exporter dan GPU-Exporter untuk pemantauan node, serta semua metrik yang disediakan oleh Managed Service for Prometheus. Untuk melihat metrik yang telah ditentukan sebelumnya di Managed Service for Prometheus, ikuti langkah-langkah berikut:

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

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sisi kiri, pilih Operations > Prometheus Monitoring.

  3. Klik Go to ARMS Prometheus di pojok kanan atas.

  4. Di panel navigasi sisi kiri, klik Settings untuk melihat semua metrik yang didukung oleh Managed Service for Prometheus.

Contoh 2: Gunakan metrik Prometheus yang dilaporkan oleh pod

Terapkan aplikasi pengujian dan ekspos metrik aplikasi berdasarkan standar metrik open-source Prometheus. Untuk informasi lebih lanjut, lihat TIPE METRIK. Bagian berikut menjelaskan cara menerapkan aplikasi bernama sample-app dan mengekspos metrik http_requests_total untuk menunjukkan jumlah permintaan yang dikirim ke aplikasi.

  1. Terapkan beban kerja aplikasi.

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

    2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi sisi kiri, pilih Workloads > Deployments.

    3. Di bagian atas halaman Deployments, klik Create from YAML. Di halaman Create, pilih Custom dari daftar drop-down Sample Template, tambahkan konten berikut ke template, dan kemudian klik Create.

      Perluas untuk Melihat Template 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.ack.aliyuncs.com/acs/autoscale-demo:v0.1.2-dfbc5fd-aliyun
              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
  2. Buat ServiceMonitor.

    1. Masuk ke Konsol Application Real-Time Monitoring Service (ARMS).

    2. Di panel navigasi sisi kiri, klik Integration Management. Di bagian atas halaman, pilih wilayah tempat kluster Anda berada.

    3. Di tab Integrated Environments halaman Integration Management, klik tab Container Service. Di kolom Environment Name/ID, klik instance Prometheus yang memiliki nama yang sama dengan kluster.

    4. Di halaman Container Service, klik tab Metric Scraping.

    5. Di panel navigasi sisi kiri tab saat ini, klik Service Monitor. Kemudian, klik Create. Di panel Add ServiceMonitor Configuration, klik YAML, tambahkan konfigurasi berikut untuk ServiceMonitor, dan klik Create.

      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        annotations:
          arms.prometheus.io/discovery: 'true'
        name: sample-app
        namespace: default
      spec:
        endpoints:
        - interval: 30s
          port: http
          path: /metrics
        namespaceSelector:
          any: true
        selector:
          matchLabels:
            app: sample-app
  3. Periksa status pemantauan.

    Di tab Self-Monitoring halaman detail instance, klik tab Targets. Jika default/sample-app/0(1/1 up) ditampilkan, Managed Service for Prometheus sedang memantau aplikasi Anda.

  4. Di dasbor Prometheus, kueri nilai http_requests_total dalam periode waktu tertentu untuk memverifikasi bahwa data pemantauan dikumpulkan tanpa kesalahan.

Langkah 2: Ubah konfigurasi ack-alibaba-cloud-metrics-adapter

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

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi sisi kiri, pilih Applications > Helm.

  3. Di halaman Helm, temukan ack-alibaba-cloud-metrics-adapter dan klik Update di kolom Actions.

  4. Di panel Update Release, tambahkan konten berikut ke editor YAML dan klik OK.

    Konten YAML

      AlibabaCloudMetricsAdapter:
      ......
        prometheus:
          enabled: true    # Setel parameter ini ke true untuk mengaktifkan adapter Prometheus. 
          # Tentukan titik akhir Managed Service for Prometheus. 
          url: https://cn-beijing.arms.aliyuncs.com:9443/api/v1/prometheus/xxxx/xxxx/xxxx/cn-beijing
          # Setelah autentikasi berbasis token diaktifkan untuk Managed Service for Prometheus, tentukan bidang Authorization dari parameter prometheusHeader. 
          prometheusHeader:
          - Authorization: xxxxxxx
          	
          metricsRelistInterval: 1m # Tentukan interval pengumpulan metrik. Kami sarankan Anda menggunakan nilai default 1min. 
        	logLevel: 5								# Tentukan tingkat log debug komponen. Kami sarankan Anda menggunakan nilai default. 
        
          adapter:
            rules:
              default: false  			# Tentukan apakah akan menggunakan pengaturan pengumpulan metrik default. Kami sarankan Anda menggunakan nilai default false. 
              custom:
              
              # Contoh 1: konfigurasi metrik kustom
              # konfigurasi ini akan mengonversi metrik Prometheus: container_memory_working_set_bytes menjadi metrik kustom container_memory_working_set_bytes_per_second
              # dan metrik cpu container_cpu_usage_seconds_total menjadi container_cpu_usage_core_per_second
              # Anda dapat menjalankan perintah untuk memeriksa nilai memori/cpu:
              # kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_memory_working_set_bytes_per_second"
              # kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_cpu_usage_core_per_second"
              # referensi dokumen: https://www.alibabacloud.com/help/document_detail/184519.html
      
              - seriesQuery: 'container_memory_working_set_bytes{namespace!="",pod!=""}'
                resources:
                  overrides:
                    namespace: { resource: "namespace" }
                    pod: { resource: "pod" }
                name:
                  matches: "^(.*)_bytes"
                  as: "${1}_bytes_per_second"
                metricsQuery: 'sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)' # Label selector yang ditentukan oleh parameter metricsQuery tidak memilih sumber daya berdasarkan label yang ditentukan oleh parameter seriesQuery. 
              - seriesQuery: 'container_cpu_usage_seconds_total{namespace!="",pod!=""}'
                resources:
                  overrides:
                    namespace: { resource: "namespace" }
                    pod: { resource: "pod" }
                name:
                  matches: "^(.*)_seconds_total"
                  as: "${1}_core_per_second"
                metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)'  # Label selector yang ditentukan oleh parameter metricsQuery tidak memilih sumber daya berdasarkan label yang ditentukan oleh parameter seriesQuery. 
      
              # Contoh 2: konfigurasi metrik eksternal
              
              # referensi dokumen: https://www.alibabacloud.com/help/document_detail/608768.html
      
              # Tambahkan aturan konversi. Pastikan label metrik sama dengan label metrik di Prometheus. Jika label berbeda, tentukan label metrik di Prometheus. 
              
              #- seriesQuery: http_requests_total{namespace!="",pod!=""}
              #  resources:
              #    overrides:
              #      # Bidang resource menentukan sumber daya API Kubernetes. Anda dapat menjalankan perintah kubectl api-resources -o wide untuk menanyakan sumber daya. 
              # Bidang key menentukan LabelName metrik Prometheus. Pastikan metrik Prometheus menggunakan LabelName yang ditentukan. 
              #      namespace: {resource: "namespace"}
              #      pod: {resource: "pod"}
              #  name:
              #    matches: ^(.*)_total
              #   as: ${1}_per_second
              #  metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)
      
      
              # ini adalah contoh konfigurasi metrik eksternal.
              
              # referensi dokumen: https://www.alibabacloud.com/help/document_detail/608768.html
      
              #- seriesQuery: arms_app_requests_count
              #  metricsQuery: sum by (rpc) (sum_over_time(<<.Series>>{rpc="/demo/queryUser/{id}",service="arms-demo:arms-k8s-demo",prpc="__all__",ppid="__all__",endpoint="__all__",destId="__all__",<<.LabelMatchers>>}[1m]))
              #  name:
              #    as: ${1}_per_second_queryuser
              #    matches: ^(.*)_count
              #  resources:
              #    namespaced: false
      
      
              # ini adalah contoh metrik kustom dari metrik Prometheus yang ditentukan pengguna: http_requests_total
              # referensi dokumen: https://www.alibabacloud.com/help/document_detail/184519.html
      
              #- seriesQuery: 'http_requests_total{namespace!="",pod!=""}'
              #  resources:
              #    overrides:
              #      namespace: {resource: "namespace"}
              #      pod: {resource: "pod"}
              #  name:
              #    matches: "^(.*)_total"
              #    as: "${1}_per_second"
              #  metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)'
              # - seriesQuery: '{__name__=~"^some_metric_count$"}'
              #   resources:
              #     template: <<.Resource>>
              #   name:
              #     matches: ""
              #     as: "my_custom_metric"
              #   metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)
      
        ......

    Tabel berikut menjelaskan beberapa bidang. Untuk informasi lebih lanjut tentang file konfigurasi ack-alibaba-cloud-adapter, lihat bagian File Konfigurasi ack-alibaba-cloud-metrics-adapter dari topik ini.

    Bidang

    Deskripsi

    AlibabaCloudMetricsAdapter.prometheus.adapter.rules.custom

    Konfigurasi alibaba-cloud-metrics-adapter yang digunakan untuk mengonversi metrik Prometheus. Setel bidang ini ke nilai dalam konten YAML sebelumnya.

    alibabaCloudMetricsAdapter.prometheus.url

    Titik akhir Managed Service for Prometheus. Untuk informasi lebih lanjut tentang cara mendapatkan titik akhir, lihat bagian Dapatkan Titik Akhir API Managed Service for Prometheus dari topik ini.

    AlibabaCloudMetricsAdapter.prometheus.prometheusHeader[].Authorization

    Token. Untuk informasi lebih lanjut tentang cara mendapatkan token, lihat bagian Dapatkan Titik Akhir API Managed Service for Prometheus dari topik ini.

    AlibabaCloudMetricsAdapter.prometheus.adapter.rules.default

    Tentukan apakah akan membuat metrik yang telah ditentukan sebelumnya. Secara default, metrik yang telah ditentukan sebelumnya dibuat. Kami sarankan menggunakan nilai default false.

Konfigurasikan ack-alibaba-cloud-metrics-adapter. Setelah ack-alibaba-cloud-metrics-adapter diterapkan, jalankan perintah berikut untuk memeriksa apakah API agregasi Kubernetes telah mengumpulkan data.

  1. Skalakan pod berdasarkan metrik kustom.

    1. Jalankan perintah berikut untuk menanyakan detail metrik kustom yang didukung HPA:

      kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/" | jq .
    2. Jalankan perintah berikut untuk menanyakan nilai saat ini dari metrik http_requests_per_second di namespace default:

      # Kueri metrik container_memory_working_set_bytes_per_second untuk melihat ukuran memori kerja pod di namespace kube-system per detik. 
      kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_memory_working_set_bytes_per_second"
      
      # Kueri metrik container_cpu_usage_core_per_second untuk melihat jumlah vCore pod di namespace kube-system per detik. 
      kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_cpu_usage_core_per_second"

      Output Sampel:

      {
        "kind": "MetricValueList",
        "apiVersion": "custom.metrics.k8s.io/v1beta1",
        "metadata": {
          "selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/%2A/container_memory_working_set_bytes_per_second"
        },
        "items":[
        {
          "describedObject": {
            "kind": "Pod",
            "namespace": "kube-system",
            "name": "ack-alibaba-cloud-metrics-adapter-7cf8dcb845-h****",
            "apiVersion": "/v1"
          },
          "metricName": "container_memory_working_set_bytes_per_second",
          "timestamp": "2023-08-09T06:30:19Z",
          "value": "24576k",
          "selector": null
        }
      ]
      
  2. Skalakan pod berdasarkan metrik eksternal.

    1. Jalankan perintah berikut untuk menanyakan detail metrik eksternal yang didukung HPA:

      kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/" | jq .
    2. Jalankan perintah berikut untuk menanyakan nilai saat ini dari metrik http_requests_per_second di namespace default:

      kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/http_requests_per_second"

      Output Sampel:

      {
        "kind": "ExternalMetricValueList",
        "apiVersion": "external.metrics.k8s.io/v1beta1",
        "metadata": {},
        "items": [
          {
            "metricName": "http_requests_per_second",
            "metricLabels": {},
            "timestamp": "2022-01-28T08:40:20Z",
            "value": "33m"
          }
        ]
      }
      

Langkah 3: Konfigurasikan dan terapkan HPA untuk melakukan penskalaan otomatis berdasarkan metrik yang dikumpulkan

Terapkan HPA

Anda dapat menggunakan metrik Prometheus untuk mengekspos metrik kustom dan metrik eksternal secara bersamaan. Tabel berikut menjelaskan dua jenis metrik tersebut.

Tipe Metrik

Deskripsi

Metrik Kustom

Menskalakan objek Kubernetes, seperti pod, berdasarkan metrik yang terkait dengan objek tersebut. Misalnya, Anda dapat menskalakan pod berdasarkan metrik pod. Untuk informasi lebih lanjut, lihat Penskalaan otomatis pada beberapa metrik dan metrik kustom.

Metrik Eksternal

Menskalakan objek Kubernetes, seperti pod, berdasarkan metrik yang tidak terkait dengan objek tersebut. Misalnya, Anda dapat menskalakan pod beban kerja berdasarkan QPS bisnis. Untuk informasi lebih lanjut, lihat Penskalaan otomatis pada metrik yang tidak terkait dengan objek Kubernetes .

Skalakan pod berdasarkan metrik kustom

  1. Buat file bernama hpa.yaml dan tambahkan konten berikut ke file tersebut:

    kind: HorizontalPodAutoscaler
    apiVersion: autoscaling/v2
    metadata:
      name: sample-app-memory-high
    spec:
    # Jelaskan objek yang ingin Anda skalakan dengan HPA. HPA dapat secara dinamis mengubah jumlah pod yang diterapkan untuk objek tersebut. 
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: sample-app
    # Tentukan jumlah maksimum dan minimum pod. 
      minReplicas: 1
      maxReplicas: 10
    # Tentukan metrik berdasarkan mana HPA melakukan penskalaan otomatis. Anda dapat menentukan berbagai jenis metrik secara bersamaan. 
      metrics:
      - type: Pods
        pods:
          # Gunakan metrik pods/container_memory_working_set_bytes_per_second. 
          metric: 
            name: container_memory_working_set_bytes_per_second
     # Tentukan ambang batas tipe AverageValue. Anda hanya dapat menentukan ambang batas tipe AverageValue untuk metrik Pods. 
          target:
            type: AverageValue
            averageValue: 1024000m       # 1024000m menunjukkan ambang batas memori sebesar 1 KB. Unit: byte per detik. m adalah unit presisi yang digunakan oleh Kubernetes. Jika nilai tersebut memiliki tempat desimal dan ACK memerlukan presisi tinggi, unit m atau k digunakan. Misalnya, 1001m sama dengan 1.001 dan 1k sama dengan 1000.
  2. Jalankan perintah berikut untuk membuat HPA:

    kubectl apply -f hpa.yaml
  3. Jalankan perintah berikut untuk memeriksa apakah HPA berjalan sesuai harapan:

    kubectl get hpa sample-app-memory-high

    Output yang Diharapkan:

    NAME                     REFERENCE               TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
    sample-app-memory-high   Deployment/sample-app   24576k/1024000m   3         10        1          7m

Skalakan pod berdasarkan metrik eksternal

  1. Buat file bernama hpa.yaml dan tambahkan konten berikut ke file tersebut:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: sample-app
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: sample-app
      minReplicas: 1
      maxReplicas: 10
      metrics:
        - type: External
          external:
            metric:
              name: http_requests_per_second
              selector:
                matchLabels:
                  job: "sample-app"
    # Anda hanya dapat menentukan ambang batas tipe Value atau AverageValue untuk metrik eksternal. 
            target:
              type: AverageValue
              averageValue: 500m
  2. Jalankan perintah berikut untuk membuat HPA:

    kubectl apply -f hpa.yaml
  3. Setelah Layanan LoadBalancer dibuat, jalankan perintah berikut untuk melakukan uji stres:

    ab -c 50 -n 2000 LoadBalancer(sample-app):8080/
  4. Jalankan perintah berikut untuk menanyakan detail HPA:

    kubectl get hpa sample-app

    Output yang Diharapkan:

    NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    sample-app   Deployment/sample-app   33m/500m   1         10        1          7m

File konfigurasi ack-alibaba-cloud-metrics-adapter

ack-alibaba-cloud-metrics-adapter melakukan langkah-langkah berikut untuk mengonversi metrik Prometheus menjadi metrik yang didukung HPA:

  1. Penemuan: Menemukan metrik Prometheus yang dapat digunakan oleh HPA.

  2. Asosiasi: Mengasosiasikan metrik dengan sumber daya Kubernetes, seperti pod, node, dan namespace.

  3. Penamaan: Mendefinisikan nama metrik yang dapat digunakan oleh HPA setelah konversi.

  4. Pencarian: Mendefinisikan cara mencari data metrik dari API Managed Service for Prometheus.

Dalam contoh sebelumnya, metrik http_requests_total yang diekspos oleh pod sample-app dikonversi menjadi metrik http_requests_per_second untuk HPA. Blok kode berikut menunjukkan konfigurasi ack-alibaba-cloud-metrics-adapter:

- seriesQuery: http_requests_total{namespace!="",pod!=""}
  resources:
    overrides:
      namespace: {resource: "namespace"}
      pod: {resource: "pod"}
  name:
    matches: ^(.*)_total
    as: ${1}_per_second
  metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)

Parameter

Deskripsi

seriesQuery

Data kueri Prometheus Query Language (PromQL).

metricsQuery

Menggabungkan data kueri PromQL dalam seriesQuery.

Catatan

label selector yang ditentukan oleh parameter metricsQuery tidak memilih sumber daya berdasarkan label yang ditentukan oleh parameter seriesQuery.

resources

Label dalam data kueri PromQL, yang cocok dengan objek resource. Objek resource adalah sumber daya API di kluster, seperti pod, namespace, dan node. Anda dapat menjalankan perintah kubectl api-resources -o wide untuk menanyakan sumber daya API. Bidang key menentukan LabelName metrik Prometheus. Pastikan metrik Prometheus menggunakan LabelName yang ditentukan.

name

Mengonversi nama metrik Prometheus menjadi nama metrik yang mudah dibaca dengan menggunakan ekspresi reguler. Dalam contoh ini, http_request_total dikonversi menjadi http_request_per_second. Saat melakukan konversi metrik dengan metrik eksternal, jika nama metrik asli mengandung huruf besar, pastikan nama metrik baru dikonversi menjadi huruf kecil selama transformasi.

  1. Penemuan

    Tentukan metrik Prometheus yang ingin Anda konversi. Anda dapat menentukan parameter seriesFilters untuk menyaring metrik. Parameter seriesQuery mencocokkan data berdasarkan label yang ditentukan. Blok kode berikut menunjukkan contohnya:

    seriesQuery: http_requests_total{namespace!="",pod!=""}
    seriesFilters:
        - isNot: "^container_.*_seconds_total"

    seriesFilters: Opsional. Bidang ini menyaring metrik:

    • is:<regex>: Mencocokkan metrik yang namanya mengandung ekspresi reguler ini.

    • isNot:<regex>: Mencocokkan metrik yang namanya tidak mengandung ekspresi reguler ini.

  2. Asosiasi

    Petakan label metrik Prometheus ke sumber daya Kubernetes. Label metrik http_requests_total adalah namespace!="" dan pod!="".

    - seriesQuery: http_requests_total{namespace!="",pod!=""}
      resources:
        overrides:
          namespace: {resource: "namespace"}
          pod: {resource: "pod"}
  3. Penamaan

    Nama metrik HPA yang dikonversi dari metrik Prometheus. Nama metrik Prometheus tetap tidak berubah. Anda tidak perlu mengonfigurasi pengaturan penamaan jika Anda langsung menggunakan metrik Prometheus.

    Anda dapat menjalankan perintah kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" untuk menanyakan metrik yang didukung HPA.

    - seriesQuery: http_requests_total{namespace!="",pod!=""}
      resources:
        overrides:
          namespace: {resource: "namespace"}
          pod: {resource: "pod"}
      name:
        matches: "^(.*)_total"
        as: "${1}_per_second"
  4. Pencarian

    Template permintaan yang dikirim ke API Managed Service for Prometheus. ack-alibaba-cloud-adapter melewatkan parameter dalam HPA ke template permintaan, mengirim permintaan ke API Managed Service for Prometheus berdasarkan template, dan kemudian mengirimkan nilai parameter yang dikembalikan ke HPA untuk penskalaan otomatis.

    - seriesQuery: http_requests_total{namespace!="",pod!=""}
      resources:
        overrides:
          namespace: {resource: "namespace"}
          pod: {resource: "pod"}
      name:
        matches: ^(.*)_total
        as: ${1}_per_second
      metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)

Dapatkan titik akhir API Managed Service for Prometheus

Skenario 1: Managed Service for Prometheus

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

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sisi kiri, pilih Operations > Prometheus Monitoring.

  3. Klik Go to ARMS Prometheus di pojok kanan atas.

  4. Di panel navigasi sisi kiri, klik Settings. Kemudian, klik tab Configure dan lihat HTTP API URL (Grafana Read URL).

    Kami sarankan Anda memanggil API Managed Service for Prometheus melalui jaringan internal. Anda dapat memanggil API melalui Internet jika tidak ada jaringan internal yang tersedia.

    3.png

Skenario 2: Prometheus Open-source

Untuk solusi Prometheus open-source yang dikelola sendiri, Anda harus mengekspos API standar Prometheus menggunakan Service. Kemudian, konfigurasikan parameter relatif dari URL sumber data Prometheus di komponen metrics-adapter untuk menyelesaikan konfigurasi sumber data HPA berdasarkan data dari Prometheus open-source.

Contoh berikut menggunakan aplikasi komunitas Helm Chart ack-prometheus-operator dari halaman Marketplace di konsol ACK. Untuk informasi lebih lanjut, lihat Gunakan Prometheus Open Source untuk Memantau Kluster ACK.

  1. Terapkan Managed Service for Prometheus dan ekspos API standar Prometheus.

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

    2. Di halaman App Catalog, temukan dan klik ack-prometheus-operator. Di halaman yang muncul, klik Deploy.

    3. Di panel yang muncul, konfigurasikan parameter Cluster dan Namespace, modifikasi parameter Release Name berdasarkan kebutuhan bisnis Anda, dan klik Next. Modifikasi bagian Parameters berdasarkan kebutuhan bisnis Anda dan klik OK.

    4. Lihat hasil penerapan.

      1. Ekspos API standar Prometheus menggunakan Service. Sebagai contoh, gunakan Service ack-prometheus-operator-prometheus dari ack-prometheus-operator.

      2. Masukkan ServiceIP:9090 di bilah alamat browser dan aktifkan akses Internet untuk Service untuk mengakses instance Server Load Balancer (SLB) agar dapat mengunjungi konsol Prometheus.

        Masukkan di bilah alamat browser dan aktifkan akses melalui Internet untuk Service untuk mengakses instance Server Load Balancer (SLB) untuk mengunjungi konsol Prometheus.

      3. Di bilah navigasi atas, pilih Status> > Targets untuk melihat semua tugas pengumpulan.image.png

        Tugas dalam status UP berjalan sesuai harapan.

        image.png

    5. Periksa service dan namespace pada kolom Labels.

      Blok kode berikut menunjukkan titik akhir. Dalam contoh ini, ServiceName adalah ack-prometheus-operator-prometheus dan ServiceNamespace adalah monitoring.

      http://ack-prometheus-operator-prometheus.monitoring.svc.cluster.local:9090
  2. Dalam konfigurasi komponen, atur parameter URL sumber data Prometheus untuk memastikan komunikasi yang tepat antara komponen dan Prometheus.

    Jika Anda memilih untuk mengakses API Prometheus melalui Internet, lihat contoh berikut untuk konfigurasi.

      AlibabaCloudMetricsAdapter:
      ......
        prometheus:
          enabled: true
          url: http://your_domain.com:9090   # Ganti your_domain.com dengan alamat IP publik Anda.

    Gunakan ack-prometheus-operator sebagai contoh, nilai url adalah: http://ack-prometheus-operator-prometheus.monitoring.svc.cluster.local:9090.

Referensi