Senario
Pada petang Khamis biasa, pasukan anda menghantar versi baharu aplikasi ke kluster Kubernetes melalui saluran CI/CD. Dalam beberapa minit, amaran pemantauan mula berbunyi — kadar ralat melonjak, latensi P95 melebihi 3 saat, dan kemas kini berguling tersekat dengan hanya satu replika dikemas kini. Ketua keluaran cuba rollback, tetapi saluran paip telah pun melaksanakan langkah seterusnya, menimpa tag imej, dan tindakan rollback itu mencetuskan lebih banyak kekacauan.
Senario ini tidak jarang berlaku. DevOps moden menekankan kelajuan, tetapi proses keluaran tanpa pengadang boleh menukar kesilapan kecil menjadi gangguan. Artikel ini membawa anda melalui insiden biasa, menunjukkan cara mendiagnosis isu didorong CI/CD dan membina set pengadang keluaran yang boleh dilaksanakan.
Gejala
Apabila keluaran mula tidak terkawal, anda selalunya melihat tanda ini:
- Kemas kini berguling tergantung:
kubectl rollout status deployment/webuitidak pernah berjaya; Pod baharu kekal dalam ContainerCreating atau CrashLoopBackOff. - Pemeriksaan kesihatan gagal: Proba liveness dan readiness terus gagal; Pod lama tidak diganti, Pod baharu tidak dapat menerima trafik.
- Kadar ralat melambung: Log aplikasi dipenuhi ralat 5xx, perkhidmatan hiliran tamat masa, dan kolam sambungan pangkalan data habis.
- Keadaan saluran paip tidak konsisten: CI melaporkan kejayaan tetapi CD gagal; atau saluran paip melangkau persetujuan manusia dan menolak imej yang tidak disahkan.
Diagnosis
Untuk mencari punca, jangan terus menyelam ke kod. Kumpul bukti secara sistematik:
- Semak log saluran paip: Kenal pasti peringkat yang gagal atau berkelakuan luar biasa. Sahkan bahawa tag imej, pemboleh ubah persekitaran, dan parameter penggunaan sepadan dengan jangkaan.
- Periksa peristiwa Kubernetes:
kubectl get events --sort-by=.lastTimestamp -n productionakan mendedahkan sebab Pod ditolak atau gagal — ralat tarik imej, had kuota, salah konfigurasi proba. - Periksa butiran Pod: Gunakan
kubectl describe pod <nama-pod> -n productionuntuk memeriksa status dan peristiwa terbaru, terutamanya bahagian Events. - Bandingkan versi lama dan baharu: Jika mungkin, beza imej semasa dengan keluaran terbaik yang diketahui. Ini cepat mengenal pasti konfigurasi yang hanyut atau perubahan kebergantungan.
Perintah
Berikut ialah alat utama anda semasa diagnosis dan pemulihan:
# Semak status rollout, dengan timeout untuk mengelakkan gantung
timeout 30 kubectl rollout status deployment/webui -n production
# Senarai Pod dan kenal pasti replika abnormal
kubectl get pods -n production -l app=webui
# Periksa Pod tertentu, termasuk peristiwa
kubectl describe pod <nama-pod> -n production
# Dapatkan peristiwa kluster mengikut susunan masa
kubectl get events --sort-by=.lastTimestamp -n production
# Jika konfigurasi deployment diragui, lihat definisi semasa
kubectl get deployment webui -n production -o yaml
Nota keselamatan: Gunakan timeout untuk mengelakkan gantung tidak berkesudahan, tetapi jangan memadam Pod atau mengubah suai deployment sewenang-wenangnya dalam pengeluaran melainkan anda telah mengesahkan strategi pemulihan.
Kawalan Risiko
Untuk mengelakkan berulang, wujudkan pengadang pada peringkat proses dan alat:
- Gerbang automatik: Tambah ujian automatik, imbasan keselamatan, dan pengesahan tandatangan imej ke saluran paip. Sebarang kegagalan mesti menghentikan saluran paip.
- Titik persetujuan manusia: Untuk pengeluaran, wajibkan sekurang-kurangnya satu kelulusan semakan rakan sebaya sebelum meneruskan. Ini boleh dikonfigurasikan dalam Jenkins, GitLab CI, atau Argo Rollouts.
- Peluaran berperingkat: Gunakan penggunaan biru-hijau atau canary. Kemas kini berguling asli Kubernetes tidak mempunyai keupayaan rollback automatik; pertimbangkan Argo Rollouts atau Flagger.
- Dasar sebagai kod: Gunakan OPA (Open Policy Agent) atau Kyverno untuk mengesahkan konteks keselamatan, had sumber, daftar imej, dan peraturan lain sebelum sumber Deployment memasuki kluster.
- Rollback automatik: Konfigurasikan proba kesediaan untuk mencetuskan rollback automatik ke versi stabil terakhir. Ciri
setRollbackWindowdananalysisArgo Rollouts boleh menguatkuasakannya dengan tepat. - Pemantauan dan amaran: Bina pemantauan SLO masa keluaran, seperti belanjawan ralat dan belanjawan latensi. Apabila metrik merosot, segera cetuskan proses rollback.
Rollback
Jika anda perlu rollback manual, gunakan perintah berikut:
# Senarai semakan untuk lihat sasaran rollback anda
kubectl rollout history deployment/webui -n production
# Rollback ke versi sebelumnya
kubectl rollout undo deployment/webui -n production
# Atau tentukan semakan tertentu
kubectl rollout undo deployment/webui --to-revision=3 -n production
Nota keselamatan: Sebelum rollback, nilai migrasi pangkalan data dan keserasian API. Jika versi baharu mengubah skema DB, undo mudah mungkin menyebabkan kod lama konflik dengan skema yang tidak serasi. Pulihkan sandaran pangkalan data atau jalankan migrasi songsang jika perlu.
Pengesahan
Selepas rollback, jangan hanya semak Pod berjalan; sahkan pemulihan perniagaan:
# Sahkan rollout selesai
kubectl rollout status deployment/webui -n production
# Semak bilangan dan status Pod
kubectl get pods -n production -l app=webui
# Talian log aplikasi untuk sahkan tiada tindanan ralat
kubectl logs <nama-pod> -n production --tail=50
# Sahkan titik kesihatan (laraskan untuk perkhidmatan anda)
curl -H "Host: webui.internal" http://127.0.0.1:80/healthz
Juga perhatikan kadar ralat, latensi, dan metrik SLO pada papan pemuka anda selama sekurang-kurangnya 15 minit. Jalankan ujian asap hujung-ke-hujung yang mensimulasikan perjalanan pengguna kritikal.
Bila Menghantar Tiket OpsGlobal
Hantar tiket OpsGlobal jika anda menghadapi salah satu daripada yang berikut:
- Rollback gagal, atau isu berterusan selepas rollback dan anda tidak dapat mengenal pasti punca.
- Keadaan kluster tidak dapat dipulihkan, seperti kerosakan etcd atau namespace dipadam.
- Pasukan anda kekurangan pengalaman nyahpepijat Kubernetes lanjutan dan memerlukan kawalan cepat.
- Anda mengesyaki eksploitasi keselamatan terlibat dan memerlukan forensik profesional.
Pasukan SRE OpsGlobal boleh campur tangan dalam beberapa minit, menawarkan sokongan penuh daripada audit saluran paip hingga pemulihan kluster, membantu anda memulihkan perkhidmatan dan mengukuhkan proses keluaran anda.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu CI/CD dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Pelajari cara membenamkan keselamatan dalam saluran CI/CD anda. Daripada mengesan keluaran bermasalah hingga rollback automatik dan pengesahan, kami bincangkan teknik nyahpepijat Kubernetes dan pengadang keluaran untuk membantu pasukan SRE anda mengurangkan insiden.
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.