Halaman ini menunjukkan cara menemukan dan menyelesaikan masalah terkait penskala otomatis cluster yang tidak menskalakan node di cluster Google Kubernetes Engine (GKE).
Halaman ini ditujukan untuk developer Aplikasi yang ingin menyelesaikan situasi yang tidak terduga atau negatif dengan aplikasi atau layanan mereka, serta admin dan operator Platform yang ingin mencegah gangguan pada pengiriman produk dan layanan.
Memahami kapan autoscaler cluster meningkatkan skala node Anda
Sebelum melanjutkan ke langkah-langkah pemecahan masalah, sebaiknya pahami kapan autoscaler cluster akan mencoba meningkatkan skala node Anda. Autoscaler cluster hanya menambahkan node saat resource yang ada tidak mencukupi.
Setiap 10 detik, autoscaler cluster memeriksa apakah ada Pod yang tidak dapat dijadwalkan. Pod menjadi tidak dapat dijadwalkan saat penjadwal Kubernetes tidak dapat menempatkannya di node yang ada karena resource tidak memadai, batasan node, atau persyaratan Pod tidak terpenuhi.
Saat menemukan Pod yang tidak dapat dijadwalkan, autoscaler cluster akan mengevaluasi apakah penambahan node akan memungkinkan Pod dijadwalkan. Jika penambahan node akan memungkinkan Pod dijadwalkan, autoscaler cluster akan menambahkan node baru ke grup instance terkelola (MIG). Kemudian, penjadwal Kubernetes dapat menjadwalkan Pod di node yang baru disediakan.
Memeriksa apakah Anda memiliki Pod yang tidak dapat dijadwalkan
Untuk menentukan apakah cluster Anda perlu di-scale up, periksa Pod yang tidak terjadwal:
Di konsol Trusted Cloud , buka halaman Workloads.
Di kolom Filter
, masukkanunschedulable
, lalu tekan Enter.Jika ada Pod yang tercantum, berarti Anda memiliki Pod yang tidak dapat dijadwalkan. Untuk memecahkan masalah Pod yang tidak dapat dijadwalkan, lihat Error: Pod tidak dapat dijadwalkan. Menyelesaikan penyebab utama Pod yang tidak dapat dijadwalkan sering kali memungkinkan autoscaler cluster melakukan penskalaan. Untuk mengidentifikasi dan menyelesaikan error yang khusus untuk autoscaler cluster, pelajari bagian berikut.
Jika tidak ada Pod yang tercantum, autoscaler cluster tidak perlu melakukan penskalaan dan berfungsi seperti yang diharapkan.
Periksa apakah sebelumnya Anda memiliki Pod yang tidak dapat dijadwalkan
Jika Anda sedang menyelidiki penyebab kegagalan autoscaler cluster di masa lalu, periksa Pod yang sebelumnya tidak dapat dijadwalkan:
Di konsol Trusted Cloud , buka halaman Logs Explorer.
Tentukan rentang waktu untuk entri log yang ingin Anda lihat.
Di panel kueri, masukkan kueri berikut:
logName="projects/PROJECT_ID/logs/events" jsonPayload.source.component="default-scheduler" jsonPayload.reason="FailedScheduling"
Ganti
PROJECT_ID
dengan project ID Anda.Klik Run query.
Jika ada hasil yang tercantum, berarti Anda memiliki Pod yang tidak dapat dijadwalkan dalam rentang waktu yang Anda tentukan.
Memeriksa apakah masalah disebabkan oleh batasan
Setelah Anda mengonfirmasi bahwa Anda memiliki Pod yang tidak terjadwal, pastikan masalah Anda dengan penskalaan otomatis cluster tidak disebabkan oleh salah satu batasan untuk penskalaan otomatis cluster.
Lihat error
Anda sering kali dapat mendiagnosis penyebab masalah penskalaan dengan melihat pesan error:
Jika Anda sudah melihat pesan error, lihat tabel pesan error untuk mendapatkan saran tentang cara mengatasi error tersebut.
Jika Anda belum melihat pesan, gunakan salah satu opsi berikut:
- Masalah yang belum berusia 72 jam: Lihat notifikasi error di konsol Trusted Cloud .
- Masalah yang sudah lebih dari 72 jam: Lihat error dalam peristiwa di Cloud Logging.
Melihat error di notifikasi
Jika masalah yang Anda amati terjadi kurang dari 72 jam yang lalu, lihat notifikasi tentang error di konsol Trusted Cloud . Notifikasi ini memberikan insight berharga tentang alasan autoscaler cluster tidak melakukan penskalaan dan menawarkan saran tentang cara menyelesaikan error dan melihat log yang relevan untuk penyelidikan lebih lanjut.
Untuk melihat notifikasi di konsol Trusted Cloud , selesaikan langkah-langkah berikut:
Di konsol Trusted Cloud , buka halaman Kubernetes clusters.
Tinjau kolom Notifikasi. Notifikasi berikut terkait dengan masalah peningkatan skala:
Can't scale up
Can't scale up pods
Can't scale up a node pool
Klik notifikasi yang relevan untuk melihat panel berisi detail tentang penyebab masalah dan tindakan yang direkomendasikan untuk mengatasinya.
Opsional: Untuk melihat log acara ini, klik Log. Tindakan ini akan mengarahkan Anda ke Logs Explorer dengan kueri yang sudah terisi otomatis untuk membantu Anda menyelidiki lebih lanjut peristiwa penskalaan. Untuk mempelajari lebih lanjut cara kerja peristiwa peningkatan skala, lihat Melihat peristiwa autoscaler cluster.
Jika Anda masih mengalami masalah setelah meninjau saran dalam notifikasi, lihat tabel pesan error untuk mendapatkan bantuan lebih lanjut.
Melihat error dalam peristiwa
Jika masalah yang Anda amati terjadi lebih dari 72 jam yang lalu, lihat peristiwa di Cloud Logging. Jika terjadi error, error tersebut sering kali dicatat dalam suatu peristiwa.
Untuk melihat log penskalaan otomatis cluster di konsol Trusted Cloud , selesaikan langkah-langkah berikut:
Di konsol Trusted Cloud , buka halaman Kubernetes clusters.
Pilih nama cluster yang ingin Anda selidiki untuk melihat halaman Cluster details-nya.
Di halaman Cluster details, klik tab Logs.
Di tab Logs, klik tab Autoscaler Logs untuk melihat log.
Opsional: Untuk menerapkan filter lanjutan guna mempersempit hasil, klik tombol dengan tanda panah di sisi kanan halaman untuk melihat log di Logs Explorer.
Untuk mempelajari lebih lanjut cara kerja peristiwa peningkatan skala, lihat Melihat peristiwa autoscaler cluster. Untuk satu contoh cara menggunakan Cloud Logging, lihat contoh pemecahan masalah berikut.
Contoh: Memecahkan masalah yang sudah lebih dari 72 jam
Contoh berikut menunjukkan cara menyelidiki dan menyelesaikan masalah dengan cluster yang tidak di-scaling ke atas.
Skenario: Selama satu jam terakhir, Pod telah ditandai sebagai tidak dapat dijadwalkan. Autoscaler cluster tidak menyediakan node baru untuk menjadwalkan Pod.
Solusi:
- Karena masalah terjadi lebih dari 72 jam yang lalu, Anda menyelidiki masalah tersebut menggunakan Cloud Logging, bukan melihat pesan notifikasi.
- Di Cloud Logging, Anda dapat menemukan detail logging untuk peristiwa autoscaler cluster, seperti yang dijelaskan dalam Melihat error dalam peristiwa.
Anda menelusuri peristiwa
scaleUp
yang berisi Pod yang sedang Anda selidiki di kolomtriggeringPods
. Anda dapat memfilter entri log, termasuk memfilter berdasarkan nilai kolom JSON tertentu. Pelajari lebih lanjut di Kueri log lanjutan.Anda tidak menemukan peristiwa peningkatan skala. Namun, jika Anda melakukannya, Anda dapat mencoba menemukan
EventResult
yang berisieventId
yang sama dengan peristiwascaleUp
. Kemudian, Anda dapat melihat kolomerrorMsg
dan melihat daftar kemungkinan pesan error scaleUp.Karena Anda tidak menemukan peristiwa
scaleUp
, Anda terus menelusuri peristiwanoScaleUp
dan meninjau kolom berikut:unhandledPodGroups
: berisi informasi tentang Pod (atau pengontrol Pod).reason
: memberikan alasan global yang menunjukkan peningkatan skala dapat diblokir.skippedMigs
: memberikan alasan mengapa beberapa MIG dapat dilewati.
Anda menemukan peristiwa
noScaleUp
untuk Pod, dan semua MIG di kolomrejectedMigs
memiliki ID pesan"no.scale.up.mig.failing.predicate"
alasan yang sama dengan dua parameter:"NodeAffinity"
dan"node(s) did not match node selector"
.
Resolusi:
Setelah melihat daftar pesan error, Anda akan mengetahui bahwa autoscaler cluster tidak dapat meningkatkan skala node pool karena predikat penjadwalan gagal untuk Pod yang tertunda. Parameter adalah nama predikat yang gagal dan alasan kegagalannya.
Untuk mengatasi masalah ini, tinjau manifes Pod, dan temukan bahwa Pod memiliki pemilih node yang tidak cocok dengan MIG mana pun di cluster. Anda menghapus pemilih dari manifes Pod dan membuat ulang Pod. Autoscaler cluster menambahkan node baru dan Pod dijadwalkan.
Mengatasi error peningkatan skala
Setelah mengidentifikasi error, gunakan tabel berikut untuk membantu Anda memahami penyebab error dan cara mengatasinya.
Error ScaleUp
Anda dapat menemukan pesan error peristiwa untuk peristiwa scaleUp
dalam peristiwa eventResult
yang sesuai, di kolom resultInfo.results[].errorMsg
.
Pesan | Detail | Parameter | Mitigasi |
---|---|---|---|
"scale.up.error.out.of.resources" |
Error resource terjadi saat Anda mencoba meminta resource baru di zona yang tidak dapat mengakomodasi permintaan karena tidak tersedianya resource Compute Engine saat ini, seperti GPU atau CPU. | ID MIG yang gagal. | Ikuti langkah-langkah pemecahan masalah ketersediaan resource dalam dokumentasi Compute Engine. |
"scale.up.error.quota.exceeded" |
Peristiwa scaleUp gagal karena beberapa MIG tidak dapat ditingkatkan, karena melampaui kuota Compute Engine. | ID MIG yang gagal. | Periksa tab Error pada MIG di konsol Trusted Cloud untuk melihat kuota yang terlampaui. Setelah mengetahui kuota mana yang terlampaui, ikuti petunjuk untuk meminta penambahan kuota. |
"scale.up.error.waiting.for.instances.timeout" |
Peningkatan skala grup instance terkelola gagal dilakukan karena waktu tunggu habis. | ID MIG yang gagal. | Pesan ini harus bersifat sementara. |
"scale.up.error.ip.space.exhausted" |
Tidak dapat melakukan penskalaan karena instance di beberapa grup instance terkelola kehabisan IP. Artinya, cluster tidak memiliki cukup ruang alamat IP yang belum dialokasikan untuk menambahkan node atau Pod baru. | ID MIG yang gagal. | Ikuti langkah-langkah pemecahan masalah di Ruang alamat IP yang tidak cukup untuk Pod. |
"scale.up.error.service.account.deleted" |
Tidak dapat melakukan penskalaan karena akun layanan telah dihapus. | ID MIG yang gagal. | Coba membatalkan penghapusan akun layanan. |
Alasan peristiwa noScaleUp
Peristiwa noScaleUp
akan dihasilkan secara berkala saat ada Pod yang tidak dapat dijadwalkan di cluster dan autoscaler cluster tidak dapat meningkatkan skala cluster untuk menjadwalkan Pod. Peristiwa noScaleUp
adalah upaya terbaik, dan tidak mencakup semua kasus yang memungkinkan.
Alasan tingkat atas NoScaleUp
Pesan alasan tingkat atas untuk peristiwa noScaleUp
muncul di kolom noDecisionStatus.noScaleUp.reason
. Pesan ini berisi alasan tingkat atas mengapa autoscaler cluster tidak dapat meningkatkan skala cluster.
Pesan | Detail | Mitigasi |
---|---|---|
"no.scale.up.in.backoff" |
Tidak ada peningkatan skala karena peningkatan skala berada dalam periode backoff (diblokir sementara). Pesan ini dapat terjadi selama peristiwa peningkatan skala dengan Pod dalam jumlah besar. | Pesan ini harus bersifat sementara. Periksa error ini setelah beberapa menit. |
Alasan penyediaan otomatis node tingkat atas NoScaleUp
Pesan alasan penyediaan otomatis node tingkat atas untuk peristiwa noScaleUp
muncul di kolom noDecisionStatus.noScaleUp.napFailureReason
. Pesan ini berisi alasan utama mengapa autoscaler cluster tidak dapat menyediakan node pool baru.
Pesan | Detail | Mitigasi |
---|---|---|
"no.scale.up.nap.disabled" |
Penyediaan otomatis node tidak dapat melakukan penskalaan karena penyediaan otomatis node tidak diaktifkan di tingkat cluster. Jika penyediaan otomatis node dinonaktifkan, node baru tidak akan disediakan secara otomatis jika Pod yang tertunda memiliki persyaratan yang tidak dapat dipenuhi oleh node pool yang ada. |
Tinjau konfigurasi cluster dan pertimbangkan untuk mengaktifkan penyediaan otomatis node. |
Alasan tingkat MIG NoScaleUp
Pesan alasan tingkat MIG untuk peristiwa noScaleUp
muncul di kolom noDecisionStatus.noScaleUp.skippedMigs[].reason
dan noDecisionStatus.noScaleUp.unhandledPodGroups[].rejectedMigs[].reason
.
Pesan ini berisi alasan mengapa autoscaler cluster tidak dapat meningkatkan ukuran MIG tertentu.
Pesan | Detail | Parameter | Mitigasi |
---|---|---|---|
"no.scale.up.mig.skipped" |
Tidak dapat meningkatkan skala MIG karena dilewati selama simulasi. | Alasan MIG dilewati (misalnya, persyaratan Pod tidak ada). | Tinjau parameter yang disertakan dalam pesan error dan tangani alasan MIG dilewati. |
"no.scale.up.mig.failing.predicate" |
Tidak dapat meningkatkan skala node pool karena predikat penjadwalan gagal untuk Pod yang tertunda. | Nama predikat yang gagal dan alasan kegagalannya. | Tinjau persyaratan Pod, seperti aturan afinitas, taint atau toleransi, dan persyaratan resource. |
Alasan penyediaan otomatis node tingkat grup Pod NoScaleUp
Pesan alasan penyediaan otomatis node tingkat grup pod untuk peristiwa noScaleUp
muncul di kolom noDecisionStatus.noScaleUp.unhandledPodGroups[].napFailureReasons[]
. Pesan ini berisi alasan mengapa autoscaler cluster tidak dapat menyediakan node pool baru untuk menjadwalkan grup Pod tertentu.
Pesan | Detail | Parameter | Mitigasi |
---|---|---|---|
"no.scale.up.nap.pod.gpu.no.limit.defined" |
Penyediaan otomatis node tidak dapat menyediakan grup node apa pun karena Pod yang tertunda memiliki permintaan GPU, tetapi batas resource GPU tidak ditetapkan di tingkat cluster. | Jenis GPU yang diminta. | Tinjau permintaan GPU Pod yang tertunda, dan update konfigurasi penyediaan otomatis node tingkat cluster untuk batas GPU. |
"no.scale.up.nap.pod.gpu.type.not.supported" |
Penyediaan otomatis node tidak menyediakan grup node apa pun untuk Pod karena memiliki permintaan untuk jenis GPU yang tidak diketahui. | Jenis GPU yang diminta. | Periksa konfigurasi Pod yang tertunda untuk jenis GPU guna memastikan bahwa jenis GPU tersebut cocok dengan jenis GPU yang didukung. |
"no.scale.up.nap.pod.zonal.resources.exceeded" |
Penyediaan otomatis node tidak menyediakan grup node apa pun untuk Pod di zona ini karena hal tersebut akan melanggar batas resource maksimum seluruh cluster, melebihi resource yang tersedia dalam zona, atau hal tersebut bukanlah jenis mesin yang sesuai dengan permintaan. | Nama zona yang dipertimbangkan. | Tinjau dan update batas resource maksimum seluruh cluster, permintaan resource Pod, atau zona yang tersedia untuk penyediaan otomatis node. |
"no.scale.up.nap.pod.zonal.failing.predicates" |
Penyediaan otomatis node tidak menyediakan grup node apa pun untuk Pod di zona ini karena predikat yang gagal. | Nama zona yang dipertimbangkan dan alasan kegagalan predikat. | Tinjau persyaratan Pod yang tertunda, seperti aturan afinitas, taint, toleransi, atau persyaratan resource. |
Melakukan penyelidikan lebih lanjut
Bagian berikut memberikan panduan tentang cara menggunakan Logs Explorer dan
gcpdiag
untuk mendapatkan insight tambahan tentang error Anda.
Menyelidiki error di Logs Explorer
Jika Anda ingin menyelidiki pesan error lebih lanjut, lihat log khusus untuk error Anda:
Di konsol Trusted Cloud , buka halaman Logs Explorer.
Di panel kueri, masukkan kueri berikut:
resource.type="k8s_cluster" log_id("container.googleapis.com/cluster-autoscaler-visibility") jsonPayload.resultInfo.results.errorMsg.messageId="ERROR_MESSAGE"
Ganti
ERROR_MESSAGE
dengan pesan yang ingin Anda selidiki. Contoh,scale.up.error.out.of.resources
.Klik Run query.
Men-debug beberapa error dengan gcpdiag
gcpdiag
adalah alat open source yang dibuat dengan dukungan dari Trusted Cloud by S3NS
teknisi. Ini bukan produk yang didukung secara resmi Trusted Cloud by S3NS .
Jika Anda mengalami salah satu pesan error berikut, Anda dapat menggunakan
gcpdiag
untuk membantu memecahkan masalah:
scale.up.error.out.of.resources
scale.up.error.quota.exceeded
scale.up.error.waiting.for.instances.timeout
scale.up.error.ip.space.exhausted
scale.up.error.service.account.deleted
Untuk mengetahui daftar dan deskripsi semua flag alat gcpdiag
, lihat petunjuk penggunaan gcpdiag
.
Mengatasi error peningkatan skala yang kompleks
Bagian berikut menawarkan panduan untuk menyelesaikan error yang mitigasinya melibatkan beberapa langkah dan error yang tidak memiliki pesan peristiwa penskala otomatis cluster yang terkait dengannya.
Masalah: Pod tidak sesuai dengan node
Autoscaler cluster hanya menjadwalkan Pod pada node jika ada node dengan resource yang memadai seperti GPU, memori, dan penyimpanan untuk memenuhi persyaratan Pod. Untuk menentukan apakah hal ini menjadi alasan penskalaan cluster otomatis tidak melakukan penskalaan, bandingkan permintaan resource dengan resource yang disediakan.
Contoh berikut menunjukkan cara memeriksa resource CPU, tetapi langkah-langkah yang sama berlaku untuk resource GPU, memori, dan penyimpanan. Untuk membandingkan permintaan CPU dengan CPU yang disediakan, selesaikan langkah-langkah berikut:
Di konsol Trusted Cloud , buka halaman Workloads.
Klik pesan error
PodUnschedulable
.Di panel Details, klik nama Pod. Jika ada beberapa Pod, mulai dengan Pod pertama dan ulangi proses berikut untuk setiap Pod.
Di halaman Pod details, buka tab Events.
Dari tab Events, buka tab YAML.
Catat permintaan resource setiap container di Pod untuk mengetahui total permintaan resource. Misalnya, dalam konfigurasi Pod berikut, Pod memerlukan 2 vCPU:
resources: limits: cpu: "3" requests: cpu: "2"
Lihat detail node pool dari cluster dengan Pod yang tidak terjadwal:
Di konsol Trusted Cloud , buka halaman Kubernetes clusters.
Klik nama cluster yang memiliki pesan error
Pods unschedulable
.Di halaman Cluster details, buka tab Nodes.
Di bagian Node pool, catat nilai di kolom Jenis mesin. Misalnya,
n1-standard-1
.Bandingkan permintaan resource dengan vCPU yang disediakan oleh jenis mesin. Misalnya, jika Pod meminta 2 vCPU, tetapi node yang tersedia memiliki jenis mesin
n1-standard-1
, node tersebut hanya akan memiliki 1 vCPU. Dengan konfigurasi seperti ini, autoscaler cluster tidak akan memicu peningkatan skala karena meskipun menambahkan node baru, Pod ini tidak akan cocok di dalamnya. Jika Anda ingin mengetahui lebih lanjut jenis mesin yang tersedia, lihat Panduan perbandingan dan resource kelompok mesin dalam dokumentasi Compute Engine.
Perlu diingat juga bahwa resource yang dapat dialokasikan dari sebuah node lebih sedikit daripada total resource, karena sebagian diperlukan untuk menjalankan komponen sistem. Untuk mempelajari lebih lanjut cara penghitungannya, lihat Sumber daya yang dapat dialokasikan node.
Untuk mengatasi masalah ini, tentukan apakah permintaan resource yang ditentukan untuk workload sesuai dengan kebutuhan Anda. Jika jenis mesin tidak boleh diubah, buat node pool dengan jenis mesin yang dapat mendukung permintaan yang berasal dari Pod. Jika permintaan resource Pod tidak akurat, perbarui definisi Pod agar Pod dapat dimuat di node.
Masalah: Cluster tidak responsif sehingga mencegah peningkatan skala
Autoscaler cluster mungkin tidak melakukan penskalaan jika menganggap cluster tidak sehat. Kondisi tidak sehat cluster tidak didasarkan pada kondisi sehat bidang kontrol, tetapi pada rasio node yang sehat dan siap. Jika 45% node dalam cluster tidak responsif atau belum siap, autoscaler cluster akan menghentikan semua operasi.
Jika inilah alasan autoscaler cluster Anda tidak meningkatkan skala, ada peristiwa di ConfigMap autoscaler cluster dengan jenis Warning
dengan ClusterUnhealthy
yang tercantum sebagai alasannya.
Untuk melihat ConfigMap, jalankan perintah berikut:
kubectl describe configmap cluster-autoscaler-status -n kube-system
Untuk mengatasi masalah ini, kurangi jumlah node yang tidak responsif.
Beberapa node mungkin sudah siap, meskipun tidak dianggap siap oleh autoscaler cluster. Hal ini terjadi saat taint dengan awalan
ignore-taint.cluster-autoscaler.kubernetes.io/
ada di node. Autoscaler
cluster menganggap node sebagai NotReady
selama taint tersebut ada.
Jika perilaku tersebut disebabkan oleh adanya
noda ignore-taint.cluster-autoscaler.kubernetes.io/.*
, hapus noda tersebut.
Langkah berikutnya
- Tinjau FAQ penskalaan otomatis cluster Kubernetes.
Tonton video YouTube tentang cara memecahkan masalah dan menyelesaikan masalah penskalaan.
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk mendapatkan bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Layanan Pelanggan Cloud.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engine
untuk menelusuri masalah serupa. Anda juga dapat bergabung ke#kubernetes-engine
channel Slack untuk mendapatkan dukungan komunitas lainnya. - Membuka bug atau permintaan fitur menggunakan issue tracker publik.