Senario
Satu pasukan DevOps menguruskan aplikasi mikroservis dengan 50+ pengeluaran harian. Kejadian P1 kerap berlaku apabila kod melepasi pintu kualiti dan digunakan terus ke pengeluaran. Semakan kod manual terlalu lambat, dan pengunduran tidak diotomatikkan, menyebabkan MTTR tinggi.
Gejala
- Amaran segera selepas pengeluaran dengan lonjakan kadar ralat.
- Peringkat saluran dilangkau (contohnya ujian diabaikan).
- Operasi pengunduran mengambil >30 minit secara manual.
- Pembangun menggunakan SSH ke pengeluaran untuk membaiki panas, melangkau CI/CD.
Diagnosis
- Tiada pintu kualiti automatik: Saluran tiada ujian unit, imbasan keselamatan, dsb.
- Tiada pengeluaran kanari: Semua trafik bertukar serentak, risiko gangguan penuh.
- Pengunduran tidak piawai: Langkah manual, tiada pengesahan.
- Kawalan akses lemah: Pembangun boleh memintas saluran dan mengubah pengeluaran terus.
Arahan & Pelaksanaan
1. Tambah Pintu Kualiti dalam GitLab CI
stages:
- test
- build
- deploy-canary
- deploy-production
unit-test:
stage: test
script:
- npm test
only:
- branches
security-scan:
stage: test
script:
- snyk test --all-projects
deploy-canary:
stage: deploy-canary
script:
- kubectl apply -f k8s/canary-deployment.yaml
environment:
name: production/canary
only:
- main
2. Laksanakan Pengeluaran Kanari dengan Flagger
# Pasang Flagger
kubectl apply -f https://raw.githubusercontent.com/fluxcd/flagger/main/artifacts/flagger/canary.yaml
# Tentukan sumber Canary
cat <<EOF | kubectl apply -f -
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: myapp
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
service:
name: myapp
port: 80
analysis:
interval: 30s
threshold: 5
maxWeight: 50
stepWeight: 10
metrics:
- name: request-success-rate
thresholdRange:
min: 99
interval: 1m
EOF
3. Skrip Pengunduran Automatik
# rollback.sh
#!/bin/bash
NAMESPACE=$1
DEPLOYMENT=$2
REVISION=${3:-previous}
kubectl rollout undo deployment/$DEPLOYMENT -n $NAMESPACE --to-revision=$REVISION
4. Kawalan Akses dengan RBAC
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: production
rules:
- apiGroups: ["apps", "extensions"]
resources: ["deployments", "deployments/rollback"]
verbs: [] # Tolak perubahan terus
Kawalan Risiko
- Ujian Automatik: Wajibkan liputan ujian unit ≥80%, kadar lulus integrasi 100%.
- Analisis Kanari: Batal pengeluaran berdasarkan kadar ralat, ambang latensi.
- Polisi sebagai Kod: Guna OPA untuk mewajibkan semua perubahan melalui CI/CD.
- Kelulusan Perubahan: Perlukan kelulusan pengurus Ops untuk tindakan istimewa.
Strategi Pengunduran
- Pengunduran Automatik: Flagger undur automatik apabila metrik kanari melebihi ambang.
- Pengunduran Manual: Guna skrip yang ditetapkan untuk undur ke semakan tertentu.
- Keserasian Pangkalan Data: Pastikan skrip migrasi boleh diterbalikkan; gunakan tampalan data jika perlu.
Pengesahan
- Papan Pemantauan: Cipta papan pengesanan pengeluaran di Grafana yang menunjukkan kadar ralat, latensi, taburan trafik.
- Penjajaran SLO: Takrifkan polisi pengeluaran mengikut SLO perkhidmatan; sekat pengeluaran jika SLO dilanggar.
- Kejuruteraan Kekacauan: Uji mekanisme pengunduran dan pemulihan kegagalan secara berkala dengan eksperimen kekacauan.
Bila Perlu Hantar Tiket OpsGlobal
- Insiden P0 (gangguan perkhidmatan penuh) dengan pengunduran automatik gagal.
- Pagar CI/CD dipintas dan perlu pengukuhan keselamatan segera.
- Bantuan pakar diperlukan untuk strategi kanari kompleks atau peraturan OPA.
- Audit pematuhan yang memerlukan pengesahan pihak ketiga terhadap proses pengeluaran.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu CI/CD dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Artikel ini membincangkan amalan pagar CI/CD meliputi senario, gejala, diagnosis, arahan, kawalan risiko, pengunduran, pengesahan, dan bila perlu menghubungi 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.