All Products
Search
Document Center

Container Service for Kubernetes:Penyesuaian Otomatis Pod Horizontal dengan Alibaba Cloud Prometheus

Last Updated:Jun 22, 2026

Penyesuaian otomatis berdasarkan CPU dan memori saja mungkin tidak mencukupi untuk skenario yang kompleks. Topik ini menjelaskan cara mengambil data pemantauan dari Prometheus dan mengonfigurasi penyesuaian otomatis menggunakan metrik kustom maupun eksternal untuk HPA, sehingga menyediakan mekanisme penskalaan yang lebih fleksibel bagi aplikasi Anda.

Prasyarat

Cara kerja

Secara default, HPA hanya mendukung penyesuaian otomatis berdasarkan CPU dan memori, yang mungkin tidak mencukupi untuk banyak kebutuhan operasional. Layanan Terkelola untuk Prometheus Alibaba Cloud sepenuhnya kompatibel dengan ekosistem Prometheus open source. Layanan ini mendukung pemantauan berbagai komponen, menyediakan berbagai dasbor siap pakai, serta menawarkan layanan Prometheus yang sepenuhnya terkelola. Prosesnya melibatkan tiga langkah utama:

  1. Ekspos metrik pemantauan di kluster ACK menggunakan Layanan Terkelola untuk Prometheus Alibaba Cloud.

  2. Komponen ack-alibaba-cloud-metrics-adapter bertanggung jawab mengonversi metrik pemantauan Prometheus menjadi metrik agregat Kubernetes yang dapat digunakan oleh HPA. Untuk informasi selengkapnya, lihat Penyesuaian otomatis berdasarkan beberapa metrik dan metrik kustom.

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

    Metrik dikategorikan menjadi dua jenis:

    • Metrik Kustom: Melakukan penskalaan berdasarkan metrik yang terkait dengan objek Kubernetes target, seperti Pod. Contohnya adalah metrik yang spesifik untuk Pod itu sendiri. Untuk informasi selengkapnya, lihat autoscaling-on-multiple-metrics-and-custom-metrics.

    • Metrik Eksternal: Melakukan penskalaan berdasarkan metrik yang tidak terkait dengan objek Kubernetes target, seperti Pod. Misalnya, Anda dapat menskalakan Pod dari suatu workload berdasarkan metrik QPS bisnis secara keseluruhan. Untuk informasi selengkapnya, lihat autoscaling-on-metrics-not-related-to-kubernetes-objects.

Topik ini menjelaskan cara mengonfigurasi ack-alibaba-cloud-metrics-adapter untuk mengonversi metrik dari Layanan Terkelola untuk Prometheus Alibaba Cloud menjadi metrik yang kompatibel dengan HPA dan menerapkan penyesuaian otomatis berdasarkan metrik tersebut.

Langkah 1: Mendapatkan data pemantauan Prometheus

Contoh 1: Gunakan metrik ACK default

Anda dapat menggunakan metrik default dari Layanan Terkelola untuk Prometheus Alibaba Cloud, yang diinstal secara default di ACK, untuk penyesuaian otomatis pod horizontal. Metrik yang didukung mencakup metrik kontainer cAdvisor, metrik pemantauan node dasar Node-Exporter, metrik GPU-Exporter, dan metrik lainnya yang telah Anda integrasikan dengan Layanan Terkelola untuk Prometheus Alibaba Cloud. Untuk melihat metrik yang telah diintegrasikan:

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

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Operations > Prometheus Monitoring.

  3. Di pojok kanan atas, klik Go to ARMS Prometheus.

  4. Di panel navigasi sisi kiri konsol Application Real-Time Monitoring Service (ARMS), klik Settings untuk melihat semua metrik yang telah diintegrasikan dengan Layanan Terkelola untuk Prometheus Alibaba Cloud.

Contoh 2: Gunakan metrik yang dilaporkan oleh pod

