Status NotReady di Google Kubernetes Engine (GKE) berarti kubelet node tidak melaporkan ke bidang kontrol dengan benar. Karena Kubernetes tidak akan menjadwalkan Pod baru di node NotReady, masalah ini dapat mengurangi kapasitas aplikasi dan menyebabkan waktu non-operasional.
Gunakan dokumen ini untuk membedakan antara status NotReady yang diharapkan dan masalah sebenarnya, mendiagnosis penyebab utama, dan menemukan solusi untuk masalah umum seperti kehabisan resource, masalah jaringan, dan kegagalan runtime container.
Informasi ini ditujukan bagi admin dan operator Platform yang bertanggung jawab atas stabilitas cluster dan Developer aplikasi yang ingin memahami perilaku aplikasi terkait infrastruktur. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE umum. Google Cloud
Sebelum memulai
-
Untuk mendapatkan izin yang Anda perlukan untuk melakukan tugas dalam dokumen ini, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda: Google Cloud
-
Untuk mengakses cluster GKE:
Kubernetes Engine Cluster Viewer (
roles/container.viewer). -
Untuk melihat log:
Logs Viewer (
roles/logging.viewer). -
Untuk melihat metrik:
Monitoring Viewer (
roles/monitoring.viewer).
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
-
Untuk mengakses cluster GKE:
Kubernetes Engine Cluster Viewer (
Konfigurasi alat command line
kubectluntuk berkomunikasi dengan cluster GKE Anda:gcloud container clusters get-credentials CLUSTER_NAME \ --location LOCATION \ --project PROJECT_IDGanti kode berikut:
CLUSTER_NAME: nama cluster Anda.LOCATION: region atau zona Compute Engine (misalnya,us-central1atauus-central1-a) untuk cluster.PROJECT_ID: Google Cloud Project ID Anda.
Periksa status dan kondisi node
Untuk mengonfirmasi bahwa node memiliki status NotReady dan membantu Anda mendiagnosis penyebab
masalah, gunakan langkah-langkah berikut untuk memeriksa kondisi, peristiwa, log, dan
metrik resource node:
Melihat status node Anda. Untuk mendapatkan detail tambahan seperti alamat IP dan versi kernel, yang berguna untuk diagnosis, gunakan flag
-o wide:kubectl get nodes -o wideOutputnya mirip dengan hal berikut ini:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME gke-cluster-pool-1-node-abc1 Ready <none> 94d v1.32.3-gke.1785003 10.128.0.1 1.2.3.4 Container-Optimized OS from Google 6.6.72+ containerd://1.7.24 gke-cluster-pool-1-node-def2 Ready <none> 94d v1.32.3-gke.1785003 10.128.0.2 5.6.7.8 Container-Optimized OS from Google 6.6.72+ containerd://1.7.24 gke-cluster-pool-1-node-ghi3 NotReady <none> 94d v1.32.3-gke.1785003 10.128.0.3 9.10.11.12 Container-Optimized OS from Google 6.6.72+ containerd://1.7.24Di output, cari node dengan nilai
NotReadydi kolomSTATUSdan catat namanya.Lihat informasi selengkapnya tentang node tertentu dengan status
NotReady, termasuk kondisi dan peristiwa Kubernetes terbaru:kubectl describe node NODE_NAMEGanti
NODE_NAMEdengan nama node yang memiliki statusNotReady.Pada output, fokus pada bagian
Conditionsuntuk memahami kondisi node dan bagianEventsuntuk melihat histori masalah terbaru. Contoh:Name: gke-cluster-pool-1-node-ghi3 ... Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- NetworkUnavailable False Wed, 01 Oct 2025 10:29:19 +0100 Wed, 01 Oct 2025 10:29:19 +0100 RouteCreated RouteController created a route MemoryPressure Unknown Wed, 01 Oct 2025 10:31:06 +0100 Wed, 01 Oct 2025 10:31:51 +0100 NodeStatusUnknown Kubelet stopped posting node status. DiskPressure Unknown Wed, 01 Oct 2025 10:31:06 +0100 Wed, 01 Oct 2025 10:31:51 +0100 NodeStatusUnknown Kubelet stopped posting node status. PIDPressure False Wed, 01 Oct 2025 10:31:06 +0100 Wed, 01 Oct 2025 10:29:00 +0100 KubeletHasSufficientPID kubelet has sufficient PID available Ready Unknown Wed, 01 Oct 2025 10:31:06 +0100 Wed, 01 Oct 2025 10:31:51 +0100 NodeStatusUnknown Kubelet stopped posting node status. Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Starting 32m kubelet, gke-cluster-pool-1-node-ghi3 Starting kubelet. Warning PLEGIsNotHealthy 5m1s (x15 over 29m) kubelet, gke-cluster-pool-1-node-ghi3 PLEG is not healthy: pleg was last seen active 5m1.123456789s ago; threshold is 3m0s Normal NodeHasSufficientMemory 5m1s (x16 over 31m) kubelet, gke-cluster-pool-1-node-ghi3 Node gke-cluster-pool-1-node-ghi3 status is now: NodeHasSufficientMemoryDi bagian
Conditions, statusTrueuntuk kondisi negatif, atauUnknownuntuk kondisiReady, menunjukkan adanya masalah. Perhatikan baik-baik kolomReasondanMessageuntuk kondisi ini, karena kolom tersebut menjelaskan penyebab masalah.Berikut arti setiap jenis kondisi:
KernelDeadlock:Truejika kernel sistem operasi node telah mendeteksi kebuntuan, yang merupakan error serius yang dapat membekukan node.FrequentUnregisterNetDevice:Truejika node sering membatalkan pendaftaran perangkat jaringannya, yang dapat menjadi tanda masalah driver atau hardware.NetworkUnavailable:Truejika jaringan untuk node tidak dikonfigurasi dengan benar.OutOfDisk:Truejika ruang disk yang tersedia benar-benar habis. Kondisi ini lebih parah daripadaDiskPressure.MemoryPressure:Truejika memori node rendah.DiskPressure:Truejika ruang disk di node rendah.PIDPressure:Truejika node mengalami kehabisan ID proses (PID).Ready: menunjukkan apakah node dalam kondisi baik dan siap menerima Pod.Truejika node berfungsi dengan baik.Falsejika node bermasalah dan tidak menerima Pod.Unknownjika pengontrol node belum menerima respons dari node selama masa tenggang (defaultnya adalah 50 detik) dan status node tidak diketahui.
Selanjutnya, periksa bagian
Events, yang memberikan log kronologis tindakan dan pengamatan tentang node. Linimasa ini sangat penting untuk memahami apa yang terjadi tepat sebelum node menjadiNotReady. Cari pesan tertentu yang dapat membantu menemukan penyebabnya, seperti peringatan pengusiran (yang menandakan tekanan sumber daya), pemeriksaan kondisi yang gagal, atau peristiwa siklus proses node seperti mengisolasi untuk perbaikan.Untuk mempelajari lebih lanjut alasan node memiliki status
NotReady, lihat log dari node dan komponennya.Periksa log
kubeletuntuk mengetahui statusNotReady.kubeletadalah agen utama yang melaporkan status node ke bidang kontrol, sehingga log-nya adalah tempat yang paling mungkin untuk menemukan pesanNotReadyliteral. Log ini adalah sumber tepercaya untuk mendiagnosis masalah terkait peristiwa siklus proses Pod, kondisi tekanan resource (sepertiMemoryPressureatauDiskPressure), dan konektivitas node ke bidang kontrol Kubernetes.Di konsol Google Cloud , buka halaman Logs Explorer:
Di panel kueri, masukkan kueri berikut:
resource.type="k8s_node" resource.labels.node_name="NODE_NAME" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="LOCATION" log_id("kubelet") textPayload=~"(?i)NotReady"Ganti kode berikut:
NODE_NAME: nama node yang Anda selidiki.CLUSTER_NAME: nama cluster Anda.LOCATION: region atau zona Compute Engine (misalnya,us-central1atauus-central1-a) untuk cluster.
Klik Jalankan kueri dan tinjau hasilnya.
Jika log
kubelettidak mengungkapkan penyebab utama, periksa logcontainer-runtimedannode-problem-detector. Komponen ini mungkin tidak mencatat statusNotReadysecara langsung, tetapi sering kali mencatat masalah yang mendasarinya (seperti kegagalan runtime atau kernel panic) yang menyebabkan masalah tersebut.Di panel kueri Logs Explorer, masukkan kueri berikut:
resource.type="k8s_node" resource.labels.node_name="NODE_NAME" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="LOCATION" log_id("COMPONENT_NAME")Ganti
COMPONENT_NAMEdengan salah satu nilai berikut:container-runtime: runtime (containerd), yang bertanggung jawab atas siklus proses container lengkap, termasuk menarik image dan mengelola eksekusi container. Meninjau logcontainer-runtimesangat penting untuk memecahkan masalah kegagalan terkait instansiasi container, error layanan runtime, atau masalah yang disebabkan oleh konfigurasi runtime.node-problem-detector: utilitas yang secara proaktif memantau dan melaporkan berbagai masalah tingkat node ke bidang kontrol. Log-nya sangat penting untuk mengidentifikasi masalah sistem mendasar yang dapat menyebabkan ketidakstabilan node, seperti kebuntuan kernel, kerusakan sistem file, atau kegagalan hardware, yang mungkin tidak tercatat oleh komponen Kubernetes lainnya.
Klik Jalankan kueri dan tinjau hasilnya.
Gunakan Metrics Explorer untuk mencari kelelahan resource di sekitar waktu saat node menjadi
NotReady:Di konsol Google Cloud , buka halaman Metrics Explorer:
Di Metrics Explorer, periksa apakah instance Compute Engine yang mendasari node mengalami kehabisan resource. Fokus pada metrik yang terkait dengan metrik CPU, memori, dan I/O disk. Contoh:
- Metrik node GKE: mulai dengan metrik yang diawali dengan
kubernetes.io/node/, sepertikubernetes.io/node/cpu/allocatable_utilizationataukubernetes.io/node/memory/allocatable_utilization. Metrik ini menunjukkan jumlah resource yang tersedia di node yang digunakan oleh Pod Anda. Jumlah yang tersedia tidak mencakup resource yang dicadangkan Kubernetes untuk overhead sistem. - Metrik OS tamu: untuk tampilan dari dalam sistem operasi node, gunakan metrik yang diawali dengan
compute.googleapis.com/guest/, seperticompute.googleapis.com/guest/cpu/usageataucompute.googleapis.com/guest/memory/bytes_used. - Metrik hypervisor: untuk melihat performa VM dari tingkat hypervisor, gunakan metrik yang diawali dengan
compute.googleapis.com/instance/, seperticompute.googleapis.com/instance/cpu/utilizationatau metrik I/O disk seperticompute.googleapis.com/instance/disk/read_bytes_count.
Metrik OS tamu dan hypervisor mengharuskan Anda memfilter menurut nama instance Compute Engine yang mendasarinya, bukan nama node Kubernetes. Anda dapat menemukan nama instance untuk node dengan menjalankan perintah
kubectl describe node NODE_NAMEdan mencari kolomProviderIDdalam output. Nama instance adalah bagian terakhir dari nilai tersebut. Contoh:... Spec: ProviderID: gce://my-gcp-project-123/us-central1-a/gke-my-cluster-default-pool-1234abcd-5678 ...Dalam contoh ini, nama instance-nya adalah
gke-my-cluster-default-pool-1234abcd-5678.- Metrik node GKE: mulai dengan metrik yang diawali dengan
Mengidentifikasi penyebab berdasarkan gejala
Jika Anda telah mengidentifikasi gejala tertentu, seperti pesan log, kondisi node, atau peristiwa cluster, gunakan tabel berikut untuk menemukan saran pemecahan masalah:
| Kategori | Gejala atau pesan log | Kemungkinan penyebab | Langkah-langkah pemecahan masalah |
|---|---|---|---|
| Kondisi node | NetworkUnavailable: True |
Masalah konektivitas node-ke-control-plane atau kegagalan plugin Container Network Interface (CNI). | Memecahkan masalah konektivitas jaringan |
MemoryPressure: True |
Node tidak memiliki memori yang cukup. | Memecahkan masalah kekurangan resource node | |
DiskPressure: True |
Node tidak memiliki ruang disk yang cukup. | Memecahkan masalah kekurangan resource node | |
PIDPressure: True |
Node tidak memiliki ID Proses yang tersedia dalam jumlah yang cukup. | Memecahkan masalah kekurangan resource node | |
| Peristiwa dan pesan log | PLEG is not healthy |
Kubelet kelebihan beban karena CPU/IO tinggi atau terlalu banyak Pod. | Menyelesaikan masalah PLEG |
Out of memory: Kill processsys oom event |
Memori node benar-benar habis. | Menyelesaikan peristiwa OOM tingkat sistem | |
leases.coordination.k8s.io...is forbidden |
Namespace kube-node-lease terjebak saat dihentikan. |
Menyelesaikan masalah pada namespace kube-node-lease |
|
Container runtime not readyruntime is downError yang merujuk /run/containerd/containerd.sock atau docker.sock |
Layanan Containerd atau Docker gagal atau salah dikonfigurasi. | Menyelesaikan masalah runtime container | |
Pod macet di TerminatingLog Kubelet menunjukkan DeadlineExceeded untuk menghentikan containerLog containerd menunjukkan pesan Kill container berulang |
Proses yang macet dalam mode tidur disk yang tidak dapat diinterupsi (status D), sering kali terkait dengan I/O. | Mengatasi proses yang macet dalam status D | |
| Gejala tingkat cluster | Beberapa node gagal setelah peluncuran DaemonSet. | DaemonSet mengganggu operasi node. | Menyelesaikan masalah yang disebabkan oleh DaemonSet pihak ketiga |
compute.instances.preempted di log audit. |
Spot VM di-preempt, yang merupakan perilaku yang diharapkan. | Mengonfirmasi penghentian sementara node | |
Pod kube-system macet di Pending. |
Webhook penerimaan memblokir komponen penting. | Menyelesaikan masalah yang disebabkan oleh webhook penerimaan | |
exceeded quota: gcp-critical-pods |
Kuota yang salah dikonfigurasi akan memblokir Pod sistem. | Menyelesaikan masalah yang disebabkan oleh kuota resource |
Memeriksa peristiwa NotReady yang diharapkan
Status NotReady tidak selalu menandakan adanya masalah. Hal ini dapat menjadi perilaku yang diharapkan
selama operasi yang direncanakan seperti upgrade node pool, atau jika Anda menggunakan jenis
virtual machine tertentu.
Mengonfirmasi operasi siklus proses node
Gejala:
Node sementara menampilkan status NotReady selama peristiwa siklus proses tertentu.
Penyebab:
Status node akan menjadi NotReady untuk sementara selama beberapa peristiwa siklus proses umum. Perilaku ini diharapkan terjadi setiap kali node dibuat atau
dibuat ulang, seperti dalam skenario berikut:
- Upgrade node pool: selama upgrade, setiap node akan dikuras dan diganti. Node baru yang diupgrade memiliki status
NotReadyhingga selesai diinisialisasi dan bergabung dengan cluster. - Perbaikan otomatis node: saat GKE mengganti node yang tidak berfungsi, node pengganti tetap
NotReadyselama disediakan. - Peningkatan skala autoscaler cluster: saat node baru ditambahkan, node tersebut dimulai dalam status
NotReadydan menjadiReadyhanya setelah disediakan sepenuhnya dan bergabung dengan cluster. - Perubahan template instance manual: GKE membuat ulang node saat Anda menerapkan perubahan template. Node baru memiliki status
NotReadyselama fase startup-nya.
Resolusi:
Node hanya akan memiliki status NotReady dalam waktu singkat. Jika status tetap seperti itu selama lebih dari 10 menit, selidiki penyebab lainnya.
Konfirmasi penghentian sementara node
Jika node Anda berjalan di Spot VM atau Preemptible VM, Compute Engine dapat menghentikannya secara tiba-tiba untuk mengklaim kembali resource. Hal ini adalah perilaku yang diharapkan untuk jenis virtual machine yang berumur pendek ini dan bukan merupakan error.
Gejala:
Jika Anda mengamati gejala berikut, status NotReady node kemungkinan disebabkan oleh preemption Spot VM yang diharapkan:
- Node tiba-tiba memasuki status
NotReadysebelum dihapus dan dibuat ulang oleh autoscaler cluster. - Cloud Audit Logs menampilkan peristiwa
compute.instances.preempteduntuk instance VM yang mendasarinya.
Penyebab:
Node berjalan di instance Spot VM atau Preemptible VM dan Compute Engine mengklaim kembali resource komputasi tersebut untuk tugas lain. Spot VM dapat terganggu kapan saja, meskipun biasanya memberikan pemberitahuan penghentian 30 detik.
Resolusi:
Gunakan Spot VM atau Preemptible VM hanya untuk workload fault-tolerant, stateless, atau batch yang didesain untuk menangani penghentian yang sering dengan baik. Untuk workload produksi atau stateful yang tidak dapat mentoleransi gangguan mendadak, sediakan node pool Anda menggunakan VM on-demand standar.
Memecahkan masalah kekurangan resource node
Node sering kali menjadi NotReady karena tidak memiliki resource penting seperti CPU, memori, atau ruang disk. Jika tidak memiliki cukup resource ini, komponen penting tidak dapat berfungsi dengan benar, sehingga menyebabkan ketidakstabilan aplikasi dan node tidak responsif. Bagian berikut membahas berbagai cara munculnya kekurangan ini, mulai dari kondisi tekanan umum hingga peristiwa yang lebih parah di seluruh sistem.
Mengatasi tekanan resource node
Kelelahan resource terjadi saat node tidak memiliki CPU, memori, ruang disk, atau ID proses (PID) yang cukup untuk menjalankan workload-nya. Masalah ini dapat menyebabkan status
NotReady.
Gejala:
Jika Anda mengamati kondisi dan log node berikut, kehabisan resource adalah
kemungkinan penyebab status NotReady node:
- Dalam output perintah
kubectl describe node, Anda akan melihat statusTrueuntuk kondisi sepertiOutOfDisk,MemoryPressure,DiskPressure, atauPIDPressure. - Log kubelet mungkin berisi peristiwa Out of Memory (OOM), yang menunjukkan bahwa OOM Killer sistem dipanggil.
Penyebab:
Workload pada node secara kolektif meminta lebih banyak resource daripada yang dapat disediakan oleh node.
Resolusi:
Untuk cluster Standard, coba solusi berikut:
- Mengurangi permintaan beban kerja:
- Kurangi jumlah Pod yang berjalan di node yang terpengaruh dengan menurunkan skala jumlah replika deployment Anda. Untuk mengetahui informasi selengkapnya, lihat Menskalakan aplikasi.
- Tinjau dan optimalkan aplikasi Anda agar menggunakan lebih sedikit resource.
- Meningkatkan kapasitas node:
- Tingkatkan CPU dan memori yang dialokasikan untuk node. Untuk mengetahui informasi selengkapnya, lihat Menskalakan secara vertikal dengan mengubah atribut mesin node.
- Jika masalah terkait disk, tingkatkan ukuran disk boot node. Pertimbangkan untuk menggunakan boot disk SSD untuk performa yang lebih baik.
Untuk cluster Autopilot, Anda tidak secara langsung mengontrol jenis mesin node atau ukuran disk booting. Kapasitas node dikelola secara otomatis berdasarkan permintaan Pod Anda. Pastikan permintaan resource workload Anda berada dalam batas Autopilot dan mencerminkan kebutuhan aplikasi Anda secara akurat. Masalah resource persisten mungkin menunjukkan perlunya mengoptimalkan permintaan Pod atau, dalam kasus yang jarang terjadi, masalah platform yang memerlukan bantuan dari Cloud Customer Care.
Menyelesaikan peristiwa OOM tingkat sistem
Peristiwa Out of Memory (OOM) tingkat sistem terjadi saat total memori node habis, sehingga memaksa kernel Linux menghentikan proses untuk mengosongkan resource. Peristiwa ini berbeda dengan peristiwa OOM tingkat penampung, di mana satu Pod melampaui batas memorinya.
Gejala:
Jika Anda melihat gejala berikut, peristiwa OOM tingkat sistem kemungkinan menjadi penyebab ketidakstabilan node:
- Anda melihat pesan
Out of memory: Kill processdi log konsol serial node. - Log kubelet berisi peristiwa
oom_watcher, yang menunjukkan bahwa kubelet telah mendeteksi peristiwa OOM tingkat sistem. - Penghentian proses yang tidak terduga, termasuk daemon sistem atau Pod workload yang berpotensi penting, tidak selalu merupakan konsumen memori tertinggi.
Penyebab:
Memori keseluruhan node habis. Masalah ini dapat disebabkan oleh bug di layanan sistem, workload yang salah dikonfigurasi yang menggunakan memori dalam jumlah berlebihan, atau node yang terlalu kecil untuk permintaan memori kolektif dari semua Pod yang berjalan di dalamnya.
Resolusi:
Untuk mengatasi peristiwa OOM tingkat sistem, diagnosis penyebabnya, lalu kurangi permintaan memori atau tingkatkan kapasitas node. Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah peristiwa OOM.
Menyelesaikan masalah PLEG
Generator peristiwa siklus proses Pod (PLEG) adalah komponen dalam kubelet. Secara berkala, kubelet memeriksa status semua container di node dan melaporkan perubahan apa pun kembali ke kubelet.
Jika mengalami masalah performa, PLEG tidak dapat memberikan update tepat waktu ke kubelet, yang dapat menyebabkan node menjadi tidak stabil.
Gejala:
Jika Anda mengamati gejala berikut, PLEG mungkin tidak berfungsi dengan benar:
- Log kubelet untuk node berisi pesan yang mirip dengan
PLEG is not healthy. - Status node sering berubah antara
ReadydanNotReady.
Penyebab:
Masalah PLEG biasanya disebabkan oleh masalah performa yang mencegah kubelet menerima update tepat waktu dari runtime penampung. Penyebab umum meliputi hal-hal berikut:
- Beban CPU tinggi: CPU node penuh, sehingga kubelet dan runtime container tidak memiliki daya pemrosesan yang dibutuhkan.
- Pembatasan I/O: disk booting node mengalami operasi I/O yang berat, yang dapat memperlambat semua tugas terkait disk.
- Pod Berlebihan: terlalu banyak Pod pada satu node dapat membebani kubelet dan runtime container, sehingga menyebabkan perebutan resource.
Resolusi:
Untuk cluster Standard, kurangi tekanan pada resource node:
- Kurangi beban node: kurangi beban kerja keseluruhan pada node dengan mengecilkan skala deployment. Anda juga dapat mendistribusikan Pod secara lebih merata di seluruh node lain dalam cluster dengan menggunakan taint dan toleransi, afinitas node, atau batasan penyebaran topologi Pod untuk memengaruhi penjadwalan.
- Tetapkan batas CPU: untuk mencegah satu workload menggunakan semua resource CPU yang tersedia, terapkan batas CPU pada Pod Anda. Untuk mengetahui informasi selengkapnya, lihat Pengelolaan Resource untuk Pod dan Container dalam dokumentasi Kubernetes.
- Meningkatkan kapasitas node: pertimbangkan untuk menggunakan node yang lebih besar dengan lebih banyak CPU dan memori untuk menangani beban kerja. Untuk mengetahui informasi selengkapnya, lihat Menskalakan secara vertikal dengan mengubah atribut mesin node.
- Meningkatkan performa disk: jika masalah terkait dengan pembatasan I/O, gunakan boot disk yang lebih besar atau upgrade ke boot disk SSD. Perubahan ini dapat meningkatkan performa disk secara signifikan. Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah performa disk.
Untuk cluster Autopilot, meskipun Anda tidak dapat mengubah ukuran atau jenis disk node yang ada secara langsung, Anda dapat memengaruhi hardware tempat workload Anda berjalan dengan menggunakan ComputeClass kustom. Fitur ini memungkinkan Anda menentukan persyaratan dalam manifes workload, seperti jumlah CPU dan memori minimum atau seri mesin tertentu, untuk memandu tempat Pod Anda dijadwalkan.
Jika Anda tidak menggunakan ComputeClass, sesuaikan deployment workload (seperti jumlah replika dan permintaan atau batas resource) dan pastikan deployment tersebut berada dalam batasan Autopilot. Jika masalah PLEG berlanjut setelah mengoptimalkan beban kerja, hubungi Cloud Customer Care.
Menyelesaikan proses yang macet dalam status D
Proses yang macet dalam mode tidur disk yang tidak dapat diinterupsi (status D) dapat membuat node
tidak responsif. Masalah ini mencegah Pod dihentikan dan dapat menyebabkan komponen
kritis seperti containerd gagal, sehingga menghasilkan status NotReady.
Gejala:
- Pod, terutama yang menggunakan penyimpanan jaringan seperti NFS, akan mengalami masalah pada status
Terminatingdalam waktu yang lama. - Log Kubelet menampilkan error
DeadlineExceededsaat mencoba menghentikan penampung. - Log konsol serial node mungkin menampilkan pesan kernel tentang
hung tasksatau tugas yang diblokir selama lebih dari 120 detik.
Penyebab:
Proses memasuki status D saat menunggu operasi I/O selesai dan tidak dapat diinterupsi. Penyebab umumnya meliputi:
- Sistem file jarak jauh yang lambat atau tidak responsif, seperti berbagi NFS yang salah dikonfigurasi atau kelebihan beban.
- Penurunan performa disk yang parah atau error I/O hardware pada disk lokal node.
Resolusi:
Untuk mengatasi masalah pada proses status D, identifikasi sumber I/O, lalu hapus status dengan memilih salah satu opsi berikut:
Cluster standar
Temukan proses yang macet dan tentukan apa yang ditunggunya:
Hubungkan ke node yang terpengaruh menggunakan SSH:
gcloud compute ssh NODE_NAME \ --zone ZONE \ --project PROJECT_IDGanti kode berikut:
NODE_NAME: nama node yang akan dihubungkan.ZONE: zona Compute Engine node.PROJECT_ID: Project ID Anda.
Menemukan proses apa pun dalam status D:
ps -eo state,pid,comm,wchan | grep '^D'Outputnya mirip dengan hal berikut ini:
D 12345 my-app nfs_wait D 54321 data-writer io_scheduleOutput tidak akan memiliki header. Kolom, secara berurutan, mewakili:
- Negara bagian/Provinsi
- ID Proses (PID)
- Perintah
- Channel tunggu (wchan)
Periksa kolom
wchanuntuk mengidentifikasi sumber I/O:- Jika kolom
wchanmencakup istilah sepertinfsataurpc, proses sedang menunggu berbagi NFS. - Jika kolom
wchanmenyertakan istilah sepertiio_schedule,jbd2, atauext4, proses menunggu disk boot lokal node.
- Jika kolom
Untuk mengetahui detail selengkapnya tentang fungsi kernel yang ditunggu proses, periksa stack panggilan kernel proses:
cat /proc/PID/stackGanti
PIDdengan ID proses yang Anda temukan di langkah sebelumnya.
Mulai ulang node. Mulai ulang sering kali menjadi cara paling efektif untuk menghapus proses yang macet dalam status D.
- Pindahkan node.
- Hapus instance VM pokok. GKE biasanya membuat VM baru untuk menggantikannya.
Setelah masalah langsung teratasi, selidiki sistem penyimpanan yang mendasarinya untuk mencegah terulang kembali.
Untuk masalah penyimpanan jaringan (NFS): gunakan alat pemantauan penyedia penyimpanan Anda untuk memeriksa latensi tinggi, error sisi server, atau masalah jaringan antara node GKE dan server NFS.
Untuk masalah disk lokal: periksa pembatasan I/O di Cloud Monitoring dengan melihat metrik
compute.googleapis.com/instance/disk/throttled_read_ops_countdancompute.googleapis.com/instance/disk/throttled_write_ops_countuntuk instance Compute Engine.
Cluster Autopilot
Coba identifikasi sumber penyumbatan:
Akses SSH langsung ke node dan menjalankan perintah seperti
psataucat /proctidak tersedia di cluster Autopilot. Anda harus mengandalkan log dan metrik.- Periksa log node: di Cloud Logging, analisis log dari node yang terpengaruh. Filter menurut nama node dan jangka waktu masalah. Cari pesan kernel yang menunjukkan error I/O, waktu tunggu penyimpanan (misalnya, ke disk atau NFS), atau pesan dari driver CSI.
- Periksa log workload: periksa log Pod yang berjalan di node yang terpengaruh. Log aplikasi dapat mengungkapkan error terkait operasi file, panggilan database, atau akses penyimpanan jaringan.
- Gunakan Cloud Monitoring: meskipun Anda tidak bisa mendapatkan detail tingkat proses, periksa masalah I/O tingkat node.
Picu penggantian node untuk menghapus status.
Anda tidak dapat menghapus VM yang mendasarinya secara manual. Untuk memicu penggantian, kuras node. Tindakan ini akan mengisolasi node dan mengeluarkan Pod.
GKE secara otomatis mendeteksi node yang tidak sehat dan memulai perbaikan, biasanya dengan mengganti VM yang mendasarinya.
Jika node tetap macet setelah pengurasan dan tidak diganti secara otomatis, hubungi Cloud Customer Care.
Setelah masalah langsung teratasi, selidiki sistem penyimpanan yang mendasarinya untuk mencegah terulang kembali.
- Untuk masalah disk lokal: periksa throttling I/O di Cloud Monitoring dengan melihat metrik
compute.googleapis.com/instance/disk/throttled_read_ops_countdancompute.googleapis.com/instance/disk/throttled_write_ops_count. Anda dapat memfilter metrik ini untuk grup instance pokok kumpulan node, meskipun instance individual dikelola oleh Google. - Untuk masalah penyimpanan jaringan (NFS): gunakan alat pemantauan penyedia penyimpanan Anda untuk memeriksa latensi tinggi, error sisi server, atau masalah jaringan antara node GKE dan server NFS. Periksa log dari Pod driver CSI apa pun di Cloud Logging.
- Untuk masalah disk lokal: periksa throttling I/O di Cloud Monitoring dengan melihat metrik
Memecahkan masalah kegagalan komponen inti
Setelah Anda mengesampingkan penyebab yang diharapkan dan kekurangan resource, software node atau mekanisme Kubernetes inti mungkin menjadi penyebab masalah. Status NotReady
dapat terjadi saat komponen penting, seperti runtime container, gagal.
Hal ini juga dapat terjadi saat mekanisme health check Kubernetes inti, seperti sistem sewa node, rusak.
Menyelesaikan masalah runtime container
Masalah pada runtime container, seperti containerd, dapat mencegah kubelet meluncurkan Pod di node.
Gejala:
Jika Anda melihat pesan berikut di log kubelet, masalah runtime penampung adalah kemungkinan penyebab status NotReady node:
Container runtime not readyContainer runtime docker failed!docker daemon exited- Error saat menghubungkan ke socket runtime (misalnya,
unix:///var/run/docker.sockatauunix:///run/containerd/containerd.sock).
Penyebab:
Runtime penampung tidak berfungsi dengan benar, salah dikonfigurasi, atau macet dalam loop mulai ulang.
Resolusi:
Untuk mengatasi masalah runtime container, lakukan langkah-langkah berikut:
Menganalisis log runtime container:
Di konsol Google Cloud , buka halaman Logs Explorer.
Untuk melihat semua log peringatan dan error runtime container di node yang terpengaruh, masukkan perintah berikut di panel kueri:
resource.type="k8s_node" resource.labels.node_name="NODE_NAME" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="LOCATION" log_id("container-runtime") severity>=WARNINGGanti kode berikut:
NODE_NAME: nama node yang Anda selidiki.CLUSTER_NAME: nama cluster Anda.LOCATION: region atau zona Compute Engine (misalnya,us-central1atauus-central1-a) untuk cluster.
Klik Run query dan tinjau output untuk melihat pesan error tertentu yang menunjukkan alasan runtime gagal. Pesan seperti
failed to load TOMLdi logcontainerddi Cloud Logging sering kali menunjukkan file yang salah format.Untuk memeriksa apakah runtime terjebak dalam loop mulai ulang, jalankan kueri yang menelusuri pesan saat sistem dimulai. Banyaknya pesan ini dalam jangka waktu singkat mengonfirmasi bahwa perangkat sering dimulai ulang.
resource.type="k8s_node" resource.labels.node_name="NODE_NAME" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="LOCATION" log_id("container-runtime") ("starting containerd" OR "Containerd cri plugin version" OR "serving..." OR "loading plugin" OR "containerd successfully booted")Mulai ulang yang sering kali menunjukkan masalah mendasar, seperti file konfigurasi yang rusak atau tekanan resource, yang menyebabkan layanan error berulang kali.
Tinjau konfigurasi
containerduntuk melihat modifikasi: setelan yang salah dapat menyebabkan runtime container gagal. Anda dapat membuat perubahan konfigurasi melalui file konfigurasi sistem node atau melalui modifikasi langsung yang dilakukan oleh workload dengan hak istimewa yang ditingkatkan.Tentukan apakah node pool menggunakan file konfigurasi sistem node:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION \ --format="yaml(config.containerdConfig)"Ganti kode berikut:
NODE_POOL_NAME: nama node pool Anda.CLUSTER_NAME: nama cluster Anda.LOCATION: region atau zona Compute Engine cluster Anda.
Jika output menampilkan bagian
containerdConfig, berarti GKE mengelola setelan kustom ini. Untuk mengubah atau mengembalikan setelan, ikuti petunjuk di Menyesuaikan konfigurasi containerd di node GKE.Jika penyesuaian yang dikelola GKE tidak aktif, atau jika Anda mencurigai perubahan lain, cari workload yang mungkin memodifikasi sistem file node secara langsung. Cari DaemonSet dengan izin yang ditingkatkan (
securityContext.privileged: true) atau volumehostPathyang memasang direktori sensitif seperti/etc.Untuk memeriksa konfigurasinya, cantumkan semua DaemonSet dalam format YAML:
kubectl get daemonsets --all-namespaces -o yamlTinjau output dan periksa log DaemonSet yang mencurigakan.
Untuk cluster Standar, periksa file konfigurasi secara langsung. Akses SSH dan pemeriksaan file manual tidak dapat dilakukan di cluster Autopilot, karena Google mengelola konfigurasi runtime. Laporkan masalah runtime yang terus berlanjut ke Google Cloud Customer Care.
Jika Anda menggunakan cluster Standar, periksa file:
Hubungkan ke node menggunakan SSH:
gcloud compute ssh NODE_NAME \ --zone ZONE \ --project PROJECT_IDGanti kode berikut:
NODE_NAME: nama node yang akan dihubungkan.ZONE: zona Compute Engine node.PROJECT_ID: Project ID Anda.
Tampilkan isi file konfigurasi containerd:
sudo cat /etc/containerd/config.tomlUntuk memeriksa perubahan terbaru, cantumkan detail file:
ls -l /etc/containerd/config.toml
Bandingkan konten file ini dengan output containerdConfig dari perintah
gcloud node-pools describeyang Anda jalankan di langkah sebelumnya. Setelan apa pun di/etc/containerd/config.tomlyang tidak ada di outputgcloudadalah perubahan yang tidak dikelola.Untuk memperbaiki kesalahan konfigurasi, hapus perubahan yang tidak diterapkan melalui konfigurasi sistem node.
Memecahkan masalah umum runtime: untuk mengetahui langkah-langkah pemecahan masalah lainnya, lihat Memecahkan masalah runtime container.
Menyelesaikan masalah dengan namespace kube-node-lease
Resource di namespace kube-node-lease bertanggung jawab untuk menjaga
kesehatan node. Namespace ini tidak boleh dihapus. Upaya untuk menghapus namespace ini akan menyebabkan namespace terjebak dalam status Terminating. Jika namespace kube-node-lease mengalami masalah dan berstatus Terminating, kubelet tidak dapat memperpanjang masa berlaku health check-nya. Masalah ini menyebabkan bidang kontrol menganggap node tidak sehat, sehingga menyebabkan masalah di seluruh cluster yang membuat node bergantian antara status Ready dan NotReady.
Gejala:
Jika Anda mengamati gejala berikut, kemungkinan penyebab ketidakstabilan di seluruh cluster adalah masalah pada namespace kube-node-lease:
Log kubelet di setiap node menampilkan error persisten yang mirip dengan berikut:
leases.coordination.k8s.io NODE_NAME is forbidden: unable to create new content in namespace kube-node-lease because it is being terminatedNode di seluruh cluster berulang kali berganti-ganti antara status
ReadydanNotReady.
Penyebab:
Namespace kube-node-lease, yang mengelola detak jantung node, macet secara tidak normal dalam status Terminating. Error ini mencegah server API Kubernetes mengizinkan pembuatan atau modifikasi objek dalam namespace. Akibatnya, kubelet tidak dapat memperbarui objek Lease, yang penting untuk memberi sinyal keaktifannya ke bidang kontrol. Tanpa update status ini, bidang kontrol tidak dapat mengonfirmasi bahwa node dalam kondisi baik, sehingga status node bergantian antara Ready dan NotReady.
Alasan mendasar mengapa namespace kube-node-lease itu sendiri mungkin macet dalam status Terminating mencakup hal berikut:
- Resource dengan finalizer: meskipun kurang umum untuk namespace
kube-node-leasesistem (yang terutama berisi objekLease), resource di dalamnya dapat memiliki finalizer. Finalizer Kubernetes adalah kunci yang menandakan bahwa pengontrol harus melakukan tugas pembersihan sebelum resource dapat dihapus. Jika pengontrol yang bertanggung jawab untuk menghapus finalizer tidak berfungsi dengan benar, resource tidak akan dihapus, dan proses penghapusan namespace akan dihentikan. - Layanan API gabungan yang tidak berfungsi atau tidak responsif: penghentian namespace dapat diblokir jika objek APIService, yang digunakan untuk mendaftarkan server API gabungan, ditautkan ke namespace dan menjadi tidak berfungsi. Bidang kontrol mungkin menunggu server API gabungan dimatikan atau dibersihkan dengan benar, yang tidak akan terjadi jika layanan tidak responsif.
- Masalah bidang kontrol atau pengontrol: dalam kasus yang jarang terjadi, bug atau masalah dalam bidang kontrol Kubernetes, khususnya pengontrol namespace, dapat mencegah keberhasilan pengumpulan sampah dan penghapusan namespace.
Resolusi:
Ikuti panduan di Memecahkan masalah namespace yang terjebak dalam status Menghentikan.
Memecahkan masalah konektivitas jaringan
Masalah jaringan dapat mencegah node berkomunikasi dengan bidang kontrol atau
mencegah komponen penting seperti plugin CNI berfungsi, sehingga menyebabkan status
NotReady.
Gejala:
Jika Anda mengamati gejala berikut, masalah jaringan mungkin menjadi penyebab status NotReady node Anda:
- Kondisi
NetworkNotReadyadalahTrue. - Log Kubelet di node menampilkan error yang mirip dengan berikut ini:
connection timeout to the control plane IP addressnetwork plugin not readyCNI plugin not initialized- Pesan
connection refusedatautimeoutsaat mencoba menjangkau alamat IP bidang kontrol.
- Pod, terutama di namespace
kube-system, macet diContainerCreatingdengan peristiwa sepertiNetworkPluginNotReady.
Penyebab:
Gejala terkait jaringan biasanya menunjukkan kegagalan di salah satu area berikut:
- Masalah konektivitas: node tidak dapat membuat koneksi jaringan yang stabil ke panel kontrol Kubernetes.
- Kegagalan plugin CNI: plugin CNI, yang bertanggung jawab untuk mengonfigurasi jaringan Pod, tidak berjalan dengan benar atau gagal diinisialisasi.
- Masalah webhook: webhook penerimaan yang salah dikonfigurasi dapat mengganggu resource terkait plugin CNI, sehingga mencegah jaringan dikonfigurasi dengan benar.
Resolusi:
Untuk mengatasi masalah jaringan, lakukan langkah-langkah berikut:
Mengatasi status
NetworkNotReadysementara: pada node yang baru dibuat, wajar jika terjadi peristiwaNetworkNotReadysingkat. Status ini akan diselesaikan dalam satu atau dua menit saat plugin CNI dan komponen lainnya diinisialisasi. Jika status tetap sama, lanjutkan dengan langkah-langkah berikut.Verifikasi konektivitas node-ke-bidang kontrol dan aturan firewall: pastikan jalur jaringan antara node dan bidang kontrol terbuka dan berfungsi dengan benar:
- Periksa aturan firewall: pastikan aturan firewall VPC Anda mengizinkan traffic yang diperlukan antara node GKE dan panel kontrol. Untuk mengetahui informasi tentang aturan yang diperlukan GKE untuk komunikasi node-ke-bidang kontrol, lihat Aturan firewall yang dibuat secara otomatis.
- Uji konektivitas: gunakan Uji Konektivitas di Network Intelligence Center untuk memverifikasi jalur jaringan antara alamat IP internal node dan alamat IP endpoint bidang kontrol di port
443. HasilNot Reachablesering kali membantu Anda mengidentifikasi aturan firewall atau masalah perutean yang memblokir komunikasi.
Selidiki status dan log plugin CNI: jika jaringan node tidak siap, plugin CNI mungkin menjadi penyebabnya.
Periksa status Pod CNI: identifikasi plugin CNI yang digunakan (misalnya,
netdataucalico-node) dan periksa status Pod-nya di namespacekube-system. Anda dapat memfilter node tertentu dengan perintah berikut:kubectl get pods \ -n kube-system \ -o wide \ --field-selector spec.nodeName=NODE_NAME \ | grep -E "netd|calico|anetd"Periksa log Pod CNI: jika Pod tidak berfungsi dengan benar, periksa lognya di Cloud Logging untuk melihat pesan error mendetail. Gunakan kueri yang mirip dengan berikut untuk Pod
netddi node tertentu:resource.type="k8s_container" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="LOCATION" resource.labels.namespace_name="kube-system" labels."k8s-pod/app"="netd" resource.labels.node_name="NODE_NAME" severity>=WARNINGMengatasi error CNI tertentu:
- Jika log menampilkan
Failed to allocate IP address, rentang alamat IP Pod Anda mungkin sudah habis. Verifikasi pemanfaatan alamat IP Pod Anda dan tinjau rentang CIDR cluster Anda. - Jika log menampilkan
NetworkPluginNotReadyataucni plugin not initialized, pastikan node memiliki resource CPU dan memori yang memadai. Anda juga dapat mencoba memulai ulang Pod CNI dengan menghapusnya, yang memungkinkan DaemonSet membuatnya kembali. - Jika Anda menggunakan GKE Dataplane V2 dan log menampilkan
Cilium API client timeout exceeded, mulai ulang Podanetddi node.
- Jika log menampilkan
Periksa apakah ada interferensi webhook penerimaan: webhook yang tidak berfungsi dengan baik dapat mencegah Pod CNI dimulai, sehingga membuat node dalam status
NetworkNotReady.Periksa log server API: tinjau log server API di Cloud Logging untuk mengetahui error terkait panggilan webhook. Untuk mengidentifikasi apakah webhook memblokir pembuatan resource CNI, cari pesan seperti
failed calling webhook.Jika webhook menyebabkan masalah, Anda mungkin perlu mengidentifikasi
ValidatingWebhookConfigurationatauMutatingWebhookConfigurationyang bermasalah dan menonaktifkannya untuk sementara agar node siap. Untuk mengetahui informasi selengkapnya, lihat Mengatasi masalah yang disebabkan oleh webhook penerimaan.
Memecahkan masalah kesalahan konfigurasi cluster
Bagian berikut membantu Anda mengaudit beberapa konfigurasi di seluruh cluster yang mungkin mengganggu operasi node normal.
Menyelesaikan masalah yang disebabkan oleh webhook penerimaan
Webhook penerimaan yang salah dikonfigurasi, tidak tersedia, atau terlalu lambat dapat memblokir permintaan API penting, sehingga mencegah komponen penting dimulai atau node bergabung dengan cluster.
Gejala:
Jika Anda mengamati gejala berikut, webhook penerimaan yang salah dikonfigurasi atau tidak tersedia kemungkinan memblokir operasi cluster penting:
- Pod, terutama di namespace
kube-system(seperti Pod CNI atau penyimpanan), terjebak dalam statusPendingatauTerminating. - Node baru gagal bergabung dengan cluster, sering kali kehabisan waktu dengan status
NotReadystatus.
Penyebab:
Webhook penerimaan yang salah dikonfigurasi atau tidak responsif dapat memblokir operasi cluster penting.
Resolusi:
Tinjau konfigurasi webhook Anda untuk memastikan konfigurasi tersebut tangguh dan tercakup dengan benar. Untuk mencegah gangguan, tetapkan kolom failurePolicy ke Ignore
untuk webhook non-kritis. Untuk webhook penting, pastikan layanan pendukungnya sangat tersedia dan kecualikan namespace kube-system dari pengawasan webhook dengan menggunakan namespaceSelector untuk menghindari kebuntuan bidang kontrol. Untuk
informasi selengkapnya, lihat
Memastikan stabilitas bidang kontrol saat menggunakan
webhook.
Menyelesaikan masalah yang disebabkan oleh kuota resource
Kuota
resource yang salah dihitung di
namespace kube-system dapat mencegah GKE membuat Pod sistem
penting. Karena komponen seperti jaringan (CNI) dan DNS diblokir, masalah ini dapat menghentikan node baru agar tidak berhasil bergabung dengan cluster.
Gejala:
- Pod penting di namespace
kube-system(misalnya,netd,konnectivity-agent, ataukube-dns) macet dalam statusPending. - Pesan error di log cluster atau output
kubectl describe podmenunjukkan kegagalan sepertiexceeded quota: gcp-critical-pods.
Penyebab:
Masalah ini terjadi saat pengontrol kuota resource Kubernetes berhenti memperbarui jumlah yang digunakan secara akurat dalam objek ResourceQuota. Penyebab umumnya adalah webhook penerimaan pihak ketiga yang tidak berfungsi dengan baik yang memblokir update pengontrol, sehingga penggunaan kuota tampak jauh lebih tinggi daripada yang sebenarnya.
Resolusi:
- Karena webhook yang bermasalah adalah penyebab utama yang paling mungkin, ikuti panduan di bagian Mengatasi masalah yang disebabkan oleh webhook penerimaan untuk mengidentifikasi dan memperbaiki webhook yang mungkin memblokir komponen sistem. Memperbaiki webhook sering kali menyelesaikan masalah kuota secara otomatis.
Pastikan penggunaan kuota yang tercatat tidak sinkron dengan jumlah Pod yang berjalan sebenarnya. Langkah ini mengonfirmasi apakah jumlah objek ResourceQuota salah:
Periksa penggunaan yang dilaporkan untuk kuota:
kubectl get resourcequota gcp-critical-pods -n kube-system -o yamlPeriksa jumlah Pod yang sebenarnya:
kubectl get pods -n kube-system --no-headers | wc -l
Jika jumlah yang digunakan di
ResourceQuotatampak salah (misalnya, jauh lebih tinggi daripada jumlah Pod yang sebenarnya), hapus objekgcp-critical-pods. Bidang kontrol GKE dirancang untuk otomatis membuat ulang objek ini dengan jumlah penggunaan yang benar dan disesuaikan:kubectl delete resourcequota gcp-critical-pods -n kube-systemPantau namespace
kube-systemselama beberapa menit untuk memastikan objek dibuat ulang dan Pod yang tertunda mulai dijadwalkan.
Menyelesaikan masalah yang disebabkan oleh DaemonSet pihak ketiga
DaemonSet pihak ketiga yang baru di-deploy atau diupdate, yang sering digunakan untuk keamanan, pemantauan, atau logging, terkadang dapat menyebabkan ketidakstabilan node. Masalah ini dapat terjadi jika DaemonSet mengganggu runtime atau jaringan container node, menggunakan resource sistem yang berlebihan, atau membuat modifikasi sistem yang tidak terduga.
Gejala:
Jika Anda mengamati gejala berikut, DaemonSet pihak ketiga yang baru di-deploy atau diubah adalah kemungkinan penyebab kegagalan node:
- Beberapa node, yang berpotensi berada di seluruh cluster, memasuki status
NotReadysegera setelah DaemonSet di-deploy atau diperbarui. - Log kubelet untuk node yang terpengaruh melaporkan error seperti berikut:
container runtime is downFailed to create pod sandbox- Error saat menghubungkan ke soket runtime container (misalnya,
/run/containerd/containerd.sock).
- Pod, termasuk Pod sistem atau Pod DaemonSet itu sendiri, macet dalam status
PodInitializingatauContainerCreating. - Log container untuk aplikasi menampilkan error yang tidak biasa, seperti
exec format error. - Pendeteksi Masalah Node dapat melaporkan kondisi yang terkait dengan kondisi runtime atau tekanan resource.
Penyebab:
DaemonSet pihak ketiga dapat memengaruhi stabilitas node karena alasan berikut:
- Menggunakan CPU, memori, atau I/O disk secara berlebihan, yang memengaruhi performa komponen node penting.
- Mengganggu operasi runtime container.
- Menyebabkan konflik dengan konfigurasi jaringan node atau plugin Container Network Interface (CNI).
- Mengubah konfigurasi sistem atau kebijakan keamanan dengan cara yang tidak diinginkan.
Resolusi:
Untuk menentukan apakah DaemonSet adalah penyebabnya, isolasi dan uji:
Mengidentifikasi DaemonSet: mencantumkan semua DaemonSet yang berjalan di cluster Anda:
kubectl get daemonsets --all-namespacesPerhatikan baik-baik DaemonSet yang bukan bagian dari penginstalan GKE default.
Anda sering kali dapat mengidentifikasi DaemonSet ini dengan meninjau hal berikut:
- Namespace: Komponen GKE default biasanya berjalan di
namespace
kube-system. DaemonSet di namespace lain kemungkinan adalah pihak ketiga atau kustom. - Penamaan: DaemonSet default sering kali memiliki nama seperti
gke-metrics-agent,netd, ataucalico-node. Agen pihak ketiga sering kali memiliki nama yang mencerminkan produk.
- Namespace: Komponen GKE default biasanya berjalan di
namespace
Korelasikan waktu deployment: periksa apakah munculnya node
NotReadybertepatan dengan deployment atau update DaemonSet pihak ketiga tertentu.Uji pada satu node:
- Pilih satu node yang terpengaruh.
- Halangi dan kosongkan node.
- Mencegah DaemonSet dijadwalkan di node ini untuk sementara waktu:
- Terapkan label node sementara dan konfigurasi afinitas atau anti-afinitas node dalam manifes DaemonSet.
- Hapus Pod DaemonSet di node tertentu tersebut.
- Mulai ulang instance virtual machine node.
- Amati apakah node menjadi
Readydan tetap stabil saat DaemonSet tidak berjalan di node tersebut. Jika masalah muncul kembali setelah DaemonSet diperkenalkan kembali, kemungkinan hal ini menjadi faktor penyebabnya.
Hubungi vendor: jika Anda mencurigai bahwa penyebabnya adalah agen pihak ketiga, tinjau dokumentasi vendor untuk mengetahui masalah kompatibilitas yang diketahui atau praktik terbaik untuk menjalankan agen di GKE. Jika Anda memerlukan dukungan lebih lanjut, hubungi vendor software.
Pastikan node telah dipulihkan
Setelah menerapkan solusi yang mungkin, ikuti langkah-langkah berikut untuk memverifikasi bahwa node telah berhasil dipulihkan dan stabil:
Periksa status node:
kubectl get nodes -o wideCari node yang terpengaruh dalam output. Kolom
Statussekarang akan menampilkan nilaiReady. Status mungkin memerlukan waktu beberapa menit untuk diperbarui setelah perbaikan diterapkan. Jika status masih menampilkanNotReadyatau berganti-ganti status, berarti masalah belum sepenuhnya teratasi.Periksa bagian
Conditionsnode:kubectl describe node NODE_NAMEDi bagian
Conditions, verifikasi nilai berikut:- Kondisi
Readymemiliki statusTrue. - Kondisi negatif yang sebelumnya memiliki status
True(misalnya,MemoryPressureatauNetworkUnavailable) kini memiliki statusFalse. KolomReasondanMessageuntuk kondisi ini harus menunjukkan bahwa masalah telah diselesaikan.
- Kondisi
Menguji penjadwalan Pod. Jika sebelumnya node tidak dapat menjalankan workload, periksa apakah Pod baru dijadwalkan di node tersebut dan apakah Pod yang ada berjalan tanpa masalah:
kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=NODE_NAMEPod di node harus memiliki status
RunningatauCompleted. Anda tidak akan melihat Pod yang macet dalam status errorPendingatau lainnya.
Langkah berikutnya
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-engineuntuk menelusuri masalah serupa. Anda juga dapat bergabung ke#kubernetes-enginechannel Slack untuk mendapatkan dukungan komunitas lainnya. - Membuka bug atau permintaan fitur menggunakan issue tracker publik.