Senario
Perkhidmatan mikro dalam kluster Kubernetes memasuki keadaan CrashLoopBackOff. Log Docker menunjukkan ralat: container_linux.go:367: starting container process caused: process_linux.go:578: executing setns process caused: exit status 1: unexpected EOF. Kontena gagal dimulakan, menjejaskan ketersediaan perkhidmatan.
Gejala
- Status kontena berulang CrashLoopBackOff.
- Output
docker logskosong atau hanya menunjukkan ralat. - Log daemon Docker pada hos menunjukkan ralat runtime.
- Penggunaan sumber sistem normal, tiada OOM.
Diagnosis
1. Periksa Log Kontena
Jalankan docker logs <container-id> untuk melihat stdout/stderr. Jika kosong, kontena gagal semasa inisialisasi.
2. Periksa Keadaan dan Konfigurasi Kontena
docker inspect <container-id> --format '{{.State.Status}} {{.State.ExitCode}}'
Kod keluar bukan sifar: 139 (ralat segmen), 137 (OOM), 127 (arahan tidak ditemui).
3. Analisis Ralat Runtime OCI
Ralat berasal dari runc (runtime OCI lalai). Periksa /var/log/syslog atau journalctl -u docker untuk jejak timbunan terperinci.
journalctl -u docker -n 100 --no-pager | grep -i error
Punca biasa:
- Ketidakserasian versi cgroups (sesetengah aplikasi memerlukan v1, sistem menggunakan v2).
- Isu titik lekap (contohnya /proc, /sys tidak dilekap dengan betul).
- Polisi keselamatan kernel (AppArmor/SELinux menyekat operasi).
4. Uji runc Secara Berasingan
runc exec <container-id> /bin/sh
Jika gagal, runtime itu sendiri bermasalah.
5. Periksa Konfigurasi cgroups
cat /proc/self/cgroup
mount | grep cgroup
Jika menggunakan cgroup v2, sahkan pengawal wujud di bawah /sys/fs/cgroup.
6. Gunakan strace untuk Penjejakan Panggilan Sistem
strace -f -e trace=process docker run --rm alpine echo hello
Kenal pasti panggilan sistem mana yang gagal.
Kawalan Risiko
- Jangan jalankan arahan diagnostik seperti
runc execataustraceterus pada kontena pengeluaran; ia boleh mengubah keadaan kontena. - Tetapkan had sumber (
--memory,--cpu) untuk mengelakkan kehabisan sumber yang mencetuskan isu lain. - Hasilkan semula isu dalam persekitaran pementasan terlebih dahulu.
- Dayakan mod debug Docker (
dockerd --debug) untuk log terperinci, tetapi berhati-hati dengan jumlah log.
Rollback
- Kembalikan kepada imej kontena sebelumnya:
bash kubectl set image deployment/<name> <container>=<image>:<previous-tag> - Jika daemon Docker pada nod Kubernetes tidak berfungsi, mulakan semula:
bash systemctl restart dockerNota: Ini menghentikan semua kontena pada nod; nilaikan kesan. - Jika versi runc disyaki, turun taraf atau pasang semula:
bash apt-get install --reinstall runc=1.0.0-1
Pengesahan
- Selepas rollback, tunggu Pod dimulakan dan periksa status:
bash kubectl rollout status deployment/<name> kubectl logs -f <pod-name> - Akses titik pemeriksaan kesihatan (cth.
/healthz). - Pantau log daemon Docker untuk ralat baharu.
Bila Menghantar Tiket OpsGlobal
- Isu melibatkan modul kernel atau konflik versi cgroups yang memerlukan naik taraf kernel atau perubahan konfigurasi sistem.
- Runtime OCI memerlukan penyesuaian atau naik taraf yang menjejaskan pelbagai perkhidmatan.
- Masalah berterusan merentas berbilang nod, memerlukan audit runtime penuh.
- Pasukan anda tiada kebenaran untuk mengubah suai tetapan peringkat hos (cth. nod terurus Kubernetes).
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu DevOps dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Selami kegagalan runtime Docker sebenar dengan langkah diagnosis boleh tindak, contoh perintah, langkah keselamatan, dan prosedur rollback. Ketahui 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.