Secara default, Horizontal Pod Autoscaler (HPA) mendukung penskalaan otomatis berdasarkan metrik CPU dan memori. Namun, metrik tersebut mungkin tidak cukup untuk skenario O&M yang kompleks. Topik ini menjelaskan cara mengonversi metrik kustom dan eksternal yang dikumpulkan oleh Prometheus menjadi metrik penskalaan yang dapat digunakan HPA dengan memperoleh data pemantauan dan menyiapkan konfigurasi penskalaan, sehingga menyediakan mekanisme penskalaan yang lebih fleksibel dan nyaman untuk aplikasi Anda.
Prasyarat
Komponen pemantauan Prometheus telah diterapkan. Untuk informasi selengkapnya, lihat Hubungkan ke dan konfigurasikan Layanan Prometheus.
Komponen ack-alibaba-cloud-metrics-adapter telah diterapkan. Untuk informasi selengkapnya, lihat Terapkan komponen ack-alibaba-cloud-metrics-adapter.
CatatanMasuk ke Konsol Container Service for Kubernetes (ACK). Pada halaman , terapkan komponen ack-alibaba-cloud-metrics-adapter.
Fitur
Secara default, HPA hanya mendukung penskalaan otomatis berdasarkan CPU dan memori, yang mungkin tidak memenuhi kebutuhan O&M harian. Layanan Prometheus terintegrasi penuh dengan ekosistem Prometheus open source, mendukung pemantauan berbagai komponen, menyediakan banyak dasbor siap pakai, serta menawarkan layanan Prometheus yang sepenuhnya dikelola. Proses ini melibatkan tiga langkah utama:
Ekspos metrik pemantauan menggunakan Layanan Prometheus di kluster ACK.
Konversi metrik pemantauan Prometheus menjadi metrik agregasi Kubernetes yang dapat digunakan HPA menggunakan komponen ack-alibaba-cloud-metrics-adapter. Untuk informasi selengkapnya, lihat Penskalaan otomatis berdasarkan beberapa metrik dan metrik kustom.
Konfigurasikan dan terapkan HPA untuk melakukan penskalaan elastis berdasarkan metrik dari langkah sebelumnya.
Metrik dibagi menjadi dua jenis berdasarkan skenario:
Custom Metric: Melakukan penskalaan berdasarkan metrik yang terkait dengan objek target Kubernetes, seperti pod. Contohnya adalah metrik dari dimensi pod itu sendiri. Untuk informasi selengkapnya, lihat autoscaling-on-multiple-metrics-and-custom-metrics.
External Metric: Melakukan penskalaan berdasarkan metrik yang tidak terkait dengan objek target Kubernetes, seperti pod. Misalnya, Anda dapat menskalakan pod suatu workload berdasarkan metrik permintaan per detik (QPS) bisnis secara keseluruhan. Untuk informasi selengkapnya, lihat autoscaling-on-metrics-not-related-to-kubernetes-objects.
Bagian berikut menjelaskan cara mengonfigurasi ack-alibaba-cloud-metrics-adapter untuk mengonversi metrik Layanan Prometheus menjadi metrik yang kompatibel dengan HPA dan mengaktifkan penskalaan otomatis berdasarkan metrik tersebut.
Langkah 1: Peroleh data pemantauan Prometheus
Contoh 1: Gunakan metrik pemantauan kontainer default di ACK
Anda dapat menggunakan metrik default dari Layanan Prometheus, yang diinstal secara default di ACK, untuk penskalaan elastis HPA. Metrik yang didukung mencakup metrik pemantauan kontainer cAdvisor, metrik pemantauan infrastruktur Node-Exporter, metrik GPU-Exporter, dan semua metrik lain yang telah Anda hubungkan ke Layanan Prometheus. Untuk melihat metrik yang terhubung ke Layanan Prometheus, lakukan langkah-langkah berikut:
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih .
Di pojok kanan atas, klik Go to Prometheus Service.
Di panel navigasi kiri konsol Layanan Prometheus, klik Settings untuk melihat semua metrik yang terhubung ke Layanan Prometheus.
Contoh 2: Gunakan metrik Prometheus yang dilaporkan oleh pod
Terapkan aplikasi uji dan ekspos metriknya menggunakan metode standar Prometheus. Untuk informasi selengkapnya, lihat metric_type. Bagian berikut menjelaskan cara menerapkan aplikasi sample-app dan mengekspos metrik http_requests_total untuk melacak jumlah permintaan.
Terapkan workload aplikasi.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, klik .
Di sisi kanan halaman Stateless, klik Create From YAML. Pada halaman Create yang terbuka, untuk Sample Template, pilih Custom, masukkan YAML berikut, lalu klik Create.
Tambahkan ServiceMonitor
Masuk ke Konsol ARMS.
Di panel navigasi kiri, klik Provisioning. Pada tab Provisioned, di bawah tab Container Environment, pilih wilayah tempat kluster berada, lalu klik nama lingkungan yang sesuai. Nama lingkungan sama dengan nama kluster.
Pada halaman lingkungan kontainer, klik tab Metric Collection. Di panel navigasi kiri halaman saat ini, klik ServiceMonitor. Pada halaman ServiceMonitor, klik Add. Pada panel Add ServiceMonitor Config, klik YAML Edit, tambahkan konfigurasi ServiceMonitor berikut, lalu ikuti petunjuk di layar untuk membuat 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
Konfirmasi status pemantauan.
Klik tab Self-monitoring. Di bagian Targets, jika ditampilkan default/sample-app/0(1/1 up), berarti Layanan Prometheus berhasil memantau aplikasi yang diterapkan.
Di dasbor Prometheus, kueri nilai
http_requests_totaluntuk rentang waktu terbaru guna memastikan data pemantauan diperoleh dengan benar.
Langkah 2: Ubah konfigurasi komponen ack-alibaba-cloud-metrics-adapter
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, klik .
Pada halaman Helm, temukan ack-alibaba-cloud-metrics-adapter dan klik Update di kolom Actions.
Pada panel Update Release, konfigurasikan YAML berikut, lalu klik OK.
Tabel berikut menjelaskan beberapa field. Untuk deskripsi lengkap file konfigurasi komponen ack-alibaba-cloud-metrics-adapter, lihat Deskripsi lengkap file konfigurasi komponen ack-alibaba-cloud-metrics-adapter.
Field
Deskripsi
AlibabaCloudMetricsAdapter.prometheus.adapter.rules.customUbah isi field ini agar sesuai dengan isi pada contoh YAML.
alibabaCloudMetricsAdapter.prometheus.urlAlamat Layanan Prometheus. Untuk informasi cara memperoleh URL permintaan data Prometheus, lihat Cara memperoleh URL permintaan data Prometheus.
AlibabaCloudMetricsAdapter.prometheus.prometheusHeader[].AuthorizationInformasi autentikasi. Untuk informasi selengkapnya, lihat Cara memperoleh URL permintaan data Prometheus.
Prometheus V1: Autentikasi tidak diperlukan secara default. Jika autentikasi token diaktifkan, Anda harus mengonfigurasi parameter ini.
Prometheus V2: Autentikasi diaktifkan secara default. Jika akses tanpa kata sandi tidak diaktifkan, Anda harus mengonfigurasi parameter ini.
AlibabaCloudMetricsAdapter.prometheus.adapter.rules.defaultMembuat metrik pradefinisi secara default. Kami menyarankan menonaktifkannya dengan mengatur nilai ke
false.
Setelah Anda mengonfigurasi parameter komponen dan menerapkan komponen, Anda dapat menjalankan perintah berikut untuk memeriksa apakah API agregasi Kubernetes berhasil mengakses data.
Skalakan kontainer menggunakan Custom Metrics
Jalankan kueri Custom Metrics untuk melihat detail dan daftar metrik HPA yang tersedia.
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/" | jq .Kueri nilai saat ini dari metrik
container_memory_working_set_bytes_per_seconddancontainer_cpu_usage_core_per_seconddi namespace kube-system.# Kueri container_memory_working_set_bytes_per_second untuk melihat ukuran memori kerja per detik 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 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 .Blok kode berikut menunjukkan contoh hasil kueri:
{ "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 }
Skalakan kontainer menggunakan External Metrics
Jalankan kueri External Metrics untuk melihat detail dan daftar metrik HPA eksternal yang tersedia.
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/" | jq .Kueri nilai saat ini dari metrik
http_requests_per_seconddi namespace default.kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/http_requests_per_second" | jq .Contoh:
{ "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: Konfigurasikan dan terapkan HPA untuk menskalakan berdasarkan metrik yang diperoleh
Versi saat ini mendukung ekspos Custom Metrics dan External Metrics dari Layanan Prometheus secara bersamaan. Anda dapat memilih salah satu metode berikut untuk menskalakan kontainer menggunakan HPA sesuai kebutuhan.
Custom Metrics
Buat file hpa.yaml.
kind: HorizontalPodAutoscaler apiVersion: autoscaling/v2 metadata: name: sample-app-memory-high spec: # Deskripsi target penskalaan HPA. HPA akan secara dinamis mengubah 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 dipantau. Beberapa jenis metrik dapat berdampingan. metrics: - type: Pods pods: # Gunakan metrik: pods/container_memory_working_set_bytes_per_second. metric: name: container_memory_working_set_bytes_per_second # Nilai target bertipe AverageValue. Hanya target bertipe AverageValue yang didukung untuk metrik Pods. target: type: AverageValue averageValue: 1024000m # Di sini, 1024000m merepresentasikan ambang batas memori 1 KB. Satuan metrik saat ini adalah byte/per detik. 'm' adalah satuan presisi Kubernetes. Saat titik desimal muncul dan Kubernetes memerlukan presisi tinggi, digunakan satuan seperti 'm' atau 'k'. Misalnya, 1001m=1.001, dan 1k=1000.Buat aplikasi HPA.
kubectl apply -f hpa.yamlSetelah Anda mengaktifkan load balancing untuk Service, jalankan perintah berikut untuk melakukan uji stres.
Ganti
<EXTERNAL-IP>dengan alamat IP publik atau nama domain instance Server Load Balancer (SLB) untuk Service sample-app.ab -c 50 -n 2000 http://<EXTERNAL-IP>:8080/Jalankan perintah berikut untuk melihat detail HPA.
kubectl get hpa sample-app-memory-highOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE sample-app-memory-high Deployment/sample-app 40886272/1024 1 10 1 22s
External Metrics
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" # Hanya target bertipe Value dan AverageValue yang didukung untuk metrik External. target: type: AverageValue averageValue: 500mBuat aplikasi HPA.
kubectl apply -f hpa.yamlSetelah Anda mengaktifkan load balancing untuk Service, jalankan perintah berikut untuk melakukan uji stres.
Ganti
<EXTERNAL-IP>dengan alamat IP publik atau nama domain instance Server Load Balancer (SLB) untuk Service sample-app.ab -c 50 -n 2000 http://<EXTERNAL-IP>:8080/Jalankan perintah berikut untuk melihat detail HPA.
kubectl get hpa sample-appOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE sample-app Deployment/sample-app 33m/500m 1 10 1 7m
Deskripsi lengkap file konfigurasi komponen ack-alibaba-cloud-metrics-adapter
Komponen ack-alibaba-cloud-metrics-adapter mengonversi metrik Prometheus menjadi metrik yang kompatibel dengan HPA melalui langkah-langkah berikut:
Discovery: Komponen ack-alibaba-cloud-metrics-adapter menemukan metrik yang tersedia dari Prometheus.
Association: Mengaitkan metrik dengan resource Kubernetes, seperti pod, node, dan namespace.
Naming: Menentukan nama metrik yang dikonversi agar kompatibel dengan HPA untuk direferensikan oleh HPA.
Querying: Menentukan cara mengkueri data metrik dari Prometheus.
Contoh berikut menunjukkan file konfigurasi lengkap untuk komponen ack-alibaba-cloud-metrics-adapter yang mengonversi metrik http_requests_total yang diekspos oleh kontainer sample-app menjadi metrik http_requests_per_second di 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>>)Field | Deskripsi |
| Data permintaan Bahasa Kueri Prometheus (PromQL). |
| Menjalankan operasi agregasi pada data permintaan PromQL di seriesQuery. Catatan
|
| Label data di PromQL yang dicocokkan dengan |
| Mengonversi nama metrik Prometheus menjadi nama metrik yang lebih mudah dibaca menggunakan ekspresi reguler. Di sini, |
Discovery
Menentukan metrik Prometheus yang akan dikonversi. Anda dapat menggunakan
seriesFiltersuntuk memfilter metrik.seriesQuerydapat digunakan untuk mencari metrik berdasarkan label. Kode berikut memberikan contoh.seriesQuery: http_requests_total{namespace!="",pod!=""} seriesFilters: - isNot: "^container_.*_seconds_total"seriesFiltersadalah field opsional yang dapat Anda gunakan untuk memfilter metrik:is:<regex>: Mencocokkan metrik yang mengandung ekspresi reguler tertentu.isNot:<regex>: Mencocokkan metrik yang tidak mengandung ekspresi reguler tertentu.
Association
Menetapkan pemetaan antara label metrik Prometheus dan resource Kubernetes. Label untuk metrik
http_requests_totalmencakupnamespace!=""danpod!="".- seriesQuery: http_requests_total{namespace!="",pod!=""} resources: overrides: namespace: {resource: "namespace"} pod: {resource: "pod"}Naming
Mengonversi nama metrik Prometheus menjadi nama metrik HPA. Ini tidak mengubah nama metrik Prometheus asli. Jika Anda menggunakan metrik Prometheus asli, Anda tidak perlu mengonfigurasi parameter 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"Querying
Templat ini digunakan untuk mengkueri API Prometheus. Adapter ack-alibaba-cloud mengisi templat ini dengan parameter dari HPA, mengirim permintaan ke API Prometheus, dan mengembalikan nilai ke HPA untuk mengaktifkan penskalaan elastis.
- 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>>)
Cara memperoleh URL permintaan data Prometheus
Skenario 1: Pemantauan Prometheus Alibaba Cloud
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih .
Di pojok kanan atas, klik Go to Prometheus Service. Di panel navigasi kiri konsol Layanan Prometheus, klik Settings. Lalu, klik tab Settings untuk memperoleh HTTP API Address (Grafana Read Address).
Kami menyarankan menggunakan jaringan internal. Jika jaringan internal tidak tersedia, Anda dapat menggunakan jaringan publik.

