Halaman ini menunjukkan cara mengatasi error pada workload yang di-deploy di Google Kubernetes Engine (GKE).
Untuk saran yang lebih umum tentang pemecahan masalah aplikasi, lihat Memecahkan Masalah dalam dokumentasi Kubernetes.
Semua error: Memeriksa status Pod
Jika ada masalah dengan Pod workload, Kubernetes akan memperbarui status Pod dengan pesan error. Lihat error ini dengan memeriksa status Pod menggunakan
konsol Google Cloud atau alat command line kubectl.
Konsol
Lakukan langkah-langkah berikut:
Di Google Cloud konsol, buka halaman Workload.
Pilih workload yang ingin Anda selidiki. Tab Ringkasan menampilkan status workload.
Dari bagian Pod yang Dikelola, klik pesan status error.
kubectl
Untuk melihat semua Pod yang berjalan di cluster Anda, jalankan perintah berikut:
kubectl get pods
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE
POD_NAME 0/1 CrashLoopBackOff 23 8d
Potensi error tercantum di kolom Status.
Untuk mendapatkan informasi selengkapnya tentang Pod tertentu, jalankan perintah berikut:
kubectl describe pod POD_NAME
Ganti POD_NAME dengan nama Pod yang ingin Anda selidiki.
Di output, kolom Events menampilkan informasi selengkapnya tentang error.
Jika Anda ingin mengetahui informasi selengkapnya, lihat log container:
kubectl logs POD_NAME
Log ini dapat membantu Anda mengidentifikasi apakah perintah atau kode dalam container menyebabkan Pod mengalami error.
Setelah mengidentifikasi error, gunakan bagian berikut untuk mencoba menyelesaikan masalah.
Error: CrashLoopBackOff
Status CrashLoopBackOff tidak berarti ada error tertentu, tetapi menunjukkan bahwa container berulang kali mengalami error setelah dimulai ulang.
Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah peristiwa CrashLoopBackOff.
Error: ImagePullBackOff dan ErrImagePull
Status ImagePullBackOff atau ErrImagePull menunjukkan bahwa image yang digunakan oleh container tidak dapat dimuat dari image registry.
Untuk panduan tentang cara memecahkan masalah status ini, lihat Memecahkan masalah penarikan image.
Error: OutOfPods
Status OutOfPods menunjukkan bahwa node tidak dapat menjalankan Pod karena node telah mencapai kapasitas Pod maksimum.
Gejala
Anda mungkin melihat pesan di peristiwa Pod yang mirip dengan berikut ini:
Node didn't have enough resource: pods, requested: 1, used: 32, capacity: 32
Penyebab
Error ini terjadi jika ada permintaan untuk menjadwalkan Pod di node yang sudah mencapai kapasitas. Situasi ini biasanya terjadi selama startup node, misalnya saat komponen kube-scheduler menetapkan Pod ke node baru sebelum agen kubelet melaporkan keberadaan Pod statis seperti komponen kube-proxy, yang memerlukan kapasitas Pod sendiri.
Resolusi
Untuk mengatasi masalah ini, coba salah satu solusi berikut:
Meningkatkan jumlah maksimum Pod per node. Jika node Anda secara konsisten mencapai batas Pod, tingkatkan setelan
--max-pods-per-nodeuntuk node pool Anda. Meningkatkan jumlah Pod mungkin memerlukan node yang lebih besar untuk menangani peningkatan permintaan resource.Mengaktifkan autoscaler cluster dan node auto-provisioning. Jika Anda sering kehabisan kapasitas Pod, mengaktifkan autoscaler cluster dan node auto-provisioning dapat membantu memastikan cluster Anda memiliki node yang cukup untuk memenuhi permintaan workload Anda.
Mengubah profil penskalaan otomatis. Jika Anda sudah menggunakan autoscaler cluster , coba ubah profil penskalaan otomatis ke profil
balanced, bukan profiloptimize-utilization. Profiloptimize-utilizationdapat meningkatkan kemungkinan errorOutOfPodskarena mencoba menempatkan Pod di node yang paling banyak digunakan.
Error: Pod tidak dapat dijadwalkan
Status PodUnschedulable menunjukkan bahwa Pod Anda tidak dapat dijadwalkan karena resource tidak memadai atau adanya error konfigurasi.
Jika telah mengonfigurasi metrik bidang kontrol, Anda dapat menemukan informasi selengkapnya tentang error ini di metrik scheduler dan metrik server API.
Menggunakan playbook interaktif Pod yang tidak dapat dijadwalkan
Anda dapat memecahkan masalah PodUnschedulable error menggunakan playbook interaktif
di Google Cloud konsol:
Buka playbook interaktif Pod yang tidak dapat dijadwalkan:
Di daftar drop-down Cluster, pilih cluster yang ingin Anda pecahkan masalahnya. Jika tidak dapat menemukan cluster, masukkan nama cluster di kolom Filter.
Di daftar drop-down Namespace, pilih namespace yang ingin Anda pecahkan masalahnya. Jika tidak dapat menemukan namespace, masukkan namespace di kolom Filter.
Untuk membantu Anda mengidentifikasi penyebabnya, kerjakan setiap bagian di playbook:
- Menyelidiki CPU dan Memori
- Menyelidiki Pod Maksimum per Node
- Menyelidiki Perilaku Autoscaler
- Menyelidiki Mode Kegagalan Lainnya
- Mengorelasikan Peristiwa Perubahan
Opsional: Untuk mendapatkan notifikasi tentang error
PodUnschedulabledi masa mendatang, di bagian Tips Mitigasi di Masa Mendatang, pilih Buat Pemberitahuan.
Error: Resource tidak cukup
Status PodUnschedulable dapat terjadi jika tidak ada cukup CPU, memori, atau resource lain untuk memenuhi permintaan Pod.
Gejala
Anda mungkin mengalami error yang menunjukkan kurangnya CPU, memori, atau resource lainnya. Misalnya: No nodes are available that match all of the predicates:
Insufficient cpu (2). Pesan ini menunjukkan bahwa, di dua node, tidak ada CPU yang cukup untuk memenuhi permintaan Pod.
Penyebab
Jika permintaan resource Pod Anda melebihi permintaan yang tersedia pada satu node dari setiap node pool yang memenuhi syarat, GKE tidak akan menjadwalkan Pod tersebut dan juga tidak akan memicu peningkatan skala untuk menambahkan node baru.
Cluster Anda menjalankan container sistem di namespace kube-system. Container tersebut juga menggunakan resource cluster.
Resolusi
Coba solusi berikut:
Sesuaikan permintaan resource Pod dengan menentukan nilai yang lebih rendah di kolom
spec: containers: resources: requests. Permintaan CPU default adalah 100m atau 10% CPU (atau satu core).Buat node pool baru dengan node yang memiliki resource yang cukup untuk memenuhi permintaan Pod.
Aktifkan node auto-provisioning sehingga GKE dapat otomatis membuat node pool dengan node tempat Pod yang tidak terjadwal dapat dijalankan.
Error: MatchNodeSelector
Error MatchNodeSelector menunjukkan bahwa tidak ada node yang cocok dengan pemilih label Pod.
Gejala
Status atau peristiwa Pod menampilkan error MatchNodeSelector.
Penyebab
Label yang ditentukan di kolom nodeSelector manifes Pod tidak ada di node mana pun dalam cluster.
Resolusi
Untuk mengatasi error ini, pastikan label yang ditentukan di kolom nodeSelector Pod cocok dengan label di setidaknya satu node di cluster Anda:
Identifikasi persyaratan label yang dicari Pod dengan memeriksa kolom
spec: nodeSelector.Untuk melihat apakah ada label yang cocok dengan persyaratan Pod, lihat label sebenarnya yang ditetapkan ke node di cluster Anda:
kubectl get nodes --show-labelsJika node dimaksudkan untuk menjalankan Pod ini, lampirkan label yang diperlukan:
kubectl label nodes NODE_NAME LABEL_KEY=LABEL_VALUEGanti kode berikut:
NODE_NAME: node yang ingin Anda tambahkan label.LABEL_KEY: kunci label.LABEL_VALUE: nilai label.
Untuk mengetahui informasi selengkapnya, lihat Menetapkan Pod ke Node dalam dokumentasi Kubernetes.
Error: PodToleratesNodeTaints
Error PodToleratesNodeTaints menunjukkan bahwa Pod tidak dapat dijadwalkan ke
node mana pun karena Pod tidak memiliki toleransi yang sesuai dengan
taint node yang ada.
Gejala
Status atau peristiwa Pod menampilkan error PodToleratesNodeTaints.
Penyebab
Pod tidak dapat dijadwalkan ke node mana pun karena Pod tidak memiliki toleransi yang sesuai dengan taint node yang ada.
Resolusi
Periksa taint pada node:
kubectl describe nodes NODE_NAMEDi output, periksa kolom
Taints, yang mencantumkan key-value pair dan dampak pada penjadwalan. Jika dampak yang tercantum adalahNoSchedule, tidak ada Pod yang dapat di jadwalkan pada node tersebut kecuali jika memiliki toleransi yang cocok .Hapus taint dari node. Misalnya, untuk menghapus taint
NoSchedule, jalankan perintah berikut:kubectl taint nodes NODE_NAME key:NoSchedule-
Error: PodFitsHostPorts
Error PodFitsHostPorts berarti node mencoba menggunakan port yang sudah digunakan.
Gejala
Status Pod menampilkan error PodFitsHostPorts.
Penyebab
Pod meminta port host yang sudah digunakan oleh Pod atau proses lain di node target.
Resolusi
Untuk mengatasi masalah ini, sebaiknya ikuti
praktik terbaik Kubernetes
dan gunakan Layanan NodePort, bukan setelan hostPort.
Jika Anda harus menggunakan port host, periksa manifes Pod dan pastikan semua Pod di node yang sama memiliki nilai unik yang ditentukan untuk setelan hostPort.
Error: Tidak memiliki ketersediaan minimum
Error ini dapat terjadi jika node memiliki resource yang memadai tetapi tidak tersedia untuk penjadwalan.
Gejala
Anda melihat error
Does not have minimum availability.Status node menampilkan status
SchedulingDisabledatau statusCordoned.
Penyebab
Status node yang ditandai sebagai tidak dapat dijadwalkan mencegah Pod baru dijadwalkan di dalamnya.
Resolusi
Agar node tersedia untuk menjadwalkan Pod lagi, batalkan penandaannya sebagai tidak dapat dijadwalkan:
Konsol
Lakukan langkah-langkah berikut:
Buka halaman Google Kubernetes Engine di Google Cloud konsol.
Pilih cluster yang ingin Anda selidiki. Tab Node menampilkan Node dan statusnya.
Untuk mengaktifkan penjadwalan di node, lakukan langkah-langkah berikut:
Dari daftar, klik node yang ingin Anda selidiki.
Dari bagian Detail Node, klik Batalkan Penandaan sebagai Tidak Dapat Dijadwalkan.
kubectl
Untuk mendapatkan status node Anda, jalankan perintah berikut:
kubectl get nodes
Untuk mengaktifkan penjadwalan di node, jalankan:
kubectl uncordon NODE_NAME
Error: Batas Pod Maksimum per node tercapai
Error Too many pods menunjukkan bahwa Pod tidak dapat dijadwalkan karena node target telah mencapai kapasitas Pod maksimum yang dikonfigurasi.
Gejala
- Pod macet dalam status
Unschedulable. - Anda melihat pesan yang menyertakan frasa
Too many pods.
Penyebab
Batas Pod Maksimum per node tercapai oleh semua node dalam cluster.
Resolusi
Untuk mengatasi error ini, selesaikan langkah-langkah berikut:
Periksa konfigurasi
Maximum pods per nodedari tab Node pada detail cluster GKE di Google Cloud konsol.Dapatkan daftar node:
kubectl get nodesUntuk setiap node, verifikasi jumlah Pod yang berjalan di node:
kubectl get pods -o wide | grep NODE_NAME | wc -lJika batas tercapai, tambahkan node pool baru atau tambahkan node lain ke node pool yang ada.
Masalah: Ukuran maksimum node pool tercapai dengan autoscaler cluster diaktifkan
Masalah ini terjadi saat node pool telah mencapai ukuran maksimum yang dikonfigurasi di autoscaler cluster.
Gejala
GKE tidak memicu peningkatan skala untuk Pod yang seharusnya dijadwalkan dengan node pool ini. Sebagai gantinya, Pod tetap dalam status Pending.
Penyebab
Node pool telah mencapai ukuran maksimum sesuai dengan konfigurasi autoscaler cluster-nya.
Resolusi
Tingkatkan ukuran maksimum node pool dengan mengubah autoscaler cluster konfigurasi.
Masalah: Ukuran maksimum node pool tercapai dengan autoscaler cluster dinonaktifkan
Masalah ini terjadi saat node pool telah mencapai ukuran maksimum dan autoscaler cluster dinonaktifkan.
Gejala
GKE tidak dapat menjadwalkan Pod dengan node pool.
Penyebab
Node pool telah mencapai jumlah maksimum node, dan autoscaler cluster dinonaktifkan.
Resolusi
Untuk mengatasi masalah ini, coba salah satu solusi berikut:
- Tingkatkan ukuran node pool Anda.
- Aktifkan autoscaler cluster untuk mengubah ukuran cluster Anda secara otomatis.
Error: PersistentVolumeClaims Dilepas
Error Unbound PersistentVolumeClaims menunjukkan bahwa Pod mereferensikan PersistentVolumeClaim yang telah dilepas.
Gejala
Status atau peristiwa Pod menampilkan error Unbound PersistentVolumeClaims.
Penyebab
Error ini dapat terjadi karena salah satu alasan berikut:
- PersistentVolume Anda gagal disediakan.
- Terjadi error konfigurasi selama pra-penyediaan PersistentVolume manual dan dalam proses bindingnya ke PersistentVolumeClaim.
Resolusi
Verifikasi apakah penyediaan gagal dengan mendapatkan peristiwa untuk PersistentVolumeClaim Anda:
kubectl describe pvc STATEFULSET_NAME-PVC_NAME-0Ganti kode berikut:
STATEFULSET_NAME: nama objek StatefulSet.PVC_NAME: nama objek PersistentVolumeClaim.
Coba lakukan pra-penyediaan volume lagi.
Error: Kuota tidak mencukupi
Jika GKE mencoba meningkatkan skala cluster Anda untuk menjadwalkan Pod, tetapi mengalami batasan kuota, peningkatan skala akan gagal.
Gejala
Anda akan menerima pesan error scale.up.error.quota.exceeded di peristiwa Pod.
Penyebab
Peningkatan skala cluster akan melebihi kuota project yang tersedia.
Resolusi
Pastikan project Anda memiliki kuota Compute Engine yang memadai untuk GKE guna meningkatkan skala cluster Anda. Untuk mengetahui informasi selengkapnya, lihat error ScaleUp.
Masalah: API yang tidak digunakan lagi
Penggunaan API yang tidak lagi didukung dalam manifes Anda dapat mencegah deployment workload.
Gejala
Workload gagal di-deploy atau dijalankan karena penggunaan API yang tidak digunakan lagi.
Penyebab
Manifes Anda menggunakan API yang tidak digunakan lagi dan dihapus dalam versi minor cluster Anda.
Resolusi
Pastikan Anda tidak menggunakan API yang tidak digunakan lagi. Perbarui manifes Anda untuk menggunakan API yang didukung. Untuk mengetahui informasi selengkapnya, lihat Penghentian penggunaan Fitur dan API deprecations.
Error: Tidak memiliki port gratis untuk port Pod yang diminta
Mengikat Pod ke port host membatasi tempat GKE dapat menjadwalkan Pod karena setiap kombinasi alamat hostIP, setelan hostPort, dan nilai protocol harus unik.
Gejala
Anda akan melihat error yang mirip dengan berikut ini:
0/1 nodes are available: 1 node(s) didn't have free ports for the requested pod ports. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.
Penyebab
Beberapa Pod di node yang sama menentukan nilai yang sama yang ditentukan di kolom hostPort.
Resolusi
Untuk mengatasi masalah ini, coba salah satu solusi berikut:
- Ikuti
praktik terbaik Kubernetes
dan gunakan Layanan
NodePort, bukan port host. - Jika Anda harus menggunakan port host, periksa manifes Pod dan pastikan semua Pod di node yang sama memiliki nilai unik yang ditentukan untuk kolom
hostPort.
Masalah: Kegagalan aplikasi dan probe di Pod
Masalah ini terjadi saat Anda menjalankan aplikasi yang menggunakan HTTPS untuk berkomunikasi dengan server.
Gejala
Kegagalan dalam aplikasi ini mirip dengan hal berikut:
- Pod tidak dimulai, dan container mengalami error dengan kode keluar
137. Probe liveness atau readiness gagal dengan pesan error yang mirip dengan berikut ini:
probeResult="failure" output="Get "https://example.com/healthy": EOF"Pod berjalan seperti yang diharapkan, tetapi log aplikasi menunjukkan kegagalan koneksi.
Penyebab
Kubernetes versi 1.30 dan yang lebih baru menggunakan versi Golang yang menonaktifkan cipher suite TLS berikut:
TLS_RSA_WITH_AES_128_GCM_SHA256TLS_RSA_WITH_AES_256_GCM_SHA384TLS_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_WITH_3DES_EDE_CBC_SHA
Resolusi
Gunakan cipher suite yang didukung dari TLS 1.2 dan yang lebih baru.
Langkah berikutnya
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Cloud Customer Care.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engineuntuk menelusuri masalah serupa. Anda juga dapat bergabung ke#kubernetes-enginechannel Slack untuk mendapatkan dukungan komunitas lainnya. - Membuka masalah atau permintaan fitur menggunakan issue tracker publik.