Contoh ini menerapkan aplikasi sampel yang mengekspos metrik dalam format standar Prometheus, seperti metrik http_requests_total, yang menunjukkan jumlah kunjungan. Untuk informasi selengkapnya, lihat metric_type.

  1. Terapkan workload aplikasi.

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

    2. Di halaman Clusters, klik nama kluster target. Di panel navigasi sisi kiri, klik Workloads > Deployments.

    3. Di halaman Deployments, klik Create from YAML di pojok kanan atas. Di halaman Create, pilih Custom dari daftar drop-down Sampel Template, masukkan YAML berikut, lalu klik Create.

      Detail 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. Tambahkan ServiceMonitor.

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

    2. Di panel navigasi sisi kiri, klik Integration Management. Di halaman Integrated Environments, pada tab Container Environment, pilih wilayah tempat kluster Anda berada, lalu klik nama lingkungan yang sesuai dengan nama kluster Anda.

    3. Di halaman lingkungan kontainer, klik tab Metric Scraping. Di panel navigasi sisi kiri, klik ServiceMonitor. Di halaman ServiceMonitor, klik Create. Di panel Add ServiceMonitor Configuration, klik YAML Edit, tambahkan konfigurasi ServiceMonitor berikut, lalu buat ServiceMonitor.

      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. Verifikasi status pemantauan.

    Klik tab Self-Monitoring. Di bagian Targets, jika ditampilkan default/sample-app/0(1/1 up), berarti aplikasi berhasil dipantau oleh Layanan Terkelola untuk Prometheus Alibaba Cloud.

  4. Di dasbor Prometheus, kueri nilai http_requests_total untuk rentang waktu terbaru guna memastikan data pemantauan dikumpulkan dengan benar.

Langkah 2: Mengonfigurasi komponen ack-alibaba-cloud-metrics-adapter

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

  2. Di halaman Clusters, klik nama kluster target. Di panel navigasi sisi kiri, klik Applications > Helm.

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

  4. Di panel Update Release, konfigurasikan YAML berikut, lalu klik OK.

    Detail YAML

      AlibabaCloudMetricsAdapter:
      ......
        prometheus:
          enabled: true    # Setel ke true untuk mengaktifkan fitur adapter Prometheus.
          # URL instance Layanan Terkelola untuk Prometheus Alibaba Cloud Anda.
          url: https://cn-beijing.arms.aliyuncs.com:9443/api/v1/prometheus/xxxx/xxxx/xxxx/cn-beijing
        	# Jika Anda menggunakan Layanan Terkelola untuk Prometheus V1 dengan autentikasi token diaktifkan, konfigurasikan prometheusHeader Authorization.
          prometheusHeader:
          - Authorization: {Token}
          	# Jika Anda menggunakan Layanan Terkelola untuk Prometheus V2 tanpa akses bebas sandi diaktifkan, konfigurasikan prometheusHeader Authorization.
          # prometheusHeader:
          # - Authorization: Basic <base64Encode(<accessKey:secretKey>)>
          metricsRelistInterval: 1m # Interval pengambilan ulang daftar metrik. Kami menyarankan Anda mempertahankan nilai default 1m.
        	logLevel: 5								# Tingkat log debug untuk komponen. Kami menyarankan Anda mempertahankan nilai default.
          adapter:
            rules:
              default: false  			# Konfigurasi penemuan metrik default. Kami menyarankan Anda menyetel ini ke false.
              custom:
              # Contoh 1: Ini adalah contoh konfigurasi metrik kustom.
              # Konfigurasi ini 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 berikut 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"
              # Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/container-service-for-kubernetes/latest/horizontal-pod-autoscaling-based-on-alibaba-cloud-managed-service-for-prometheus-metrics
              - 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>>)' # labelSelector dalam konfigurasi metricsQuery tidak mewarisi label filter dari 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>>)'  # labelSelector dalam konfigurasi metricsQuery tidak mewarisi label filter dari seriesQuery.
              - 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>>)'
              # Contoh 2: Ini adalah contoh konfigurasi metrik eksternal.
              # Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/container-service-for-kubernetes/latest/configure-hpa-based-on-external-metrics
              # Saat menambahkan aturan konversi baru, pastikan label metrik di Layanan Terkelola untuk Prometheus Alibaba Cloud konsisten dengan label di sini. Jika tidak, modifikasi label metrik di ARMS Prometheus.
              #- seriesQuery: http_requests_total{namespace!="",pod!=""}
              #  resources:
              #    overrides:
              #      # Di sini, resource mengacu pada resource API Kubernetes. Anda dapat melihatnya dengan menjalankan kubectl api-resources -o wide.
              #      # Di sini, kunci sesuai dengan LabelName dalam data Prometheus. Pastikan LabelName ini ada dalam data metrik Prometheus Anda.
              #      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.
              # Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/container-service-for-kubernetes/latest/configure-hpa-based-on-external-metrics
              #- 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
              # Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/container-service-for-kubernetes/latest/horizontal-pod-autoscaling-based-on-alibaba-cloud-managed-service-for-prometheus-metrics
              # - 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 deskripsi lengkap file konfigurasi komponen ack-alibaba-cloud-adapter, lihat Referensi konfigurasi komponen ack-alibaba-cloud-metrics-adapter.

    Parameter

    Deskripsi

    AlibabaCloudMetricsAdapter. prometheus.adapter.rules.custom

    Ubah nilai bidang ini agar sesuai dengan konten dalam contoh YAML.

    alibabaCloudMetricsAdapter. prometheus.url

    URL instance Layanan Terkelola untuk Prometheus Alibaba Cloud Anda. Untuk informasi tentang cara mendapatkan URL permintaan data Prometheus, lihat Cara mendapatkan URL permintaan data Prometheus.

    AlibabaCloudMetricsAdapter. prometheus.prometheusHeader[].Authorization

    Informasi autentikasi. Untuk informasi selengkapnya, lihat Cara mendapatkan URL permintaan data Prometheus.

    • Prometheus V1: Autentikasi tidak diperlukan secara default. Jika autentikasi token diaktifkan, Anda perlu mengonfigurasi bidang ini.
      Prometheus V2: Autentikasi diaktifkan secara default. Jika akses bebas sandi tidak diaktifkan, Anda perlu mengonfigurasi bidang ini.

    AlibabaCloudMetricsAdapter. prometheus.adapter.rules.default

    Menentukan apakah akan membuat metrik yang telah ditentukan sebelumnya. Kami menyarankan Anda menonaktifkannya dengan menyetel nilai ke false.

