发布策略和最佳实践

发布策略和最佳实践

镜像标签策略

❌ 不推荐

# 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:应用包管理
发布策略:安全可靠的部署

下一章:监控与日志。