Topik ini membahas masalah umum dan menyediakan solusi untuk fitur penskalaan workload, yang mencakup Horizontal Pod Autoscaler (HPA) dan CronHPA.
Indeks
Mengapa kolom current untuk data pemantauan HPA menampilkan unknown?
Apa yang harus saya lakukan jika penskalaan HPA gagal dan pengambilan metrik tidak normal?
Mengapa HPA melakukan scale out Pod tambahan selama pembaruan 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 dalam log audit tidak mencapai ambang batas?
Dapatkah saya mengontrol urutan scale-in Pod saat HPA melakukan penskalaan turun?
Bagaimana cara menemukan nama metrik yang didukung oleh HPA?
Bagaimana cara menyesuaikan format log Nginx Ingress kustom?
Bagaimana cara mengambil metrik sls_ingress_qps dari command line?
Bagaimana cara mengelola VPA yang diinstal menggunakan kubectl dari Konsol?
Mengapa kolom current untuk data pemantauan HPA menampilkan unknown?
Jika kolom current untuk data pemantauan HPA menampilkan unknown, berarti kube-controller-manager tidak dapat mengakses sumber data pemantauan untuk mengambil data yang diperlukan. Akibatnya, penskalaan HPA akan 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
Pertama, jalankan perintah kubectl top pod untuk memeriksa apakah data dikembalikan. Jika tidak ada data yang dikembalikan untuk semua Pod, jalankan kubectl get apiservice untuk memeriksa status sumber data yang menyediakan Resource Metrics. Berikut adalah contoh output.
Jika API Service yang sesuai dengan v1beta1.metrics.k8s.io bukan kube-system/metrics-server, periksa apakah hal ini disebabkan oleh penimpaan selama instalasi operator prometheus. Jika masalah disebabkan oleh penimpaan, Anda dapat menerapkan templat YAML berikut untuk memulihkan layanan tersebut.
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: 100Jika bukan penyebab tersebut, pastikan komponen metrics-server telah diinstal pada halaman Component Management di bawah Operations Management di Konsol kluster. Untuk informasi lebih lanjut, lihat metrics-server.
Penyebab 2: Data tidak dapat diambil selama penyebaran bergulir atau scale-out
Periode pengumpulan data default untuk metrics-server adalah 1 menit. Untuk waktu singkat setelah scale-out atau pembaruan, metrics-server tidak dapat mengambil data pemantauan. Periksa kembali sekitar 2 menit setelah scale-out atau pembaruan.
Penyebab 3: Kolom request tidak dikonfigurasi
Secara default, HPA menghitung nilai penggunaan menggunakan rumus actual utilization/request. Periksa apakah kolom resource pada Pod berisi kolom request.
Penyebab 4: Nama metrik salah
Periksa apakah nama metrik benar, termasuk huruf kapitalnya. Misalnya, jika Anda salah mengeja metrik yang didukung HPA cpu menjadi CPU, kolom current untuk data pemantauan akan menampilkan unknown.
Apa yang harus saya lakukan jika penskalaan HPA gagal dan pengambilan metrik tidak normal?
Penskalaan HPA dapat gagal jika pengambilan metrik tidak normal. Dalam kasus ini, kolom current untuk data pemantauan HPA akan menampilkan unknown. HPA tidak dapat mengambil metrik yang diperlukan untuk membuat keputusan penskalaan dan tidak dapat menyesuaikan jumlah Pod. Untuk informasi lebih lanjut tentang cara memecahkan masalah dan menemukan solusi, lihat FAQ autoscaling node.
Mengapa HPA melakukan scale out Pod tambahan selama pembaruan bergulir?
Selama penyebaran bergulir, Controller Manager komunitas mengisi nol untuk data pemantauan Pod yang tidak memiliki data. Hal ini kadang-kadang menyebabkan HPA melakukan scale out Pod tambahan, suatu masalah yang dikenal sebagai jitter penskalaan. Anda dapat menggunakan konfigurasi berikut untuk mencegah hal ini.
Konfigurasi tingkat kluster
Anda dapat meningkatkan ke versi terbaru metrics-server yang disediakan oleh ACK dan mengaktifkan sakelar dalam parameter startup metrics-server untuk mencegah jitter penskalaan.
Ini adalah sakelar global. Setelah Anda mengaturnya, ini akan memengaruhi semua workload terkait dalam kluster.
# Tambahkan opsi berikut ke parameter startup metrics-server.
--enable-hpa-rolling-update-skipped=true Konfigurasi tingkat workload
Jika Anda hanya ingin mencegah jitter penskalaan untuk workload tertentu, Anda dapat menggunakan 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 ini 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 ditentukan pada awal penerapan aplikasi.
# Tambahkan anotasi ini ke spec.template.metadata.annotations workload untuk melewati periode ramp-up yang ditentukan pada awal penerapan aplikasi. HPAScaleUpDelay: 3m # 3m adalah contoh. Atur periode sesuai kebutuhan.
Mengapa HPA tidak melakukan penskalaan meskipun ambang batas telah tercapai?
HPA memicu peristiwa penskalaan berdasarkan lebih dari sekadar penggunaan CPU atau memori yang melebihi ambang batas. HPA juga mempertimbangkan apakah tindakan scale-out atau scale-in akan segera memicu tindakan penskalaan sebaliknya untuk mencegah jitter penskalaan.
Misalnya, asumsikan ambang batas scale-out Anda diatur ke 80%. Jika Anda memiliki dua Pod dan keduanya berada pada penggunaan CPU 70%, HPA tidak akan melakukan scale-in. Hal ini karena scale-in menjadi satu Pod kemungkinan besar akan mendorong penggunaan CPU-nya di atas 80%, yang kemudian akan memicu scale-out. Ini mencegah penskalaan bolak-balik yang cepat.
Bagaimana cara mengonfigurasi periode pengumpulan data 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. Contohnya: --metric-resolution=15s.
Apakah CronHPA kompatibel dengan HPA? Bagaimana cara membuatnya kompatibel?
CronHPA kompatibel dengan HPA. Di Container Service for Kubernetes (ACK), scaleTargetRef dalam objek CronHPA diatur ke objek HPA. CronHPA kemudian menemukan scaleTargetRef aktual melalui objek HPA, sehingga mengetahui status terkini HPA. CronHPA tidak langsung menyesuaikan jumlah replika dalam deployment. Sebaliknya, CronHPA beroperasi pada deployment melalui HPA. Hal ini mencegah konflik antara CronHPA dan HPA. Untuk informasi lebih lanjut tentang mengkoordinasikan CronHPA dan HPA, lihat Koordinasikan CronHPA dan HPA.
Bagaimana cara mengatasi masalah scale out Pod tambahan akibat penggunaan CPU atau memori yang tinggi saat HPA dimulai?
Untuk bahasa dan framework yang memerlukan periode pemanasan, seperti Java, penggunaan CPU dan memori dapat melonjak selama beberapa menit saat kontainer dimulai. Hal ini dapat menyebabkan HPA terpicu secara salah. Untuk mengatasi masalah ini, tingkatkan komponen metrics-server di ACK ke versi 0.3.9.6 atau lebih baru dan tambahkan anotasi ke Pod untuk mencegah pemicuan palsu. Untuk informasi lebih lanjut tentang peningkatan komponen metrics-server, lihat Tingkatkan komponen metrics-server sebelum meningkatkan kluster ke v1.12.
Berikut adalah contoh file YAML untuk deployment yang mencakup anotasi untuk mencegah pemicuan palsu.
Mengapa HPA melakukan penskalaan meskipun nilai dalam log audit tidak mencapai ambang batas?
Penyebab
HPA menghitung jumlah replika yang diinginkan berdasarkan nilai metrik saat ini dan yang diinginkan menggunakan rumus berikut: desiredReplicas = ceil(currentReplicas × (currentMetricValue / desiredMetricValue)).
Rumus ini menunjukkan bahwa akurasi jumlah replika yang diinginkan bergantung pada akurasi jumlah replika saat ini, nilai metrik saat ini, dan nilai metrik yang diinginkan. Misalnya, pertimbangkan metrik resource, yang banyak digunakan dalam HPA. Untuk mendapatkan jumlah replika saat ini, HPA pertama-tama mengambil subResources scale subResources dari objek yang didefinisikan dalam scaleTargetRef. HPA kemudian mengonversi nilai Selector dari status objek scale menjadi labelselector dan menggunakan selektor tersebut untuk mencocokkan serta mengambil Pod. Jika beberapa Pod yang diambil tidak termasuk dalam objek yang didefinisikan dalam scaleTargetRef, jumlah replika yang diinginkan yang dihitung mungkin tidak akurat. Misalnya, HPA mungkin melakukan scale-out meskipun nilai metrik real-time berada di bawah ambang batas.
Alasan umum jumlah Pod yang cocok tidak akurat meliputi:
Penyebaran bergulir.
Label yang sama diterapkan pada Pod yang tidak termasuk dalam objek di scaleTargetRef. Anda dapat menjalankan perintah berikut untuk menentukan apakah Pod lain dengan label ini ada.
kubectl get pods -n {namespace_name} -l {value_of_status.Selector_for_scale_subresource}
Solusi
Untuk solusi terkait penyebaran bergulir, lihat FAQ autoscaling node.
Jika masalah disebabkan oleh Pod lain yang menggunakan label yang sama, temukan Pod tersebut. Ubah labelnya jika masih diperlukan, atau hapus jika tidak diperlukan.
Dapatkah saya mengontrol urutan scale-in Pod saat HPA melakukan penskalaan turun?
HPA dapat secara otomatis menambah atau mengurangi jumlah Pod berdasarkan metrik yang ditentukan, tetapi tidak secara langsung menentukan Pod mana yang harus dihentikan terlebih dahulu. Urutan penghentian Pod, periode shutdown yang mulus, dan atribut lainnya ditentukan oleh controller yang mengelola Pod tersebut.
Dalam skenario seperti penerapan campuran ECS dan ACS/ECI atau kelompok node ganda, Anda dapat menentukan prioritas scale-in dengan mengonfigurasi ResourcePolicy untuk aplikasi. HPA dapat bekerja sama dengan deployment dan ResourcePolicy untuk melepaskan sumber daya node ACS/ECI terlebih dahulu, lalu sumber daya ECS, selama scale-in. Untuk informasi lebih lanjut, lihat Sesuaikan prioritas penjadwalan sumber daya elastis.
Apa arti satuan untuk metrik penggunaan HPA?
Metrik penggunaan biasanya berupa bilangan bulat, yang bisa tanpa satuan atau menggunakan m sebagai satuan. Dalam kasus terakhir, 1000m sama dengan 1. Misalnya, nilai tcp_connection_counts sebesar 70000m setara dengan 70.
Apa yang harus saya lakukan jika perintah kubectl get hpa mengembalikan target sebagai unknown?
Ikuti langkah-langkah berikut untuk mengatasi masalah ini.
Jalankan perintah
kubectl describe hpa <hpa_name>untuk menemukan penyebab kegagalan Horizontal Pod Autoscaler (HPA).Jika kolom
Conditionsmenunjukkan bahwaAbleToScalebernilaiFalse, verifikasi bahwa deployment benar.Jika kolom
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 terkait dengan Ingress, Anda harus terlebih dahulu menerapkan komponen Simple Log Service. Untuk informasi lebih lanjut, lihat Kumpulkan dan analisis log akses Nginx Ingress.
Verifikasi bahwa metrik HPA dimasukkan dengan benar. Nilai untuk sls.ingress.route harus menggunakan format
<namespace>-<svc>-<port>.namespace: Namespace dari Ingress.svc: Nama layanan Ingress.port: Nama port layanan 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 | Queries per second (QPS) untuk IngressRoute yang ditentukan. | 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 lebih lanjut tentang cara menggunakan metrik Ingress Simple Log Service (SLS) untuk penskalaan otomatis pod horizontal, lihat Gunakan metrik dari komponen Alibaba Cloud untuk penskalaan otomatis pod horizontal. Anda harus mengaktifkan dan mengonfigurasi pengumpulan log Nginx Ingress untuk SLS 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.
Jika Anda menonaktifkan Simple Log Service saat membuat kluster, Anda harus mengaktifkan atau mengonfigurasinya kembali untuk menggunakan metrik Ingress SLS untuk penskalaan otomatis pod horizontal. Untuk informasi lebih lanjut, lihat Kumpulkan dan analisis log akses Nginx Ingress.
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 diterapkan saat Anda mengaktifkan Simple Log Service di kluster, hanya mendukung format log default dari controller Ingress ACK. Untuk informasi lebih lanjut, lihat Gunakan DaemonSet CRD untuk mengumpulkan log kontainer.
Bagaimana cara mendapatkan metrik QPS sls_ingress_qps dari command line?
Anda dapat mengkueri metrik 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 defaultnya adalah k8s-log-{{ClusterId}}, di mana {{ClusterId}} adalah 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. Kolom value merepresentasikan nilai QPS.
Gagal menarik citra alibaba-cloud-metrics-adapter
Gejala
Saat Anda meningkatkan 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 peningkatan langsung.
Solusi
Ikuti langkah-langkah berikut untuk meningkatkan komponen.
Buat cadangan konfigurasi komponen saat ini.
Uninstal versi lama komponen.
Instal versi terbaru komponen menggunakan konfigurasi cadangan.
Selama proses uninstall dan reinstall komponen, perilaku penskalaan HPA yang terkait dijeda karena pengambilan data pemantauan dihentikan.