Senario
Satu pasukan menggunakan Jenkins dan GitLab CI untuk menggunakan mikroservis pada Kubernetes. Mereka sering mengalami kegagalan pelepasan dan masa henti. Mereka mahu menguatkuasakan pengawal CI/CD untuk meningkatkan keselamatan.
Gejala
- Kadar ralat meningkat serta-merta selepas penggunaan produksi
- Pengembalian lambat dan manual
- Pembangun memintas ujian dan menggabung kod secara langsung
Diagnosis
- Ketiadaan get ujian automatik (ujian unit, integrasi, imbasan keselamatan)
- Tiada strategi penghantaran progresif (misalnya, canary)
- Proses pengembalian sepenuhnya manual
- Penggera pemantauan tidak disepadukan dengan saluran paip
Arahan & Konfigurasi Utama
Contoh saluran paip Jenkins dengan peringkat pengawal:
pipeline {
agent any
stages {
stage('Lint') {
steps { sh 'golangci-lint run' }
}
stage('Ujian Unit') {
steps { sh 'go test ./... -cover' }
}
stage('Bina Imej') {
steps { sh 'docker build -t myapp:$BUILD_NUMBER .' }
}
stage('Imbasan Keselamatan') {
steps { sh 'trivy image myapp:$BUILD_NUMBER' }
}
stage('Gunakan ke Pensandian') {
steps { sh 'kubectl set image deployment/myapp-staging myapp=myapp:$BUILD_NUMBER -n staging' }
}
stage('Ujian Asap') {
steps { sh 'newman run smoke-tests.json' }
}
stage('Penggunaan Canary') {
steps {
sh 'kubectl set image deployment/myapp-canary myapp=myapp:$BUILD_NUMBER -n production'
input 'Teruskan dengan pelepasan penuh?'
}
}
stage('Pelepasan Penuh') {
steps { sh 'kubectl set image deployment/myapp myapp=myapp:$BUILD_NUMBER -n production' }
}
}
}
Kawalan Risiko
- Gunakan Flag Ciri: togol fungsi melalui pengurusan konfigurasi
- Get automatik: sekat gabung jika liputan kod < 80%
- Penghantaran progresif: canary dengan 5% trafik selama 15 minit
- Sandaran pra-penggunaan:
kubectl get deployment myapp -o yaml > backup.yaml
Pengembalian
Skrip pengembalian automatik:
kubectl rollout undo deployment/myapp -n production
kubectl rollout status deployment/myapp -n production
Dengan Helm:
helm rollback myapp 1
Pengesahan
- Periksa status pod:
kubectl get pods -n production -l app=myapp - Pantau metrik: Pertanyaan Prometheus kadar ralat
rate(http_requests_total{status=~"5.."}[5m]) - Sahkan versi pengembalian:
kubectl rollout history deployment/myapp -n production
Bila Hantar Tiket OpsGlobal
- Perlu strategi penggunaan progresif lanjutan (biru/hijau)
- Kegagalan saluran paip tanpa punca jelas
- Pengawal automatik tidak berfungsi seperti yang diharapkan
- Keperluan pematuhan menuntut log audit dan konfigurasi get
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu CI/CD dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Post ini membincangkan pelaksanaan pengawal CI/CD dalam Kubernetes, meliputi senario, diagnosis, arahan, kawalan risiko, pengembalian, dan pengesahan untuk pelepasan selamat.
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.