Saat terjadi lonjakan lalu lintas, penskalaan yang tepat meningkatkan kecepatan respons dan efisiensi penggunaan resource kluster. Topik ini menjelaskan cara menggunakan Kubernetes External Metrics untuk mengintegrasikan metrik bisnis utama—seperti laju permintaan HTTP dan permintaan per detik (QPS) Ingress—serta menerapkan kebijakan penskalaan otomatis.
Topik ini memandu Anda melalui langkah-langkah berikut untuk mengonfigurasi penyesuaian otomatis pod horizontal (HPA) menggunakan metrik QPS Ingress dari Simple Log Service (SLS). Contoh ini menerapkan Deployment bernama nginx, sebuah Service, dan sebuah Ingress.
Langkah 1: Terapkan komponen 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 API External Metrics, sehingga meningkatkan kemampuan pemantauan dan autoscaling kluster.
Masuk ke Container Service Management Console . Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, pilih .
Pada halaman Helm, klik Create. Lengkapi konfigurasi Basic Information. Pilih ack-alibaba-cloud-metrics-adapter dan klik Next.
Pada halaman Parameter Settings, pilih Chart Version dan klik OK.
Komponen ack-alibaba-cloud-metrics-adapter tidak mendukung upgrade smooth. Untuk melakukan upgrade, uninstal versi saat ini terlebih dahulu, lalu instal versi terbaru.
Langkah 2: Buat aplikasi dan layanan
Buat file bernama nginx-test.yaml.
Jalankan perintah berikut untuk membuat Deployment dan Service-nya.
kubectl apply -f nginx-test.yaml
Langkah 3: Buat entri rute
Di panel navigasi kiri halaman manajemen kluster, pilih . Pada halaman Ingress, klik Create Ingress di pojok kiri atas.
Isi kolom yang diperlukan pada panel Create dan klik OK. Setelah pembuatan selesai, sistem akan mengarahkan Anda secara otomatis ke halaman Ingress.
Pada kolom Name, klik nama Ingress yang telah Anda buat untuk melihat aturan routing-nya. Untuk informasi selengkapnya, lihat Manage Ingress.
Langkah 4: Konfigurasi HPA
Anda dapat mengonfigurasi dua metrik Project SLS untuk penskalaan dalam HPA: sls_ingress_qps dan sls_ingress_latency_p9999.
sls_ingress_qps: Gunakan AverageValue. Nilai QPS dibagi dengan jumlah pod sebelum dibandingkan.
sls_ingress_latency_p9999: Gunakan Value. Nilai mentah digunakan tanpa pembagian.
Buat file bernama ingress-hpa.yaml dan tempel konten berikut ke dalamnya.
Tabel berikut menjelaskan parameter yang digunakan dalam konfigurasi HPA.
Nama Parameter
Wajib
Deskripsi
sls.ingress.route
Ya
Format:
<namespace>-<svc>-<port>.<namespace>adalah namespace tempat Ingress berada.<svc>adalah nama Service yang terkait dengan Ingress.<port>adalah nama port dari Service tersebut. Contoh: default-nginx-80.sls.logstore
Ya
Nama Logstore di Simple Log Service. Secara default,
sls.logstoreadalahnginx-ingress.sls.project
Ya
Nama Project di Simple Log Service. Secara default,
sls.projectadalahk8s-log-<cluster-id>.sls.internal.endpoint
Tidak
Tentukan apakah akses ke Simple Log Service dilakukan melalui jaringan internal atau jaringan publik. Nilai default adalah true.
true: Akses SLS melalui jaringan internal.
false: Akses SLS melalui jaringan publik.
Jalankan perintah berikut untuk membuat HPA.
kubectl apply -f ingress-hpa.yaml
Langkah 5: Verifikasi hasil
Setelah mengonfigurasi HPA, jalankan perintah berikut untuk melakukan uji stres.
ab -t 300 -c 10 <nama-domain-yang-dikonfigurasi-untuk-ingress> # Gunakan Apache Benchmark untuk mengirim 10 permintaan konkuren ke layanan yang diekspos oleh Ingress selama 300 detik.Verifikasi status penskalaan.
Jalankan perintah berikut untuk memeriksa status.
kubectl get hpa ingress-hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE ingress-hpa Deployment/nginx-deployment-basic 21/10 (avg) 2 10 10 7m49sJika nilai REPLICAS sama dengan nilai MAXPODS, penskalaan berhasil.
FAQ
Bagaimana cara mendapatkan metrik sls_ingress_qps menggunakan command line?
Anda dapat menjalankan perintah berikut untuk mengkueri data. Metrik permintaan sls_ingress_qps digunakan sebagai contoh.
kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/namespaces/*/sls_ingress_qps?labelSelector=sls.project={{SLS_Project}},sls.logstore=nginx-ingress
Pada perintah di atas, {{SLS_Project}} adalah nama project Simple Log Service yang sesuai dengan kluster ACK. Jika Anda tidak menentukan konfigurasi kustom, nama project default adalah k8s-log-{{ClusterId}}. {{ClusterId}} adalah ID kluster.
Jika hasil berikut dikembalikan:
Error from server: {
"httpCode": 400,
"errorCode": "ParameterInvalid",
"errorMessage": "key (slb_pool_name) is not config as key value config,if symbol : is in your log,please wrap : with quotation mark \"",
"requestID": "xxxxxxx"
}
Hal ini menunjukkan bahwa tidak ada data yang tersedia untuk metrik ini. Ini mungkin karena ALB Ingress belum dikonfigurasi, tetapi metrik sls_alb_ingress_qps digunakan untuk kueri data.
Jika hasil yang mirip dengan berikut dikembalikan:
{
"kind": "ExternalMetricValueList",
"apiVersion": "external.metrics.k8s.io/v1beta1",
"metadata": {},
"items": [
{
"metricName": "sls_ingress_qps",
"timestamp": "2025-02-26T16:45:00Z",
"value": "50", # Nilai QPS
"metricLabels": {
"sls.project": "your-sls-project-name",
"sls.logstore": "nginx-ingress"
}
}
]
}
Hal ini menunjukkan bahwa permintaan per detik (QPS) dari metrik eksternal Kubernetes ditemukan. value adalah nilai QPS.
Apa yang harus dilakukan jika kolom target bernilai unknown setelah menjalankan kubectl get hpa?
Anda dapat melakukan langkah-langkah berikut untuk mengatasi masalah ini.
-
Jalankan perintah
kubectl describe hpa <hpa_name>untuk mengidentifikasi penyebab HPA tidak berfungsi.-
Jika nilai
AbleToScalepada bidangConditionsadalahFalse, pastikan deployment berjalan normal. -
Jika nilai
ScalingActivepada bidangConditionsadalahFalse, lanjutkan ke langkah berikutnya.
-
-
Jalankan perintah
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/". Jika dikembalikan pesanError from server (NotFound): the server could not find the requested resource, periksa status startup alibaba-cloud-metrics-adapter.Jika alibaba-cloud-metrics-adapter berjalan normal, pastikan metrik HPA terkait dengan Ingress. Jika iya, Anda harus menerapkan komponen Simple Log Service terlebih dahulu. Untuk informasi selengkapnya, lihat Collect and analyze Nginx Ingress access logs.
-
Pastikan metrik HPA dimasukkan dengan benar. Format nilai untuk sls.ingress.route adalah
<namespace>-<svc>-<port>.-
namespace: Namespace tempat Ingress berada. -
svc: Nama Service yang sesuai dengan Ingress. -
port: Nama port dari Service yang sesuai dengan Ingress.
-
Bagaimana cara mengetahui nama metrik yang didukung oleh HPA?
Untuk informasi selengkapnya, lihat Alibaba Cloud HPA Metrics. Tabel berikut mencantumkan metrik umum.
|
Nama Metrik |
Deskripsi |
Parameter Tambahan |
|
sls_ingress_qps |
Permintaan per detik (QPS) untuk IngressRoute tertentu |
sls.ingress.route |
|
sls_alb_ingress_qps |
Permintaan per detik (QPS) untuk IngressRoute data ALB |
sls.ingress.route |
|
sls_ingress_latency_avg |
Latensi untuk semua permintaan |
sls.ingress.route |
|
sls_ingress_latency_p50 |
Latensi untuk 50% permintaan |
sls.ingress.route |
|
sls_ingress_latency_p95 |
Latensi untuk 95% permintaan |
sls.ingress.route |
|
sls_ingress_latency_p99 |
Latensi untuk 99% permintaan |
sls.ingress.route |
|
sls_ingress_latency_p9999 |
Latensi untuk 99,99% permintaan |
sls.ingress.route |
|
sls_ingress_inflow |
Bandwidth masuk untuk Ingress |
sls.ingress.route |
Bagaimana Menyesuaikan Setelah Menyesuaikan Format Log Nginx Ingress?
Untuk informasi selengkapnya tentang cara menggunakan metrik Ingress SLS untuk penyesuaian otomatis pod horizontal, lihat Horizontal pod autoscaling based on Nginx Ingress component metrics. Anda harus mengaktifkan dan mengonfigurasi log Nginx Ingress agar diingest ke Simple Log Service di kluster Anda.
-
Saat Anda membuat kluster, Simple Log Service diaktifkan secara default. Jika Anda mempertahankan pengaturan default, Anda dapat melihat laporan analisis log akses Nginx Ingress dan memantau status real-time Nginx Ingress di Simple Log Service console setelah kluster dibuat.
-
Jika Anda secara manual menonaktifkan Simple Log Service saat membuat kluster dan ingin menggunakan metrik Ingress SLS untuk penyesuaian otomatis pod horizontal setelah kluster dibuat, Anda harus mengaktifkan ulang atau mengonfigurasi Simple Log Service. Untuk informasi selengkapnya, lihat Collect and analyze Nginx Ingress access logs.
-
Untuk menyesuaikan format log Nginx Ingress, definisi sumber daya kustom (CRD) AliyunLogConfig yang diterapkan saat Simple Log Service pertama kali diaktifkan di kluster hanya berlaku untuk format log di Controller Ingress ACK default. Jika Anda mengubah format log akses Controller Ingress, Anda harus memodifikasi bagian
processor_regexdalam ekspresi reguler konfigurasi CRD. Untuk informasi selengkapnya, lihat Collect container logs using a DaemonSet and a CRD.
Gagal menarik gambar alibaba-cloud-metrics-adapter
Gejala
Saat Anda melakukan upgrade komponen ack-alibaba-cloud-metrics-adapter ke versi 1.3.7, terjadi error saat menarik gambar. Pesan error-nya sebagai berikut:
Gagal menarik gambar "registry-<region-id>-vpc.ack.aliyuncs.com/acs/alibaba-cloud-metrics-adapter-amd64:v0.2.9-ba634de-aliyun".
Penyebab
Komponen ack-alibaba-cloud-metrics-adapter tidak mendukung pembaruan langsung.
Solusi
Anda dapat melakukan langkah-langkah berikut untuk melakukan upgrade komponen.
-
Cadangkan konfigurasi komponen saat ini.
-
Uninstal versi lama komponen.
-
Instal versi terbaru komponen menggunakan konfigurasi cadangan.
Selama proses uninstall dan reinstall komponen, HPA terkait akan menjeda penskalaan karena pengambilan data pemantauan terhenti.