Auto scaling yang presisi membantu meningkatkan waktu respons dan efisiensi sumber daya di kluster Anda saat menghadapi lonjakan lalu lintas. Topik ini menjelaskan cara menggunakan Kubernetes External Metrics API untuk mengintegrasikan metrik bisnis utama, seperti laju permintaan HTTP dan kueri per detik (QPS) Ingress, guna mengimplementasikan kebijakan penskalaan otomatis.
Topik ini menunjukkan cara mengonfigurasi Horizontal Pod Autoscaler (HPA) dengan membuat deployment, layanan, dan Ingress bernama Nginx, sehingga memungkinkan penerapan penyesuaian otomatis pod horizontal berdasarkan metrik QPS Ingress dari Simple Log Service (SLS).
Langkah 1: Deploy komponen ack-alibaba-cloud-metrics-adapter
Komponen ack-alibaba-cloud-metrics-adapter memungkinkan Kubernetes memperoleh data pemantauan untuk produk Alibaba Cloud, seperti Elastic Compute Service (ECS), Server Load Balancer (SLB), dan ApsaraDB RDS (RDS), melalui External Metrics API, sehingga meningkatkan kemampuan pemantauan dan auto scaling kluster Anda.
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih .
Pada halaman Helm, klik Create. Konfigurasikan parameter Basic Information, pilih ack-alibaba-cloud-metrics-adapter, lalu klik Next.
Komponen ack-alibaba-cloud-metrics-adapter tidak mendukung upgrade langsung. Anda harus mencopot komponen tersebut terlebih dahulu, lalu menginstal versi terbarunya.
Langkah 2: Buat aplikasi dan layanan
Buat file bernama nginx-test.yaml.
Jalankan perintah berikut untuk membuat deployment aplikasi dan layanan yang sesuai.
kubectl apply -f nginx-test.yaml
Langkah 3: Buat Ingress
Di panel navigasi kiri halaman manajemen kluster, pilih . Di pojok kiri atas halaman Ingresses, klik Create Ingress.
Pada panel Create, masukkan informasi yang diperlukan, lalu klik OK. Setelah Ingress dibuat, Anda akan diarahkan ke halaman Ingresses.
Di kolom Name, klik nama Ingress untuk melihat informasi aturan routing-nya. Untuk informasi selengkapnya tentang Ingress, lihat Ingress management.
Langkah 4: Konfigurasi HPA
Anda dapat mengonfigurasi dua metrik dari proyek SLS dalam HPA untuk penskalaan, yaitu sls_ingress_qps dan sls_ingress_latency_p9999.
sls_ingress_qps: Atur ke AverageValue. Artinya, QPS dibagi dengan jumlah pod sebelum dievaluasi.
sls_ingress_latency_p9999: Atur ke Value. Artinya, nilai tersebut tidak dibagi dengan jumlah pod.
Buat file bernama ingress-hpa.yaml dan salin konten berikut ke dalamnya.
Konfigurasi Horizontal Pod Autoscaler (HPA) mencakup parameter berikut.
Nama Parameter
Wajib
Deskripsi
sls.ingress.route
Ya
Format parameternya adalah
<namespace>-<svc>-<port>.<namespace>adalah namespace tempat Ingress berada.<svc>adalah nama layanan yang sesuai dengan Ingress.<port>adalah nama port layanan yang sesuai dengan Ingress. Contoh: default-nginx-80.sls.logstore
Ya
Nama Logstore di Simple Log Service. Di kluster, nilai default
sls.logstoreadalahnginx-ingress.sls.project
Ya
Nama proyek di Simple Log Service. Di kluster, nilai default
sls.projectadalahk8s-log-Cluster ID.sls.internal.endpoint
Tidak
Menentukan apakah akses ke Simple Log Service dilakukan melalui jaringan pribadi atau Internet. Nilai default adalah true.
true: Akses SLS melalui jaringan pribadi.
false: Akses SLS melalui Internet.
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 <domain_name_configured_for_ingress> # Gunakan Apache Benchmark untuk melakukan uji stres pada layanan yang diekspos oleh Ingress. Atur konkurensi ke 10 dan durasi ke 300 detik.Verifikasi status penskalaan.
Di panel navigasi kiri konsol, klik Clusters. Pada halaman Clusters, temukan kluster target, lalu pilih di kolom Actions.
Jalankan perintah berikut untuk memeriksa status penskalaan.
kubectl get hpa ingress-hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE ingress-hpa Depolyment/nginx-deployment-basic 21/10 (avg) 2 10 10 7m49sPenskalaan berhasil jika nilai REPLICAS sama dengan nilai MAXPODS.
FAQ
Bagaimana cara mendapatkan metrik QPS sls_ingress_qps dari command line?
Anda dapat mengkueri metrik tersebut dari command line. Contoh berikut menunjukkan cara mengkueri metrik `sls_ingress_qps`.
kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/namespaces/*/sls_ingress_qps?labelSelector=sls.project={{SLS_Project}},sls.logstore=nginx-ingressDalam perintah tersebut, {{SLS_Project}} menentukan nama proyek SLS yang sesuai dengan kluster ACK Anda. Jika Anda belum menyesuaikan konfigurasi, nama default-nya adalah k8s-log-{{ClusterId}}, dengan {{ClusterId}} sebagai ID kluster Anda.
Jika perintah mengembalikan hasil berikut:
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"
}Hasil ini menunjukkan bahwa tidak ada data yang tersedia untuk metrik tersebut. Hal ini mungkin karena Anda mengkueri metrik `sls_alb_ingress_qps` tetapi belum mengonfigurasi ALB Ingress.
Jika perintah mengembalikan hasil yang mirip dengan berikut:
{
"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"
}
}
]
}Hasil ini menunjukkan bahwa metrik eksternal Kubernetes untuk QPS ditemukan. Bidang value merepresentasikan nilai QPS.
Apa yang harus saya lakukan jika perintah kubectl get hpa mengembalikan target sebagai unknown?
Ikuti langkah-langkah berikut untuk mengatasi masalah tersebut.
Jalankan perintah
kubectl describe hpa <hpa_name>untuk menemukan penyebab kegagalan Horizontal Pod Autoscaler (HPA).Jika bidang
Conditionsmenunjukkan bahwaAbleToScalebernilaiFalse, verifikasi bahwa deployment sudah benar.Jika bidang
Conditionsmenunjukkan bahwaScalingActivebernilaiFalse, lanjutkan ke langkah berikutnya.
Jalankan perintah
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/". Jika perintah mengembalikanError from server (NotFound): the server could not find the requested resource, periksa status komponen alibaba-cloud-metrics-adapter.Jika status alibaba-cloud-metrics-adapter normal, periksa apakah metrik HPA terkait dengan Ingress. Jika metrik tersebut terkait dengan Ingress, Anda harus terlebih dahulu deploy komponen Simple Log Service. Untuk informasi selengkapnya, lihat Collect and analyze Nginx Ingress access logs.
Verifikasi bahwa metrik HPA dimasukkan dengan benar. Nilai untuk sls.ingress.route harus menggunakan format
<namespace>-<svc>-<port>.namespace: Namespace Ingress.svc: Nama layanan Ingress.port: Nama port layanan 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 | 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 Ingress. | sls.ingress.route |
Bagaimana cara menyesuaikan sistem setelah menyesuaikan format log Nginx Ingress?
Untuk informasi selengkapnya tentang cara menggunakan metrik Ingress Simple Log Service (SLS) untuk penyesuaian otomatis pod horizontal, lihat Use metrics from Alibaba Cloud components for horizontal pod autoscaling. Anda harus mengaktifkan dan mengonfigurasi pengumpulan log Nginx Ingress untuk SLS di kluster Anda dengan benar.
Saat 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.
Jika Anda menonaktifkan Simple Log Service saat membuat kluster, Anda harus mengaktifkan ulang atau mengonfigurasinya untuk menggunakan metrik Ingress SLS guna penyesuaian otomatis pod horizontal. Untuk informasi selengkapnya, lihat Collect and analyze Nginx Ingress access logs.
Untuk menyesuaikan format log Nginx Ingress, Anda harus memodifikasi bagian
processor_regexdari ekspresi reguler dalam konfigurasi Custom Resource Definition (CRD). Hal ini karena CRD AliyunLogConfig, yang dideploy saat Anda mengaktifkan Simple Log Service di kluster, hanya mendukung format log default dari controller Ingress ACK. Untuk informasi selengkapnya, lihat Use a DaemonSet CRD to collect container logs.
Gagal menarik citra alibaba-cloud-metrics-adapter
Gejala
Saat Anda melakukan upgrade komponen ack-alibaba-cloud-metrics-adapter ke versi 1.3.7, terjadi kesalahan saat menarik citra. Pesan kesalahan sebagai berikut:
Gagal menarik citra "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 saat ini tidak mendukung upgrade langsung.
Solusi
Ikuti langkah-langkah berikut untuk melakukan upgrade komponen.
Buat cadangan konfigurasi komponen saat ini.
Uninstal versi lama komponen tersebut.
Instal versi terbaru komponen menggunakan konfigurasi cadangan.
Selama proses uninstal dan instal ulang komponen, perilaku penskalaan HPA yang terkait dijeda karena pengambilan data pemantauan dihentikan.