Menyebarkan beberapa instans meningkatkan stabilitas aplikasi tetapi dapat menyebabkan sumber daya menganggur dan biaya kluster yang lebih tinggi. Penskalaan manual membutuhkan banyak tenaga dan sering kali terlambat. Anda dapat menggunakan Nginx Ingress untuk menerapkan Horizontal Pod Autoscaler (HPA) pada beberapa aplikasi. HPA secara dinamis menyesuaikan jumlah replika Pod berdasarkan beban kerja, sehingga menjamin stabilitas aplikasi dan respons yang cepat, sekaligus mengoptimalkan pemanfaatan sumber daya serta mengurangi biaya. Topik ini menjelaskan cara menggunakan Nginx Ingress untuk menerapkan HPA pada beberapa aplikasi.
Ingress meneruskan permintaan eksternal ke Layanan di dalam kluster. Layanan tersebut kemudian mengirimkan permintaan ke Pod. Di lingkungan produksi, Anda dapat mengonfigurasi penskalaan otomatis berdasarkan volume permintaan yang diekspos oleh metrik nginx_ingress_controller_requests. Metrik bawaan dari Nginx Ingress Controller ini dapat digunakan untuk menerapkan HPA. Nginx Ingress Controller di kluster ACK merupakan versi yang ditingkatkan dari edisi komunitas dan lebih mudah digunakan.
Persiapan
Sebelum menggunakan Nginx Ingress untuk menerapkan Horizontal Pod Autoscaling (HPA) pada beberapa aplikasi, Anda harus mengonversi metrik Alibaba Cloud Prometheus menjadi metrik yang kompatibel dengan HPA.
Sebarkan komponen pemantauan Alibaba Cloud Prometheus. Untuk informasi selengkapnya, lihat Menggunakan Alibaba Cloud Prometheus untuk pemantauan.
Sebarkan komponen ack-alibaba-cloud-metrics-adapter dan konfigurasikan bidang
prometheus.url-nya.Instal alat uji stres Apache Benchmark.
Dalam tutorial ini, Anda akan membuat dua Penyebaran (Deployment) beserta Layanan (Service) yang sesuai, serta mengonfigurasi sebuah Ingress dengan jalur akses berbeda untuk mengarahkan lalu lintas eksternal. Selanjutnya, Anda akan mengonfigurasi HPA untuk aplikasi berdasarkan metrik nginx_ingress_controller_requests dan menggunakan bidang selector.matchLabels.service untuk memfilter metrik tersebut. Hal ini memungkinkan Pod melakukan penskalaan masuk dan keluar sebagai respons terhadap perubahan lalu lintas.
Langkah 1: Membuat aplikasi dan layanan
Gunakan file YAML berikut untuk membuat Penyebaran aplikasi dan Layanan yang sesuai.
Buat file bernama nginx1.yaml dan salin konten berikut ke dalamnya.
Jalankan perintah berikut untuk membuat aplikasi test-app dan Layanan yang sesuai.
kubectl apply -f nginx1.yamlBuat file bernama nginx2.yaml dan salin konten berikut ke dalamnya.
Jalankan perintah berikut untuk membuat aplikasi sample-app dan Layanan yang sesuai.
kubectl apply -f nginx2.yaml
Langkah 2: Membuat Ingress
Buat file bernama ingress.yaml dan salin konten berikut ke dalamnya.
Jalankan perintah berikut untuk menyebarkan sumber daya Ingress.
kubectl apply -f ingress.yamlJalankan perintah berikut untuk mengambil sumber daya Ingress.
kubectl get ingress -o wideKeluaran yang diharapkan:
NAME CLASS HOSTS ADDRESS PORTS AGE test-ingress nginx test.example.com 10.XX.XX.10 80 55sSetelah penerapan berhasil, Anda dapat mengakses host menggunakan jalur
/dan/home. Pengontrol NGINX Ingress secara otomatis mengarahkan permintaan Anda ke aplikasi sample-app dan test-app berdasarkan jalur permintaan. Anda dapat mengkueri metriknginx_ingress_controller_requestsdi Alibaba Cloud Prometheus untuk mengambil informasi tentang permintaan ke setiap aplikasi.
Langkah 3: Mengonversi metrik Prometheus menjadi metrik yang kompatibel dengan HPA
Ubah file adapter-config
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan lalu klik namanya. Di panel navigasi sebelah kiri, pilih .
Di halaman Helm, klik ack-alibaba-cloud-metrics-adapter. Di bagian Resources, klik adapter-config, lalu klik Edit YAML di pojok kanan atas halaman.
Ganti nilai bidang yang sesuai dengan nilai dalam kode berikut, lalu klik OK di bagian bawah halaman.
Untuk informasi selengkapnya, lihat Penyesuaian otomatis Pod horizontal berdasarkan metrik Alibaba Cloud Prometheus.
rules: - metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) name: as: ${1}_per_second matches: ^(.*)_requests resources: namespaced: false seriesQuery: nginx_ingress_controller_requests
Lihat keluaran metrik
Jalankan perintah berikut untuk melihat keluaran metrik.
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/*/nginx_ingress_controller_per_second" | jq .Hasil kueri adalah sebagai berikut:
{
"kind": "ExternalMetricValueList",
"apiVersion": "external.metrics.k8s.io/v1beta1",
"metadata": {},
"items": [
{
"metricName": "nginx_ingress_controller_per_second",
"metricLabels": {},
"timestamp": "2025-07-25T07:56:04Z",
"value": "0"
}
]
}Langkah 4: Membuat HPA
Buat file bernama hpa.yaml dan salin konten berikut ke dalamnya.
Jalankan perintah berikut untuk menyebarkan HPA untuk aplikasi sample-app dan test-app.
kubectl apply -f hpa.yamlJalankan perintah berikut untuk memeriksa status penerapan HPA.
kubectl get hpaKeluaran yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE sample-hpa Deployment/sample-app 0/30 (avg) 1 10 1 74s test-hpa Deployment/test-app 0/30 (avg) 1 10 1 59m
Langkah 5: Verifikasi hasil
Setelah HPA diterapkan, gunakan alat Apache Benchmark untuk menjalankan uji stres. Amati apakah aplikasi melakukan penskalaan keluar seiring peningkatan jumlah permintaan.
Jalankan perintah berikut untuk melakukan uji stres pada jalur
/homehost.ab -c 50 -n 5000 test.example.com/homeJalankan perintah berikut untuk memeriksa status HPA.
kubectl get hpaKeluaran yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE sample-hpa Deployment/sample-app 0/30 (avg) 1 10 1 22m test-hpa Deployment/test-app 22096m/30 (avg) 1 10 3 80mJalankan perintah berikut untuk melakukan uji stres pada jalur root host.
ab -c 50 -n 5000 test.example.com/Jalankan perintah berikut untuk memeriksa status HPA.
kubectl get hpaKeluaran yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE sample-hpa Deployment/sample-app 27778m/30 (avg) 1 10 2 38m test-hpa Deployment/test-app 0/30 (avg) 1 10 1 96mHasil menunjukkan bahwa aplikasi berhasil melakukan penskalaan keluar ketika volume permintaan melebihi ambang batas.
Referensi
Pengeimbangan multi-zona merupakan metode penerapan umum untuk layanan intensif data dalam skenario ketersediaan tinggi. Ketika beban kerja meningkat, aplikasi yang menggunakan kebijakan penjadwalan seimbang multi-zona harus secara otomatis melakukan penskalaan keluar instans di beberapa zona untuk memenuhi kebutuhan penjadwalan kluster. Untuk informasi selengkapnya, lihat Menerapkan penskalaan elastis cepat dan simultan di beberapa zona.
Anda dapat membuat citra sistem operasi kustom untuk menyederhanakan penskalaan elastis dalam skenario kompleks. Untuk informasi selengkapnya, lihat Optimasi elastis dengan citra kustom.