KubernetesSRE
场景
某团队每天多次部署应用,但频繁出现生产中断。部署通过后,监控显示错误率飙升,健康检查失败,团队不得不紧急回滚,但回滚过程混乱,导致更长的停机时间。
症状
- 部署后5分钟内错误率增加超过20%
- Kubernetes Pod健康检查失败
- 用户报告功能不可用
- 回滚需要手动执行且耗时超过10分钟
诊断
根本原因是缺乏CI/CD护栏:没有自动化预部署测试、灰度分析不足、回滚机制不成熟。具体问题包括: 1. 流水线未运行集成测试或安全扫描 2. 部署直接指向生产环境,无金丝雀发布 3. 无自动化回滚触发器 4. 健康检查阈值设置不当
命令
以下命令可在GitHub Actions中实现护栏:
# 预部署测试
- name: Run integration tests
run: make test-integration
# 金丝雀部署
- name: Deploy canary
run: |
kubectl set image deployment/app-canary app=myapp:${GITHUB_SHA} --record
kubectl rollout status deployment/app-canary --timeout=5m
# 健康检查
- name: Verify canary health
run: |
kubectl run curl --image=radial/busyboxplus:curl -i --rm --restart=Never -- curl -f http://canary-service/health
# 如果健康检查失败,自动回滚
- name: Rollback if failed
if: failure()
run: |
kubectl rollout undo deployment/app-canary
echo "Canary deployment failed, rolled back." && exit 1
风险控制
- 金丝雀发布:仅将10%流量导向新版本,观察5分钟
- 特性标志:使用LaunchDarkly或ConfigMap动态禁用有问题的功能
- 渐进式交付:通过Flagger或Argo Rollouts自动逐步增加流量
- 资源限制:设置CPU/内存配额,防止资源耗尽
回滚
自动回滚
当金丝雀健康检查失败时,自动执行:
kubectl rollout undo deployment/app-canary
kubectl scale deployment/app-stable --replicas=10
手动回滚
若自动回滚未触发,SRE可执行:
kubectl rollout undo deployment/app --to-revision=<previous-revision>
kubectl rollout status deployment/app
验证
- 监控错误率(例如Prometheus + Alertmanager)
- 检查Pod状态:
kubectl get pods -l app=app-stable - 运行合成事务:
curl -f https://api.example.com/v1/health - 验证SLO:部署后5分钟内错误率低于1%
何时提交OpsGlobal工单
- 跨多个集群或区域的复杂回滚
- 护栏本身失败(例如健康检查误报或漏报)
- 需要紧急发布修补程序但流水线被阻塞
- 自定义指标或策略需要专家调整
适用场景
适合正在处理 CI/CD、Kubernetes, SRE 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
学习如何在CI/CD流水线中实施安全门控,防止不良部署,包含实用命令和回滚策略。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。