Skalakan pod berdasarkan sinyal lalu lintas aktual—bukan hanya CPU—dengan menghubungkan metrik Ingress dari Simple Log Service (SLS) ke Penyesuaian Otomatis Pod Horizontal (HPA) Kubernetes melalui External Metrics API. Panduan ini menjelaskan contoh lengkap: terapkan aplikasi Nginx, ekspos melalui Ingress, lalu konfigurasikan HPA untuk menskalakan berdasarkan permintaan per detik (QPS) dan latensi persentil ke-99,99.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster ACK dengan kubectl yang telah dikonfigurasi
Kontroler Ingress dengan pengumpulan log SLS yang diaktifkan (diaktifkan secara default saat Anda membuat kluster)
Izin untuk menginstal Helm chart dan membuat resource HPA
Cara kerja
Komponen ack-alibaba-cloud-metrics-adapter menjembatani layanan pemantauan Alibaba Cloud dan External Metrics API Kubernetes. Setelah diinstal, HPA dapat mengkueri metrik Ingress SLS—seperti sls_ingress_qps dan sls_ingress_latency_p9999—dan menyesuaikan jumlah replika Deployment Anda sesuai kebutuhan.
Langkah 1: Instal ack-alibaba-cloud-metrics-adapter
Komponen ack-alibaba-cloud-metrics-adapter memungkinkan Kubernetes mengambil data pemantauan dari layanan Alibaba Cloud—termasuk ECS, SLB, dan RDS—melalui External Metrics API.
Komponen ini tidak mendukung peningkatan in-place. Untuk melakukan upgrade, uninstal versi saat ini terlebih dahulu, lalu instal versi terbaru. Selama proses uninstall dan reinstall, HPA terkait akan menjeda penskalaan karena pengambilan data pemantauan berhenti.
Masuk ke Container Service Management Console. Di panel navigasi, klik Clusters.
Klik nama kluster Anda. Di panel navigasi kiri, pilih Applications > Helm.
Di halaman Helm, klik Create. Lengkapi konfigurasi Basic Information, pilih ack-alibaba-cloud-metrics-adapter, lalu klik Next.
Di halaman Parameter Settings, pilih Chart Version dan klik OK.
Langkah 3: Buat Ingress
Di panel navigasi kiri halaman manajemen kluster, pilih Network > Ingress. Di halaman Ingress, klik Create Ingress.
Isi kolom yang diperlukan lalu klik OK. Konsol akan mengarahkan Anda ke halaman Ingress.
Di kolom Name, klik nama Ingress untuk melihat aturan routing-nya. Untuk detail selengkapnya, lihat Manage Ingress.
Langkah 4: Konfigurasi HPA
HPA mendukung dua metrik Ingress SLS dengan semantik penskalaan yang berbeda:
| Metric | Target type | Scaling behavior |
|---|---|---|
sls_ingress_qps | AverageValue | QPS dibagi dengan jumlah pod saat ini sebelum dibandingkan |
sls_ingress_latency_p9999 | Value | Nilai latensi mentah dibandingkan secara langsung |
Buat file
ingress-hpa.yamldengan konten berikut:Parameter Wajib Deskripsi sls.ingress.routeYa Format: <namespace>-<svc>-<port>. Contoh:default-nginx-80sls.logstoreYa Logstore di Simple Log Service. Default: nginx-ingresssls.projectYa Project di Simple Log Service. Default: k8s-log-<cluster-id>sls.internal.endpointTidak Apakah mengakses SLS melalui jaringan internal. Default: true. Atur kefalseuntuk menggunakan jaringan publik.apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: ingress-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx-deployment-basic minReplicas: 2 maxReplicas: 10 metrics: - type: External external: metric: name: sls_ingress_qps selector: matchLabels: sls.project: "<your-sls-project>" # Default: k8s-log-<cluster-id> sls.logstore: "nginx-ingress" # Logstore SLS default untuk log Nginx Ingress sls.ingress.route: "default-nginx-80" # Format: <namespace>-<svc>-<port> target: type: AverageValue averageValue: 10 # Lakukan scale up ketika QPS rata-rata per pod melebihi 10 - type: External external: metric: name: sls_ingress_latency_p9999 selector: matchLabels: sls.project: "<your-sls-project>" sls.logstore: "nginx-ingress" sls.ingress.route: "default-nginx-80" # sls.internal.endpoint: "true" # true = jaringan internal (default); false = jaringan publik target: type: Value value: 10 # Lakukan scale up ketika latensi persentil ke-99,99 melebihi 10 msTabel berikut menjelaskan parameter yang digunakan dalam konfigurasi HPA.
Terapkan konfigurasi tersebut:
kubectl apply -f ingress-hpa.yaml
Verifikasi penskalaan
Jalankan uji beban selama 5 menit terhadap domain Ingress Anda untuk memicu scale-up:
# Kirim 10 permintaan konkuren selama 300 detik
ab -t 300 -c 10 <domain-name-configured-for-the-ingress>Pantau status HPA secara real time:
kubectl get hpa ingress-hpa --watchOutput yang diharapkan saat scale-up berhasil (REPLICAS mencapai MAXPODS):
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
ingress-hpa Deployment/nginx-deployment-basic 21/10 (avg) 2 10 10 7m49sSaat lalu lintas turun di bawah ambang batas, nilai REPLICAS akan kembali ke nilai minimum.
Troubleshooting
Mulai troubleshooting dengan menjalankan kubectl describe hpa ingress-hpa dan periksa bidang Conditions. Gunakan kolom Type dan Status untuk mengidentifikasi masalah, lalu ikuti langkah-langkah berikut.
Kolom `target` menampilkan `unknown`
Jalankan
kubectl describe hpa <hpa-name>dan periksa bidangConditions:Jika
AbleToScalebernilaiFalse: pastikan Deployment dalam kondisi sehat.Jika
ScalingActivebernilaiFalse: lanjutkan ke langkah berikutnya.
Jalankan perintah berikut untuk memeriksa apakah External Metrics API tersedia:
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/"Jika responsnya adalah
Error from server (NotFound), periksa status startupalibaba-cloud-metrics-adapter. Jika adapter berjalan normal dan metrik HPA terkait Ingress, deploy komponen SLS terlebih dahulu. Untuk detail selengkapnya, lihat Collect and analyze Nginx Ingress access logs.Verifikasi format
sls.ingress.route. Nilainya harus berupa<namespace>-<svc>-<port>, dengan ketentuan:namespace: namespace tempat Ingress beradasvc: nama Service yang terkait dengan Ingressport: nama port dari Service tersebut
Gagal menarik gambar ack-alibaba-cloud-metrics-adapter (versi 1.3.7)
Saat melakukan upgrade ke versi 1.3.7, Anda mungkin melihat:
Failed to pull image "registry-<region-id>-vpc.ack.aliyuncs.com/acs/alibaba-cloud-metrics-adapter-amd64:v0.2.9-ba634de-aliyun".Hal ini terjadi karena komponen tidak mendukung pembaruan langsung. Untuk mengatasinya:
Cadangkan konfigurasi komponen saat ini.
Uninstal versi lama.
Instal versi terbaru menggunakan konfigurasi cadangan tersebut.
FAQ
Bagaimana cara mengkueri sls_ingress_qps dari command line?
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/*/sls_ingress_qps?labelSelector=sls.project={{SLS_Project}},sls.logstore=nginx-ingress"Ganti {{SLS_Project}} dengan nama Project SLS Anda. Jika Anda tidak menetapkan nama kustom saat membuat kluster, nilai default-nya adalah k8s-log-{{ClusterId}}.
Respons yang berhasil akan mengembalikan ExternalMetricValueList dengan nilai QPS saat ini di bidang value. Jika Anda mendapatkan error ParameterInvalid, artinya metrik tidak memiliki data—biasanya karena ALB Ingress belum dikonfigurasi tetapi sls_alb_ingress_qps dikueri alih-alih sls_ingress_qps.
Metrik apa saja yang didukung HPA?
Untuk daftar lengkapnya, lihat Alibaba Cloud HPA Metrics. Metrik Ingress SLS umum:
| Metric | Description | Required parameter |
|---|---|---|
sls_ingress_qps | QPS untuk rute Ingress tertentu | sls.ingress.route |
sls_alb_ingress_qps | QPS untuk rute ALB Ingress | sls.ingress.route |
sls_ingress_latency_avg | Latensi rata-rata untuk semua permintaan | sls.ingress.route |
sls_ingress_latency_p50 | Latensi pada persentil ke-50 | sls.ingress.route |
sls_ingress_latency_p95 | Latensi pada persentil ke-95 | sls.ingress.route |
sls_ingress_latency_p99 | Latensi pada persentil ke-99 | sls.ingress.route |
sls_ingress_latency_p9999 | Latensi pada persentil ke-99,99 | sls.ingress.route |
sls_ingress_inflow | Bandwidth masuk untuk Ingress | sls.ingress.route |
Bagaimana cara menyesuaikan HPA setelah menyesuaikan format log Nginx Ingress?
Pengumpulan log SLS bergantung pada Definisi Sumber Daya Kustom (CRD) AliyunLogConfig yang diterapkan saat SLS pertama kali diaktifkan. CRD ini disesuaikan untuk format log default kontroler Ingress ACK. Jika Anda mengubah format log akses kontroler Ingress, perbarui bagian processor_regex dalam konfigurasi CRD agar sesuai dengan format kustom Anda. Untuk detail selengkapnya, lihat Collect container logs using a DaemonSet and a CRD.
Jika SLS dinonaktifkan saat Anda membuat kluster dan Anda memerlukan metrik Ingress untuk HPA, aktifkan atau konfigurasikan ulang SLS terlebih dahulu. Untuk detail selengkapnya, lihat Collect and analyze Nginx Ingress access logs.