Senario
Pada pukul 2 pagi, alert Prometheus berbunyi. Kelompok Kubernetes pengeluaran anda sedang melayan microservice kritikal, tetapi latensi p99 meningkat dan muncul beberapa 503. Pemeriksaan awal mendapati satu node pekerja berstatus NotReady, manakala node lain mengalami MemoryPressure dan DiskPressure. Persaingan sumber jelas menyebabkan kelompok tidak stabil, dan pod sedang diusir—tetapi punca sebenar masih tidak diketahui.
Gejala
- Masa tindak balas meningkat dan terdapat permintaan yang tamat masa.
- Keadaan node bertukar kepada MemoryPressure atau DiskPressure.
kubectl get eventsdipenuhi dengan mesej Evicted dan OOMKilling.- Pod kerap dimulakan semula, dengan CrashLoopBackOff muncul pada perkhidmatan kritikal.
kubectl top nodesmenunjukkan satu atau lebih node menggunakan melebihi 90% CPU atau memori.
Diagnosis
Diagnosis berstruktur membezakan antara kelebihan node dan pod yang tidak terkawal. Mula dengan pandangan global, kemudian mendalami.
- Pemeriksaan kesihatan kelompok: Jalankan
kubectl get nodesdankubectl get events --all-namespaces --sort-by=.lastTimestamp. - Gambaran penggunaan sumber: Guna
kubectl top nodesdankubectl top pods -Auntuk mengesan kawasan tumpuan. - Pemeriksaan keadaan node:
kubectl describe node <node> | grep -A20 'Conditions'mendedahkan keadaan tekanan dan taint. - Perincian pada tahap pod: Untuk beban yang mencurigakan, periksa
kubectl describe pod <pod> -n <namespace>dankubectl get pod <pod> -o yaml. - Pemeriksaan pengembangan HPA: Jika autoscaling digunakan, jalankan
kubectl get hpa -Adan semak nilai min/maks. - Metrik sejarah: Gunakan pertanyaan Prometheus seperti
node_memory_availabledancontainer_cpu_usage_seconds_totaluntuk melihat trend.
Arahan
# Pemeriksaan kesihatan pantas
kubectl get nodes -o wide
kubectl get events --all-namespaces --sort-by=.lastTimestamp
# Penggunaan sumber teratas
kubectl top nodes
kubectl top pods -A
# Periksa tekanan node
kubectl describe node <node> | grep -A20 'Conditions'
# Periksa pod bermasalah
kubectl get pod <pod> -n <namespace> -o yaml
kubectl describe pod <pod> -n <namespace>
# Gelagat HPA
kubectl get hpa -A
kubectl describe hpa <hpa-name> -n <namespace>
# Kesihatan API metrik
kubectl get apiservices | grep metrics
Nota keselamatan: Sebelum sebarang tindakan merosakkan (cth., memadam node atau pod), sahkan bilangan replika semasa dan pastikan ketersediaan minimum. Jangan sekali-kali padam node secara sembarangan; cordon dan drain adalah lebih selamat.
Kawalan Risiko
- Jangan padam node dengan segera—pengusiran berantai boleh menjejaskan kelompok.
- Elakkan but semula global:
kubectl rollout restartboleh menambah beban; lakukan pada waktu trafik rendah jika perlu. - Pencilkan node yang tidak stabil:
kubectl cordon <node>menghentikan pod baru, kemudian drain secara beransur-ansur dengankubectl drain --ignore-daemonsets. - Kurangkan trafik masuk: Alihkan trafik dari node yang terjejas menggunakan service mesh atau peraturan ingress.
- Laraskan had HPA: Tetapkan had keras untuk replika bagi mengelakkan autoscaling yang tidak terkawal.
Pembalikan
Jika insiden berpunca daripada perubahan terkini, pembalikan perlu dilakukan terlebih dahulu.
- HPA: Kembalikan nilai min/maks sebelumnya, atau padam HPA untuk kunci bilangan replika.
- Imej Deployment: Jalankan
kubectl rollout undo deployment/<name>untuk kembali ke imej yang stabil. - Kuota sumber: Jika LimitRange atau ResourceQuota salah konfigurasi, hasilkan semula YAML asal.
- Drain manual: Jika drain tersekat, batalkan atau selesaikan dengan
kubectl uncordonselepas menyelesaikan isu belanjawan gangguan pod.
Pengesahan
Pemulihan bukan sekadar melihat status hijau—pastikan punca sebenar telah dihapuskan.
- Semua node melaporkan Ready dan tiada keadaan tekanan berterusan.
kubectl get eventstidak lagi menunjukkan Evicted atau OOMKilled baharu.- Metrik latensi kembali ke garis dasar; tiada 503.
- Perhatikan gelagat skala HPA untuk beberapa minit untuk memastikan kestabilan.
Bila Menghantar Tiket ke OpsGlobal
Serahkan kepada OpsGlobal jika:
- Insiden berlarutan lebih 30 minit dan punca masih tidak jelas.
- Pod berada dalam CrashLoopBackOff dan tidak dapat dibaiki sendiri.
- Anda mengesyaki masalah infrastruktur asas tetapi tiada akses platform.
- Pasukan anda keletihan dan memerlukan sokongan SRE 24/7.
Apabila membuka tiket, lampirkan output utama kubectl get nodes, kubectl describe node, dan log peristiwa. Jurutera OpsGlobal boleh bertindak dengan cepat dengan maklumat tersebut.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Kubernetes dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Pos ini membincangkan insiden tekanan node dalam kelompok pengeluaran, meliputi pengenalan simptom, diagnosis, arahan kubectl/observability, kawalan risiko, strategi pembalikan, pengesahan, dan bila perlu menghantar tiket ke OpsGlobal.
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.