Buat informasi autentikasi Prometheus.
Prometheus V1: Jika autentikasi token diaktifkan, Anda dapat langsung mengonfigurasi token di konfigurasi komponen.

... prometheus: prometheusHeader: - Authorization: {Token} ...Prometheus V2: Autentikasi berbasis Pasangan Kunci Akses diaktifkan secara default. Jika Anda belum mengaktifkan akses tanpa kata sandi di konsol Prometheus, Anda harus mengencode Base64 ID AccessKey dan Rahasia AccessKey, lalu memasukkan string yang diencode ke konfigurasi komponen ack-alibaba-cloud-metrics-adapter.
Hasilkan string yang diencode Base64.
Gabungkan ID AccessKey dan Rahasia AccessKey yang diperoleh dalam format
AccessKey:AccessSecret, lalu encode string tersebut dengan Base64.echo -n 'accessKey:secretKey' | base64Konfigurasikan komponen.
Masukkan string lengkap yang dihasilkan dalam formatBasic <string yang diencode Base64>ke fieldAuthorizationdariprometheusHeader.... prometheus: prometheusHeader: - Authorization: Basic YWxxxxeQ== ...
Skenario 2: Pemantauan Prometheus open source
Untuk pengaturan Prometheus self-managed open source, Anda harus mengekspos API akses Prometheus standar melalui Service. Kemudian, konfigurasikan API tersebut di parameter URL sumber data Prometheus komponen metrics-adapter. Hal ini menyelesaikan konfigurasi sumber data HPA berdasarkan data dari Prometheus open source.
Contoh berikut menggunakan aplikasi Helm Chart edisi komunitas ack-prometheus-operator dari App Marketplace ACK. Untuk informasi selengkapnya, lihat Pemantauan Prometheus open source.
Terapkan solusi pemantauan Prometheus dan ekspos API Prometheus standar.
Masuk ke Konsol ACK. Di panel navigasi kiri, pilih .
Pada halaman App Marketplace, cari dan klik ack-prometheus-operator. Di sisi kanan halaman, klik Deploy.
Pada halaman pembuatan, pilih Cluster dan Namespace, ubah Release Name sesuai kebutuhan, lalu klik Next. Ubah Parameters sesuai kebutuhan, lalu klik OK.
Lihat hasil penerapan.
Ekspos API Prometheus standar melalui Service. Contoh ini menggunakan Service `ack-prometheus-operator-prometheus`.
Buka `ServiceIP:9090` di browser. Untuk mengaktifkan akses jaringan publik untuk Service menggunakan instance SLB, buka konsol Prometheus.
Di bilah menu bagian atas halaman, klik untuk melihat semua pekerjaan pengumpulan.

