发布策略和最佳实践
发布策略和最佳实践
镜像标签策略
❌ 不推荐
# 1. 使用 latest 标签
image: myapp:latest
# 2. 使用可变标签
image: myapp:dev
✅ 推荐
# 1. 使用语义化版本
image: myapp:v1.2.3
# 2. 使用 Git SHA
image: myapp:abc1234
# 3. 组合使用
image: myapp:v1.2.3-abc1234
发布策略
1. 滚动更新(默认)
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # 最多额外1个Pod
maxUnavailable: 0 # 保证可用性
2. 蓝绿部署
# 蓝色环境(当前)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-blue
spec:
replicas: 3
template:
metadata:
labels:
app: myapp
version: blue
---
# 绿色环境(新版本)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-green
spec:
replicas: 3
template:
metadata:
labels:
app: myapp
version: green
---
# Service 切换
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
selector:
app: myapp
version: blue # 切换到 green 实现发布
3. 金丝雀发布
使用 Argo Rollouts:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: myapp
spec:
replicas: 10
strategy:
canary:
steps:
- setWeight: 10 # 10% 流量
- pause: {duration: 5m}
- setWeight: 30 # 30% 流量
- pause: {duration: 5m}
- setWeight: 50 # 50% 流量
- pause: {duration: 5m}
- setWeight: 100 # 全量
template:
spec:
containers:
- name: myapp
image: myapp:v2
回滚策略
# 查看历史
kubectl rollout history deployment/myapp
# 回滚到上一版本
kubectl rollout undo deployment/myapp
# 回滚到指定版本
kubectl rollout undo deployment/myapp --to-revision=3
最佳实践清单
1. 代码质量
- ✅ 代码审查
- ✅ 自动化测试
- ✅ 代码覆盖率 > 80%
- ✅ 安全扫描
2. 构建优化
- ✅ 多阶段构建
- ✅ 层缓存
- ✅ 最小化镜像
- ✅ 安全基础镜像
3. 部署安全
- ✅ 不可变标签
- ✅ 镜像签名
- ✅ 漏洞扫描
- ✅ 最小权限
4. 监控告警
- ✅ 部署监控
- ✅ 错误率告警
- ✅ 性能监控
- ✅ 日志聚合
小结
CI/CD 完整实践已完成!
✅ GitHub Actions:完整工作流
✅ GitLab CI:多阶段构建
✅ ArgoCD:GitOps 持续交付
✅ Helm:应用包管理
✅ 发布策略:安全可靠的部署
下一章:监控与日志。