Topik ini menjelaskan masalah umum dan solusinya saat menggunakan fitur penskalaan workload, yang mencakup Horizontal Pod Autoscaler (HPA), CronHPA, dan metode lainnya.
Indeks
-
Mengapa kolom current pada data pemantauan HPA ditampilkan sebagai unknown?
-
Apa yang harus saya lakukan jika penskalaan HPA gagal karena pengambilan metrik tidak normal?
-
Mengapa HPA melakukan scale-out pod tambahan selama penyebaran bergulir?
-
Mengapa HPA tidak melakukan penskalaan meskipun ambang batas telah tercapai?
-
Apakah CronHPA kompatibel dengan HPA? Bagaimana cara membuatnya kompatibel?
-
Mengapa HPA melakukan penskalaan meskipun nilai log audit belum mencapai ambang batas?
-
Dapatkah saya menentukan urutan scale-in pod selama HPA melakukan scale-in?
-
Bagaimana cara menemukan nama metrik yang didukung oleh HPA?
-
Bagaimana cara beradaptasi setelah menyesuaikan format log NGINX Ingress?
-
Bagaimana cara mendapatkan metrik sls_ingress_qps melalui command line?
-
Bagaimana cara mengelola VPA yang diinstal dengan kubectl melalui Konsol?
Mengapa kolom current pada data pemantauan HPA ditampilkan sebagai unknown?
Jika kolom current pada data pemantauan HPA menunjukkan unknown, artinya kube-controller-manager tidak dapat mengakses sumber data pemantauan untuk mengambil data tersebut. Akibatnya, penskalaan HPA gagal.
Name: kubernetes-tutorial-deployment
Namespace: default
Labels: <none>
Annotations: <none>
CreationTimestamp: Mon, 10 Jun 2019 11:46:48 0530
Reference: Deployment/kubernetes-tutorial-deployment
Metrics: ( current / target )
resource cpu on pods (as a percentage of request): <unknown> / 2%
Min replicas: 1
Max replicas: 4
Deployment pods: 1 current / 0 desired
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale
ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API: the server is currently unable to handle the request (get pods.metrics.k8s.io)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedGetResourceMetric 3m3s (x1009 over 4h18m) horizontal-pod-autoscaler unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API: the server is currently unable to handle the request (get pods.metrics.k8s.io)
Penyebab 1: Sumber data Resource Metrics tidak tersedia
Jalankan perintah kubectl top pod untuk memeriksa apakah data dikembalikan. Jika tidak ada data yang dikembalikan untuk pod apa pun, jalankan perintah kubectl get apiservice untuk memeriksa status sumber data Resource Metrics. Contoh berikut menunjukkan data yang dikembalikan.
Jika API Service yang sesuai dengan v1beta1.metrics.k8s.io bukan kube-system/metrics-server, periksa apakah telah ditimpa oleh instalasi Prometheus Operator. Jika iya, Anda dapat menerapkan templat YAML berikut untuk memulihkannya.
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
name: v1beta1.metrics.k8s.io
spec:
service:
name: metrics-server
namespace: kube-system
group: metrics.k8s.io
version: v1beta1
insecureSkipTLSVerify: true
groupPriorityMinimum: 100
versionPriority: 100
Jika masalah tetap berlanjut, pastikan komponen metrics-server telah diinstal melalui halaman Operations > Add-ons kluster Anda. Untuk informasi lebih lanjut, lihat metrics-server.
Penyebab 2: Data tidak dapat diambil selama penyebaran bergulir atau scale-out
Secara default, siklus pengumpulan metrics-server adalah 1 menit. Setelah scale-out atau pembaruan, metrics-server tidak dapat mengambil data pemantauan untuk periode singkat. Anda dapat memeriksa kembali sekitar 2 menit setelah scale-out atau pembaruan selesai.
Penyebab 3: Kolom request tidak dikonfigurasi
Secara default, HPA menggunakan rumus actual utilization/request untuk menghitung nilai pemanfaatan. Periksa apakah kolom resource pada pod berisi kolom request.
Penyebab 4: Nama metrik salah
Periksa kebenaran nama metrik, termasuk huruf kapitalnya. Misalnya, jika Anda memasukkan CPU alih-alih metrik cpu yang didukung HPA, kolom current pada data pemantauan akan menunjukkan unknown.
Apa yang harus dilakukan jika penskalaan HPA gagal karena pengambilan metrik tidak normal?
Penskalaan HPA dapat gagal karena pengambilan metrik tidak normal, yang menyebabkan kolom current pada data pemantauan HPA menunjukkan unknown. Dalam kasus ini, HPA tidak dapat memperoleh metrik yang diperlukan untuk keputusan penskalaan dan tidak dapat menyesuaikan jumlah replika. Untuk informasi lebih lanjut tentang cara memecahkan masalah ini, lihat FAQ Auto Scaling Node.
Mengapa HPA melakukan scale-out pod tambahan selama penyebaran bergulir?
Selama penyebaran bergulir, Controller Manager komunitas melakukan zero-padding untuk pod yang tidak memiliki data pemantauan. Hal ini dapat menyebabkan HPA melakukan scale-out pod tambahan. Anda dapat menggunakan konfigurasi berikut untuk mencegah masalah ini.
Konfigurasi tingkat kluster
Upgrade ke versi terbaru komponen metrics-server yang disediakan oleh ACK dan aktifkan sakelar dalam parameter startup metrics-server untuk mencegah scale-out pod tambahan.
Sakelar ini bersifat global dan berlaku untuk semua workload terkait dalam kluster setelah diaktifkan.
# Tambahkan opsi berikut ke parameter startup metrics-server.
--enable-hpa-rolling-update-skipped=true
Konfigurasi tingkat workload
Jika Anda hanya ingin mencegah scale-out pod tambahan untuk workload tertentu, gunakan salah satu dari dua metode berikut.
-
Metode 1: Tambahkan anotasi berikut ke templat workload yang ditentukan untuk sementara menjeda evaluasi HPA selama penyebaran bergulir.
# Tambahkan anotasi ke spec.template.metadata.annotations workload untuk sementara menjeda evaluasi HPA selama penyebaran bergulir. HPARollingUpdateSkipped: "true" -
Metode 2: Tambahkan anotasi berikut ke templat workload yang ditentukan untuk melewati periode ramp-up yang dikonfigurasi di awal penyebaran aplikasi.
# Tambahkan anotasi ke spec.template.metadata.annotations workload untuk melewati periode ramp-up yang dikonfigurasi di awal penyebaran aplikasi. HPAScaleUpDelay: 3m # 3m adalah contoh. Atur periode waktu spesifik sesuai kebutuhan.
Mengapa HPA tidak melakukan penskalaan meskipun ambang batas telah tercapai?
Penskalaan HPA dipicu ketika penggunaan CPU atau memori melebihi atau turun di bawah ambang batas. HPA juga mempertimbangkan apakah tindakan scale-out atau scale-in akan segera memicu peristiwa penskalaan lainnya guna mengurangi osilasi.
Misalnya, jika ambang batas scale-out Anda adalah 80% dan dua pod saat ini memiliki penggunaan CPU 70%, HPA tidak akan melakukan scale-in. Hal ini karena scale-in dapat menyebabkan penggunaan CPU satu pod melebihi 80%, yang akan memicu scale-out dan menyebabkan osilasi.
Bagaimana cara mengonfigurasi siklus pengumpulan HPA?
Untuk versi metrics-server yang lebih baru dari v0.2.1-b46d98c-aliyun, Anda dapat mengatur parameter --metric-resolution dalam parameter startup metrics-server. Misalnya, atur parameter menjadi --metric-resolution=15s.
Apakah CronHPA kompatibel dengan HPA? Bagaimana cara membuatnya kompatibel?
CronHPA kompatibel dengan HPA. Container Service for Kubernetes (ACK) mengatur scaleTargetRef dalam objek CronHPA ke objek HPA. CronHPA kemudian menggunakan objek HPA untuk menemukan scaleTargetRef aktual, sehingga dapat memahami status terkini HPA. CronHPA tidak langsung menyesuaikan jumlah replika untuk deployment, melainkan beroperasi melalui HPA. Pendekatan ini menghindari konflik antara HPA dan CronHPA. Untuk informasi lebih lanjut tentang cara memastikan kompatibilitas CronHPA dan HPA, lihat Mewujudkan kolaborasi CronHPA dan HPA.
Bagaimana mencegah HPA melakukan scale-out pod tambahan akibat penggunaan CPU atau memori tinggi selama startup?
Untuk bahasa dan framework yang memerlukan periode ramp-up, seperti Java, penggunaan CPU dan memori dapat melonjak selama beberapa menit saat kontainer dimulai. Hal ini dapat menyebabkan HPA terpicu secara salah. Untuk mencegah pemicuan salah, upgrade komponen metrics-server yang disediakan oleh ACK ke versi 0.3.9.6 atau lebih baru dan tambahkan sakelar ke anotasi pod. Untuk informasi lebih lanjut tentang cara mengupgrade komponen metrics-server, lihat Upgrade komponen metrics-server sebelum Anda mengupgrade kluster ke v1.12.
File YAML berikut memberikan contoh deployment dengan sakelar yang ditambahkan untuk mencegah pemicuan salah.
Mengapa HPA melakukan penskalaan meskipun nilai log audit belum mencapai ambang batas?
Penyebab
Controller horizontal pod autoscaler menghitung rasio penskalaan berdasarkan metrik saat ini dan yang diinginkan menggunakan rumus berikut: jumlah replika yang diinginkan = ceil (jumlah replika saat ini × (metrik saat ini / metrik yang diinginkan)).
Rumus tersebut menunjukkan bahwa akurasi jumlah replika yang diinginkan bergantung pada akurasi jumlah replika saat ini, nilai metrik saat ini, dan nilai metrik yang diinginkan. Ambil metrik resource, yang banyak digunakan dalam HPA, sebagai contoh. Saat HPA mengambil jumlah replika saat ini, pertama-tama HPA memperoleh subresource scale (subResources) dari objek yang didefinisikan oleh scaleTargetRef. Kemudian, HPA mengonversi nilai Selector dalam status dari scale menjadi label selector dan menggunakannya sebagai kondisi untuk mencocokkan pod. Jika pod yang diambil berdasarkan kondisi ini tidak semuanya milik objek yang didefinisikan dalam scaleTargetRef, jumlah replika yang diinginkan yang dihitung mungkin tidak sesuai harapan. Misalnya, scale-out dapat dipicu meskipun metrik real-time berada di bawah ambang batas.
Daftar berikut menjelaskan alasan umum ketidakakuratan pencocokan pod:
-
Penyebaran bergulir.
-
Pod lain yang tidak termasuk dalam objek yang didefinisikan dalam scaleTargetRef memiliki label yang sama. Anda dapat menjalankan perintah berikut untuk memeriksa pod lain tersebut.
kubectl get pods -n {nama namespace} -l {nilai status.Selector dari sub-resource scale}
Solusi
-
Untuk masalah terkait penyebaran bergulir, lihat FAQ Auto Scaling Node.
-
Jika pod lain yang tidak termasuk dalam objek yang didefinisikan dalam scaleTargetRef memiliki label yang sama, identifikasi pod tersebut. Jika masih diperlukan, ubah labelnya; jika tidak, hapus pod tersebut.
Dapatkah saya menentukan urutan scale-in pod selama HPA melakukan scale-in?
HPA dapat secara otomatis menambah atau mengurangi jumlah pod berdasarkan metrik yang ditentukan, tetapi tidak dapat menentukan pod mana yang dihentikan terlebih dahulu. Urutan penghentian pod, periode shutdown yang mulus, dan atribut lainnya ditentukan oleh controller yang mengelola pod tersebut.
Dalam skenario yang melibatkan ECS dan ECI, atau penyebaran hybrid multi-node pool, Anda dapat mengonfigurasi kebijakan resource kustom (ResourcePolicy) untuk aplikasi Anda guna menentukan prioritas scale-in. HPA dapat bekerja sama dengan Deployment dan kebijakan resource kustom (ResourcePolicy) untuk memprioritaskan pelepasan resource node ECI selama scale-in, diikuti oleh resource ECS. Untuk informasi lebih lanjut, lihat Penjadwalan prioritas resource elastis kustom.
Apa arti satuan metrik pemanfaatan HPA?
Metrik pemanfaatan biasanya berupa bilangan bulat tanpa satuan atau bilangan bulat dalam satuan m. Konversinya adalah 1000m = 1. Misalnya, nilai tcp_connection_counts sebesar 70000m setara dengan 70.
Apa yang harus dilakukan jika kolom target menunjukkan unknown setelah menjalankan perintah kubectl get hpa?
Lakukan langkah-langkah berikut untuk mengatasi masalah ini.
-
Jalankan perintah
kubectl describe hpa <hpa_name>untuk mengidentifikasi penyebab HPA tidak berfungsi.-
Jika nilai
AbleToScaledalam kolomConditionsadalahFalse, pastikan deployment berjalan normal. -
Jika nilai
ScalingActivedalam kolomConditionsadalahFalse, lanjutkan ke langkah berikutnya.
-
-
Jalankan perintah
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/". Jika responsnya adalahError 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 terlebih dahulu menerapkan komponen Simple Log Service. Untuk informasi lebih lanjut, lihat Kumpulkan dan analisis log akses Nginx Ingress.
-
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 untuk Service yang sesuai dengan Ingress.
-
Bagaimana cara menemukan nama metrik yang didukung oleh HPA?
Untuk informasi lebih lanjut, lihat Metrik HPA Alibaba Cloud. 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 Beradaptasi Setelah Menyesuaikan Format Log Nginx Ingress?
Untuk informasi lebih lanjut tentang cara menggunakan metrik Ingress SLS untuk penskalaan pod horizontal, lihat Penskalaan pod horizontal berdasarkan metrik komponen Nginx Ingress. 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 Konsol Simple Log Service setelah kluster dibuat.
-
Jika Anda secara manual menonaktifkan Simple Log Service saat membuat kluster dan ingin menggunakan metrik Ingress SLS untuk penskalaan pod horizontal setelah kluster dibuat, Anda harus mengaktifkan ulang atau mengonfigurasi Simple Log Service. Untuk informasi lebih lanjut, lihat Kumpulkan dan analisis log akses Nginx Ingress.
-
Untuk menyesuaikan format log Nginx Ingress, definisi resource 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 lebih lanjut, lihat Kumpulkan log kontainer menggunakan DaemonSet dan CRD.
Bagaimana cara mendapatkan metrik sls_ingress_qps melalui 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
Dalam perintah di atas, {{SLS_Project}} adalah nama proyek Simple Log Service yang sesuai dengan kluster ACK. Jika Anda tidak menentukan konfigurasi kustom, nama proyek 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 tidak 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) metrik eksternal Kubernetes ditemukan. value adalah nilai QPS.
Gagal menarik gambar alibaba-cloud-metrics-adapter
Gejala
Saat Anda mengupgrade komponen ack-alibaba-cloud-metrics-adapter ke versi 1.3.7, terjadi kesalahan saat menarik gambar. Pesan kesalahan 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
Lakukan langkah-langkah berikut untuk mengupgrade komponen.
-
Buat cadangan konfigurasi komponen saat ini.
-
Uninstal versi lama komponen.
-
Instal versi terbaru komponen menggunakan konfigurasi cadangan.
Selama proses uninstal dan instal ulang komponen, HPA terkait akan menjeda penskalaan karena pengambilan data pemantauan terhenti.