这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 Kubernetes 上的 CI/CD 通常包括构建镜像、测试扫描、生成清单、GitOps 同步和发布验证。
28.1 流程
Git commit
-> CI build
-> unit test
-> image build
-> security scan
-> push registry
-> update manifest / GitOps repo
-> CD sync
-> health check
28.2 镜像构建
docker build \
-t registry.example.com/shop/order-service:1.2.0 .
docker push registry.example.com/shop/order-service:1.2.0
CI 建议:
- 版号来自 Git tag 或 commit;
- 构建缓存;
- 测试通过才推送;
- 扫描阻断高危;
- 生成 SBOM;
- 记录来源。
28.3 Manifest 管理
原始清单:
kubectl apply -f deploy.yaml
多环境管理:
| 工具 | 特点 |
|---|---|
| Helm | 包模板和版本化 |
| Kustomize | 原生叠加 |
| Argo CD | GitOps 同步 |
| Flux | GitOps |
Helm values:
image:
repository: registry.example.com/shop/order-service
tag: 1.2.0
replicas: 3
resources:
limits:
cpu: "1"
memory: 1Gi
28.4 GitOps
Application repo:业务代码
Deployment repo:环境期望状态
Cluster controller:同步期望状态
原则:
- Git 是唯一入口;
- 环境分支或目录清晰;
- 状态漂移可发现;
- 审批流程可追溯;
- 回滚就是回退 Git 状态。
28.5 发布验证
自动检查:
- rollout 状态;
- Pod ready;
- HTTP 5xx;
- 核心指标;
- 日志错误;
- 合约测试;
- 冒烟测试。
失败动作可以是暂停、缩回或通知人工确认。
本章小结
CI/CD 的关键是不可变镜像、可追溯清单、环境隔离、自动验证和可回滚发布。GitOps 让集群状态有唯一可信来源。
思考题
- 为什么应用代码和部署仓库可以分离?
- Helm 和 Kustomize 如何选择?
- GitOps 回滚如何执行?
- 发布验证应包含哪些指标?
- 镜像扫描失败如何处理?