Setelah mengonfigurasi dan menerapkan komponen, jalankan perintah berikut untuk memverifikasi bahwa API agregasi Kubernetes menerima data.

Metrik kustom

  1. Gunakan kueri metrik kustom untuk melihat detail dan daftar metrik HPA yang tersedia.

    kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/" | jq .
  2. Kueri nilai saat ini dari metrik container_memory_working_set_bytes_per_second dan container_cpu_usage_core_per_second di namespace kube-system.

    # Kueri container_memory_working_set_bytes_per_second untuk melihat ukuran memori kerja per detik saat ini untuk Pod di namespace kube-system.
    kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_memory_working_set_bytes_per_second" | jq .
    # Kueri container_cpu_usage_core_per_second untuk melihat penggunaan core CPU per detik untuk Pod di namespace kube-system.
    kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_cpu_usage_core_per_second" | jq .

    Contoh output:

    {
      "kind": "MetricValueList",
      "apiVersion": "custom.metrics.k8s.io/v1beta1",
      "metadata": {
        "selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/%2A/container_cpu_usage_core_per_second"
      },
      "items": [
        {
          "describedObject": {
            "kind": "Pod",
            "namespace": "kube-system",
            "name": "ack-cost-exporter-7f44d55c66-cgtz7",
            "apiVersion": "/v1"
          },
          "metricName": "container_cpu_usage_core_per_second",
          "timestamp": "2025-12-30T03:30:21Z",
          "value": "4m",
          "selector": null
        }

Metrik eksternal

  1. Gunakan kueri metrik eksternal untuk melihat detail dan daftar metrik HPA eksternal yang tersedia.

    kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/" | jq .
  2. Kueri 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" | jq .

    Contoh output:

    {
      "kind": "ExternalMetricValueList",
      "apiVersion": "external.metrics.k8s.io/v1beta1",
      "metadata": {},
      "items": [
        {
          "metricName": "http_requests_per_second",
          "metricLabels": {},
          "timestamp": "2025-12-30T03:29:40Z",
          "value": "328m"
        }
      ]
    }

Langkah 3: Mengonfigurasi dan menerapkan HPA

Anda dapat mengekspos metrik Prometheus sebagai metrik kustom atau metrik eksternal. Bagian berikut menjelaskan cara menggunakan kedua metode tersebut untuk penskalaan HPA.

Metrik kustom

  1. Buat file hpa.yaml.

    kind: HorizontalPodAutoscaler
    apiVersion: autoscaling/v2
    metadata:
      name: sample-app-memory-high
    spec:
    # Target penskalaan untuk HPA. HPA secara dinamis memodifikasi jumlah Pod untuk objek ini.
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: sample-app
    # Jumlah minimum dan maksimum Pod untuk HPA.
      minReplicas: 1
      maxReplicas: 10
    # Array metrik yang akan dipantau. Beberapa jenis metrik didukung.
      metrics:
      - type: Pods
        pods:
          # Metrik yang digunakan: pods/container_memory_working_set_bytes_per_second.
          metric: 
            name: container_memory_working_set_bytes_per_second
     # Nilai target bertipe AverageValue. Untuk jenis metrik Pods, hanya AverageValue yang didukung sebagai target.
          target:
            type: AverageValue
            averageValue: 1024000m       # Di sini, 1024000m merepresentasikan ambang batas memori sebesar 1 KB. Satuan metrik adalah byte per detik. 'm' adalah satuan presisi Kubernetes. Saat nilai desimal memerlukan presisi tinggi, Kubernetes menggunakan satuan seperti 'm' atau 'k'. Misalnya, 1001m=1.001 dan 1k=1000.
  2. Buat aplikasi HPA.

    kubectl apply -f hpa.yaml
  3. Setelah mengaktifkan load balancing untuk Service, jalankan perintah berikut untuk melakukan uji stres.

    Ganti <EXTERNAL-IP> dengan alamat IP eksternal LoadBalancer atau nama domain aktual dari Service sample-app.

    Cara mendapatkan <EXTERNAL-IP>

    1. Di halaman Clusters ACK, klik nama kluster Anda. Di panel navigasi kiri, klik Network > Services.

    2. Di namespace default, temukan Service sample-app, klik Update di kolom Actions, lalu ubah Service Type menjadi LoadBalancer.

      Untuk informasi selengkapnya, lihat LoadBalancer.
    3. Setelah pembaruan selesai, tunggu hingga alamat IP eksternal muncul di kolom External IP daftar Service.

    ab -c 50 -n 2000 http://<EXTERNAL-IP>:8080/
  4. Jalankan perintah berikut untuk melihat detail HPA:

    kubectl get hpa sample-app-memory-high

    Output yang diharapkan:

    NAME                     REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
    sample-app-memory-high   Deployment/sample-app   40886272/1024   1         10        1          22s

Metrik eksternal

  1. Buat file hpa.yaml.

    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"
    # Untuk jenis metrik External, hanya Value dan AverageValue yang didukung sebagai jenis target.
            target:
              type: AverageValue
              averageValue: 500m
  2. Buat aplikasi HPA.

    kubectl apply -f hpa.yaml
  3. Setelah mengaktifkan load balancing untuk Service, jalankan perintah berikut untuk melakukan uji stres.

    Ganti <EXTERNAL-IP> dengan alamat IP eksternal LoadBalancer atau nama domain aktual dari Service sample-app.

    Cara mendapatkan <EXTERNAL-IP>

    1. Di halaman Clusters ACK, klik nama kluster Anda. Di panel navigasi kiri, klik Network > Services.

    2. Di namespace default, temukan Service sample-app, klik Update di kolom Actions, lalu ubah Service Type menjadi LoadBalancer.

      Untuk informasi selengkapnya, lihat LoadBalancer.
    3. Setelah pembaruan selesai, tunggu hingga alamat IP eksternal muncul di kolom External IP daftar Service.

    ab -c 50 -n 2000 http://<EXTERNAL-IP>:8080/
  4. Jalankan perintah berikut untuk melihat 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

ack-alibaba-cloud-metrics-adapter konfigurasi

Komponen ack-alibaba-cloud-metrics-adapter mengonversi metrik Prometheus menjadi metrik yang kompatibel dengan HPA dalam empat langkah:

  1. Penemuan: ack-alibaba-cloud-metric-adapter menemukan metrik yang tersedia dari Prometheus.

  2. Asosiasi: Mengasosiasikan metrik dengan resource Kubernetes seperti Pod, Node, dan namespace.

  3. Pemberian Nama: Menentukan nama metrik hasil konversi agar dapat dirujuk oleh HPA.

  4. Kueri: Menentukan cara mengkueri data metrik dari Prometheus.

Sebagai contoh, konfigurasi berikut mengonversi metrik http_requests_total dari kontainer sample-app menjadi http_requests_per_second untuk HPA:

- 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

Ekspresi PromQL untuk meminta data.

metricsQuery

Menjalankan operasi agregasi pada data yang diminta oleh ekspresi PromQL di seriesQuery.

Catatan

labelSelector dalam konfigurasi metricsQuery tidak mewarisi label filter dari seriesQuery.

resources

Mencocokkan label data PromQL dengan resource Kubernetes. resource adalah resource API kluster, seperti Pod, namespace, atau Node. Anda dapat melihat resource yang tersedia dengan menjalankan perintah kubectl api-resources -o wide. Kunci sesuai dengan nama label dalam data Prometheus, dan label ini harus ada dalam data tersebut.

name

Menggunakan ekspresi reguler untuk mengonversi nama metrik Prometheus menjadi nama yang lebih mudah dibaca untuk HPA. Contoh ini mengonversi http_requests_total menjadi http_requests_per_second. Saat Anda mengonversi metrik eksternal, jika nama metrik asli mengandung huruf kapital, nama metrik baru harus dalam huruf kecil.

  1. Penemuan

    Tentukan metrik Prometheus yang akan dikonversi. Anda dapat menggunakan seriesFilters untuk memfilter metrik secara tepat. seriesQuery dapat mencari berdasarkan label. Contoh kode:

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

    seriesFilters bersifat opsional dan digunakan untuk memfilter metrik:

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

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

  2. Asosiasi

    Atur pemetaan antara label metrik Prometheus dan resource Kubernetes. Label untuk metrik http_requests_total mencakup namespace!="" dan pod!="".

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

    Mengonversi nama metrik Prometheus menjadi nama metrik HPA, tetapi tidak mengubah nama metrik Prometheus itu sendiri. Jika Anda menggunakan metrik Prometheus asli, Anda tidak perlu mengonfigurasi ini.

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

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

    Templat untuk mengkueri API Prometheus. Komponen ack-alibaba-cloud-adapter mengisi templat ini dengan parameter dari HPA, mengirim permintaan ke API Prometheus, dan memberikan nilai yang dikembalikan kepada HPA untuk penskalaan.

    - 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>>)

URL permintaan data Prometheus

Skenario 1: Prometheus Alibaba Cloud

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

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Operations > Prometheus Monitoring.

  3. Di pojok kanan atas, klik Go to ARMS Prometheus. Di panel navigasi sisi kiri konsol Application Real-Time Monitoring Service (ARMS), klik Settings, lalu klik tab Settings untuk mendapatkan HTTP API Address (Grafana Read Address).

    Kami menyarankan Anda menggunakan URL jaringan internal. Jika jaringan internal tidak dapat diakses, Anda dapat menggunakan URL jaringan publik.

    Untuk meningkatkan keamanan pembacaan data, klik Generate token untuk membuat token. Anda kemudian harus menyertakan token ini dalam panggilan API HTTP Anda untuk autentikasi.

  4. Buat informasi autentikasi Prometheus.

    • Prometheus V1: Jika autentikasi token diaktifkan, konfigurasikan token langsung dalam konfigurasi komponen.

      Di halaman HTTP API Address (Grafana Read Address), temukan bidang Token dan klik ikon salin untuk mendapatkan nilai token.

      ...
          prometheus:
            prometheusHeader:
            - Authorization: {Token}
      ...
    • Prometheus V2: Autentikasi berbasis AccessKey diaktifkan secara default. Jika Anda belum mengaktifkan akses bebas sandi di konsol Prometheus, Anda harus melakukan encode Base64 terhadap AccessKey dan AccessSecret Anda, lalu memasukkan hasilnya ke dalam konfigurasi komponen ack-alibaba-cloud-metrics-adapter.

      1. Hasilkan string yang diencode Base64.

        Gabungkan ID AccessKey dan rahasia AccessKey Anda dalam format AccessKey:AccessSecret dan lakukan encode Base64.

        echo -n 'accessKey:secretKey' | base64
      2. Konfigurasikan komponen dengan memasukkan string yang dihasilkan dalam format Basic <encoded_string> ke dalam bidang Authorization dari prometheusHeader.

        ...
            prometheus:
              prometheusHeader:
              - Authorization: Basic YWxxxxeQ==
        ...

Skenario 2: Prometheus open source

Untuk pengaturan Prometheus open source yang dikelola sendiri, Anda harus mengekspos API akses Prometheus standar melalui Service dan mengonfigurasi URL-nya di komponen metrics-adapter. Hal ini mengonfigurasi HPA untuk menggunakan instance Prometheus open source Anda sebagai sumber data.

Contoh ini menggunakan Helm chart edisi komunitas ack-prometheus-operator dari Marketplace ACK. Untuk informasi selengkapnya, lihat Prometheus open source.

  1. Terapkan solusi pemantauan Prometheus dan ekspos API Prometheus standar.

    • Login ke Konsol ACK. Di panel navigasi kiri, klik Marketplace > Marketplace.

    • Di halaman Marketplace, cari dan klik ack-prometheus-operator, lalu klik Quick Deployment di pojok kanan atas.

    • Di halaman pembuatan, pilih Cluster dan Namespace, ubah Release Name sesuai kebutuhan, lalu klik Next. Ubah Parameters sesuai kebutuhan, lalu klik OK.

    • Periksa hasil penerapan.

      1. Ekspos API Prometheus standar melalui Service. Contoh ini menggunakan Service ack-prometheus-operator bernama ack-prometheus-operator-prometheus.

      2. Akses ServiceIP:9090 di browser. Untuk mengaktifkan akses publik, ekspos Service melalui instance Server Load Balancer (SLB) untuk melihat konsol Prometheus.

      3. Di bilah menu atas, klik Status > Targets untuk melihat semua job scrape.

        Jika status semua job adalah UP, berarti semua job scrape berjalan sesuai harapan.

        Halaman menampilkan grup job scrape seperti alertmanager-main (3/3 up) dan apiserver (3/3 up), dengan Status semua job berupa UP (hijau).

    • Periksa service dan namespace yang sesuai di Labels.

      Contoh ini menggunakan ServiceName 'ack-prometheus-operator-prometheus' dan ServiceNamespace 'monitoring' untuk mengilustrasikan URL permintaan data Prometheus open source ini.

      http://ack-prometheus-operator-prometheus.monitoring.svc.cluster.local:9090
  2. Konfigurasikan parameter URL sumber data Prometheus di komponen untuk memastikan komponen dapat berkomunikasi dengan Prometheus.

    Jika Anda memilih untuk mengakses API Prometheus standar melalui jaringan publik, Anda dapat mengonfigurasinya seperti pada contoh berikut.

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

    Untuk solusi ack-prometheus-operator, nilai url adalah http://ack-prometheus-operator-prometheus.monitoring.svc.cluster.local:9090.

Untuk informasi selengkapnya tentang cara mendapatkan data Prometheus, lihat Menambahkan Prometheus sebagai sumber data di Grafana.

Topik terkait