Jika status semua pekerjaan adalah UP, berarti semua pekerjaan pengumpulan berjalan normal.

Lihat service dan namespace yang sesuai di bagian 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
Konfigurasikan parameter URL sumber data Prometheus komponen untuk memastikan komunikasi normal antara komponen dan Prometheus.
Jika Anda memilih mengakses API Prometheus standar melalui jaringan publik, Anda dapat merujuk contoh konfigurasi berikut.
AlibabaCloudMetricsAdapter: ...... prometheus: enabled: true url: http://your_domain.com:9090 # Ganti your_domain.com dengan alamat IP publik Anda.Misalnya, jika Anda menggunakan solusi ack-prometheus-operator, nilai
urladalahhttp://ack-prometheus-operator-prometheus.monitoring.svc.cluster.local:9090.
Untuk informasi selengkapnya tentang cara memperoleh data Prometheus, lihat Tambahkan sumber data Prometheus di Grafana.
Dokumen Terkait
Untuk menerapkan HPA menggunakan metrik eksternal, seperti laju permintaan HTTP atau QPS Ingress, lihat Penyesuaian Otomatis Pod Horizontal berdasarkan metrik komponen Alibaba Cloud.
Untuk menggunakan Nginx Ingress dalam HPA pada beberapa aplikasi dan menyesuaikan jumlah replika pod secara dinamis berdasarkan beban aplikasi, lihat Skalakan horizontal beberapa aplikasi berdasarkan metrik lalu lintas Nginx Ingress.