5.14 回滚策略实战:应用版本管理与快速回滚最佳实践

引言

回滚是CI/CD流程的重要保障。当新版本出现问题时,快速回滚可以最小化影响。本文将详细介绍应用版本管理和回滚策略的实现方法。

一、版本管理

1.1 版本策略

  • 语义化版本:v1.2.3
  • Git SHA:短SHA作为版本
  • 构建号:CI/CD构建号
  • 时间戳:基于时间的版本

1.2 版本标签

# 使用Git SHA
IMAGE_TAG=$(git rev-parse --short HEAD)

# 使用构建号
IMAGE_TAG=${CI_PIPELINE_ID}

# 使用语义化版本
IMAGE_TAG=v1.2.3

二、Kubernetes回滚

2.1 Deployment回滚

# 查看历史
kubectl rollout history deployment/myapp

# 回滚到上一版本
kubectl rollout undo deployment/myapp

# 回滚到指定版本
kubectl rollout undo deployment/myapp --to-revision=2

# 查看回滚状态
kubectl rollout status deployment/myapp

2.2 保留历史版本

apiVersion: apps/v1
kind: Deployment
spec:
  revisionHistoryLimit: 10  # 保留10个历史版本

三、Istio回滚

3.1 VirtualService回滚

# 回滚到100% v1
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
  - myapp
  http:
  - route:
    - destination:
        host: myapp
        subset: v1
      weight: 100
EOF

3.2 快速回滚脚本

#!/bin/bash
# Istio回滚脚本

SERVICE=$1
VERSION=$2

kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: ${SERVICE}
spec:
  hosts:
  - ${SERVICE}
  http:
  - route:
    - destination:
        host: ${SERVICE}
        subset: ${VERSION}
      weight: 100
EOF

echo "已回滚 ${SERVICE} 到版本 ${VERSION}"

四、ArgoCD回滚

4.1 使用CLI回滚

# 查看历史
argocd app history myapp

# 回滚到指定版本
argocd app rollback myapp <revision>

# 回滚到上一版本
argocd app rollback myapp

4.2 使用UI回滚

  1. 进入ArgoCD UI
  2. 选择应用
  3. 查看历史
  4. 点击回滚

五、自动化回滚

5.1 基于指标的回滚

# 监控错误率,自动回滚
apiVersion: v1
kind: ConfigMap
metadata:
  name: rollback-config
data:
  script: |
    ERROR_RATE=$(kubectl get pods -l app=myapp --field-selector=status.phase!=Running | wc -l)
    if [ $ERROR_RATE -gt 2 ]; then
      kubectl rollout undo deployment/myapp
    fi

5.2 CI/CD集成

# GitLab CI
rollback:
  stage: rollback
  script:
    - kubectl rollout undo deployment/myapp
  when: on_failure
  only:
    - main

六、版本管理最佳实践

6.1 版本策略

  • 使用语义化版本
  • 版本控制配置
  • 记录版本变更
  • 文档化版本

6.2 回滚准备

  • 保留历史版本
  • 测试回滚流程
  • 准备回滚脚本
  • 监控告警

总结

通过本文,你学会了:

  1. 版本管理:版本策略、标签
  2. Kubernetes回滚:Deployment回滚、历史版本
  3. Istio回滚:VirtualService回滚、脚本
  4. ArgoCD回滚:CLI、UI回滚
  5. 自动化回滚:基于指标、CI/CD集成

下一步学习

  • 5.15 Prometheus监控体系
  • 5.16 Prometheus服务发现机制

思考题

  1. 如何管理应用版本?
  2. 如何实现快速回滚?
  3. 如何实现自动化的回滚?

提示:回滚策略是生产环境的重要保障。下一节我们将学习Prometheus监控。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