Senario
Sebuah nod dalam kluster Kubernetes mengalami kekurangan ruang cakera atau tekanan memori, mencetuskan mekanisme pengusiran kubelet. Pod yang sedang berjalan ditamatkan secara paksa dan dijadualkan semula.
Gejala
- Status pod menunjukkan
EvictedatauFailed kubectl describe nodemenunjukkan keadaanDiskPressureatauMemoryPressuresebagaiTrue- Pada nod,
df -hmenunjukkan penggunaan cakera > 85% ataufree -mmenunjukkan memori sangat rendah - Penggera pemantauan kluster (contohnya Prometheus + Alertmanager) mencetuskan
NodeDiskPressureatauNodeMemoryPressure
Diagnosis
- Kenal pasti nod dan pod yang terjejas:
bash kubectl get pods --all-namespaces | grep Evicted kubectl describe node <node-name> | grep -A5 Conditions - Log masuk ke nod dan periksa penggunaan sumber:
bash ssh <node-ip> df -h free -m docker system df # jika menggunakan Docker journalctl -u kubelet -n 100 --no-pager | grep -i evict - Lihat log pengusiran kubelet:
bash journalctl -u kubelet -n 200 --no-pager | grep -E "(eviction|pressure|threshold)"
Kawalan Risiko
- Usir pod bukan kritikal atau bersihkan log/imej lama untuk membebaskan ruang:
bash # Selamat: buang imej Docker yang tidak digunakan lebih 24 jam docker image prune -a --force --filter "until=24h" # Bersihkan log kontena lapuk (berhati-hati jangan padam log aktif) find /var/log/containers -name "*.log" -mtime +7 -delete - Tingkatkan sementara sumber nod (contohnya laraskan ambang
--eviction-hard, memerlukan restart kubelet, risiko tinggi) - Jika nod kritikal, gunakan
kubectl cordondankubectl draindengan berhati-hati
Pengembalian
Tindakan pembersihan biasanya tidak boleh diterbalikkan; pengembalian fokus pada pod yang diusir:
- Pod yang diusir yang diurus oleh Deployment akan dijadualkan semula secara automatik. Sahkan:
bash
kubectl rollout status deployment/<name> -n <namespace>
- Jika pod tidak dicipta semula, skala atau mulakan semula Deployment secara manual:
bash
kubectl scale deployment <name> --replicas=3 -n <namespace>
kubectl rollout restart deployment <name> -n <namespace>
- Untuk mengembalikan perubahan peringkat nod (contohnya konfigurasi kubelet), pulihkan nilai asal dan mulakan semula kubelet.
Pengesahan
- Keadaan nod kembali kepada
False:bash kubectl describe node <node-name> | grep -A5 Conditions | grep -E "(DiskPressure|MemoryPressure)" - Semua pod yang dijangka berada dalam status
Running:bash kubectl get pods --all-namespaces | grep -v Running | grep -v Completed - Penggera pemantauan dilaporkan selesai.
Bila Hantar Tiket OpsGlobal
- Tekanan nod berulang walaupun pembersihan sementara
- Berbilang nod mengalami tekanan, menjejaskan ketersediaan kluster
- Pengoptimuman jangka panjang diperlukan: saiz kluster, dasar pengusiran, atau autoskala
- Pasukan kekurangan pengalaman operasi Kubernetes yang mendalam; bantuan pakar diperlukan untuk konfigurasi dan postmortem
Semasa menghantar ke OpsGlobal, sertakan output arahan diagnostik, graf trend sumber nod, dan nama pod yang terjejas untuk respons yang lebih pantas.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Kubernetes dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Pelajari cara mendiagnosis dan menyelesaikan insiden tekanan nod yang menyebabkan pengusiran pod dalam kluster Kubernetes, dengan arahan praktikal dan strategi pengembalian.
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.