Senario
Anda sedang on-call dan menerima amaran bahawa nod dalam kluster telah menjadi NotReady. Pod yang berjalan pada nod tersebut menjadi tidak sihat, beberapa diusir. Rakan sekerja melaporkan aplikasi tamat masa di nod itu.
Gejala
kubectl get nodesmenunjukkan nod sebagaiNotReadykubectl describe node <node>menunjukkan keadaanDiskPressuresebagaiTrue- Pod pada nod dalam status
PendingatauTerminating - Log kubelet mengandungi
eviction manager: attempting to reclaim ephemeral-storage
Diagnosis
- Sahkan status nod:
kubectl get nodes -o wide - Periksa keadaan nod:
kubectl describe node <node> | grep -A5 Conditions - SSH ke nod dan periksa penggunaan cakera:
df -hdandu -sh /var/lib/kubelet - Lihat log kubelet:
journalctl -u kubelet -n 100 --no-pager | grep -i pressure - Periksa peristiwa pengusiran pod:
kubectl get events --field-selector involvedObject.kind=Node,involvedObject.name=<node>
Arahan
# Kordon nod untuk mengelakkan pod baru
kubectl cordon <node>
# Toskan pod dari nod (abaikan DaemonSet, padam data emptyDir)
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
# (SSH ke nod) Kosongkan ruang cakera
ssh user@<node-ip>
sudo journalctl --vacuum-time=1d # bersihkan log lama
sudo docker system prune -a -f # bersihkan imej yang tidak digunakan (jika guna Docker)
# atau containerd: crictl rmi --prune
sudo du -sh /var/log && sudo find /var/log -type f -name "*.log" -mtime +7 -delete
# Sahkan ruang yang dibebaskan
df -h /var/lib/kubelet
Kawalan Risiko
- Pastikan PodDisruptionBudgets (PDB) melindungi beban kerja kritikal sebelum menoskan.
- Jika nod mempunyai storan setempat (hostPath), toskan akan menyebabkan kehilangan data; buat sandaran dahulu.
--delete-emptydir-datamemadamkan volume emptyDir; sahkan tiada data sementara yang penting.- Sentiasa kordon sebelum toskan untuk mengelakkan pengusiran paksa.
Pengembalian
- Jika nod pulih selepas pembersihan (NotReady hilang):
- Nyahkordon nod:
kubectl uncordon <node>- Sahkan pod dijadualkan semula:kubectl get pods -o wide | grep <node> - Jika tekanan cakera berterusan atau kegagalan perkakasan:
- Toskan nod sepenuhnya:
kubectl drain <node> --ignore-daemonsets --force(gunakan dengan berhati-hati) - Nyahtauliah dan ganti nod.
Pengesahan
- Status nod menjadi
Ready:kubectl get nodes - Semua beban kerja berjalan:
kubectl get pods --all-namespaces | grep -v Running | grep -v Completed - Amaran diselesaikan.
Bila Serahkan Tiket OpsGlobal
- Nod tidak boleh dipulihkan melalui pembersihan (kegagalan perkakasan/isu berterusan).
- Pelbagai nod mengalami tekanan cakera serentak, memerlukan penskalaan atau perubahan strategi storan.
- Ketidakpastian tentang kesan operasi pembersihan terhadap pengeluaran.
- Perubahan infrastruktur kekal diperlukan (contohnya, mengubah saiz cakera nod).
Pasukan SRE OpsGlobal menyediakan sokongan 24/7, pembetulan automatik melalui Terraform, dan reka bentuk seni bina kluster yang menyembuhkan sendiri.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Kubernetes dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Panduan praktikal untuk mendiagnosis dan menyelesaikan insiden 'Nod Tidak Sedia' yang disebabkan oleh tekanan cakera, dengan arahan dan kawalan risiko.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.