Senario
Sebuah syarikat SaaS yang berkembang pesat menggunakan puluhan kali sehari. Pasukan mendapati bahawa walaupun saluran paip CI sentiasa lulus hijau, insiden pengeluaran melonjak selepas setiap penggunaan. Amaran muncul dalam beberapa minit: pengguna mengalami tamat masa dan ralat. Penggulungan semula adalah perlahan dan manual, menyebabkan downtime yang panjang.
Gejala
- Amaran P1 sejurus selepas penggunaan.
- Bajet ralat terbakar dengan cepat.
- Penggulungan semula mengambil masa 30+ minit.
- Pasukan Dev dan SRE sentiasa menyalahkan antara satu sama lain.
Diagnosis
Punca utama adalah ketiadaan pengawal CI/CD: tiada gating ujian automatik, analisis canari, kawalan tetingkap penggunaan, atau penggulungan semula automatik berdasarkan pemeriksaan kesihatan. Saluran paip CI hanya menjalankan ujian unit — tiada ujian integrasi, ujian beban, atau imbasan keselamatan. Saluran paip CD menggunakan terus ke pengeluaran penuh tanpa pelancaran beransur-ansur.
Perintah & Konfigurasi
Di bawah adalah contoh persediaan pengawal menggunakan GitHub Actions dan ArgoCD:
# .github/workflows/deploy.yaml
name: Deploy with Guardrails
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run unit tests
run: make test
- name: Run integration tests
run: make integration-test
- name: Security scan
run: trivy image --severity HIGH,CRITICAL --exit-code 1 myapp:${{ github.sha }}
deploy-canary:
needs: test
runs-on: ubuntu-latest
steps:
- name: Deploy canary to 10%
run: kubectl set image deployment/myapp-canary myapp=myapp:${{ github.sha }} -n production
- name: Wait for health check
run: sleep 60 && kubectl rollout status deployment/myapp-canary -n production --timeout=5m
promote:
needs: deploy-canary
runs-on: ubuntu-latest
steps:
- name: Promote to full
run: kubectl set image deployment/myapp myapp=myapp:${{ github.sha }} -n production
- name: Verify deployment
run: kubectl rollout status deployment/myapp -n production --timeout=10m
Kawalan Risiko
- Bendera Ciri: Kawal pendedahan dengan LaunchDarkly atau bendera ConfigMap.
- Pelancaran Beransur-ansur: Gunakan penggulungan semula automatik ArgoCD apabila pemeriksaan kesihatan gagal.
- Tetingkap Penggunaan: Semak masa terhadap tetingkap yang diluluskan dalam CI; tolak jika di luar.
- Gating Bajet Ralat: Sekat penggunaan jika penggunaan bajet ralat melebihi 70%.
Penggulungan Semula
# Gulung semula dengan kubectl
kubectl rollout undo deployment/myapp -n production
# Gulung semula dengan Git revert
revert HEAD
# Gulung semula dengan ArgoCD
argocd app rollback myapp --prune
Pengesahan
- Papan pemuka mengesan: kekerapan penggunaan, kadar kegagalan, bajet ralat, bilangan penggulungan semula.
- Pemeriksaan sintetik: laksanakan laluan pengguna transaksi kritikal setiap 5 minit.
- Peraturan amaran: jika ralat 5xx meningkat >1% dalam 10 minit selepas penggunaan, picu penggulungan semula.
Bila Hantar Tiket OpsGlobal
- Apabila anda perlu mereka bentuk saluran paip pengawal lengkap tetapi tidak mempunyai kepakaran dalaman.
- Apabila pengawal sedia ada gagal dan menyebabkan insiden berulang.
- Apabila anda memerlukan strategi penghantaran progresif kompleks yang diselaraskan merentas berbilang kluster Kubernetes.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu CI/CD dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Ketahui cara melaksanakan pengawal automatik untuk mengelakkan penggunaan yang buruk, mengurangkan masa henti, dan mengekalkan SLO dalam persekitaran Kubernetes.
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.