在线客服

Google Cloud GKE中,如何进行滚动更新,以保证服务的持续可用性?

⏱️2026-03-16 09:00 👁️2

在 Google Kubernetes Engine (GKE) 中进行滚动更新,同时保证服务的持续可用性,涉及多个关键步骤和策略。以下是一个详细的指南:

1. 准备工作

  • 了解你的 Deployment: 确保你熟悉要更新的 Deployment 的配置,包括副本数量、资源限制、健康检查等。
  • 备份: 在进行任何更新之前,强烈建议备份你的 Deployment 配置(例如,使用 kubectl get deployment your-deployment -o yaml > deployment-backup.yaml)。
  • 监控: 设立完善的监控系统,以便在更新过程中实时观察服务的健康状况和性能指标。📈

2. 更新策略

GKE 默认使用滚动更新策略。以下是一些可以自定义的参数:

  • maxSurge 指定在更新过程中可以超过期望副本数的 Pod 的最大数量。可以是绝对数量(例如 2)或期望副本数的百分比(例如 25%)。增加这个值可以加快更新速度,但也会消耗更多资源。
  • maxUnavailable 指定在更新过程中可以处于不可用状态的 Pod 的最大数量。可以是绝对数量或期望副本数的百分比。这个值越高,更新速度越快,但也会增加服务中断的风险。

在 Deployment 的 YAML 文件中配置这些参数:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-deployment
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: your-app
  template:
    metadata:
      labels:
        app: your-app
    spec:
      containers:
      - name: your-container
        image: your-image:v1
        ports:
        - containerPort: 8080
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10

3. 执行滚动更新

有多种方法可以触发滚动更新:

  • 更新镜像版本: 这是最常见的更新方式。使用 kubectl set image 命令:

kubectl set image deployment/your-deployment your-container=your-image:v2

  • 修改 Deployment 配置: 修改 Deployment 的 YAML 文件,然后使用 kubectl apply 命令:

kubectl apply -f deployment.yaml

  • 使用 kubectl rollout 命令: 例如,kubectl rollout restart deployment/your-deployment 可以触发一个新的 rollout。

4. 健康检查 (Health Checks)

健康检查对于滚动更新至关重要。 Kubernetes 使用 livenessProbereadinessProbe 来确定 Pod 的健康状况。

  • livenessProbe 如果 liveness probe 失败,Kubernetes 会重启 Pod。
  • readinessProbe 如果 readiness probe 失败,Kubernetes 会将 Pod 从 Service 的 endpoints 中移除,防止流量路由到该 Pod。

确保你的 Pod 具有适当的健康检查配置,以确保 Kubernetes 可以正确地管理滚动更新。 🩺

以下是一些常见的健康检查方法:

  • HTTP GET: 向 Pod 的指定路径发送 HTTP GET 请求。
  • TCP Socket: 尝试建立 TCP 连接。
  • Exec: 在容器内执行命令。

5. 监控和验证

在滚动更新过程中,密切关注以下指标:

  • CPU 和内存使用率: 确保新的 Pod 没有资源瓶颈。
  • 请求延迟: 监控请求延迟,确保更新没有引入性能问题。
  • 错误率: 监控错误率,确保服务没有出现异常。 🚨
  • Pod 状态: 使用 kubectl get pods 命令查看 Pod 的状态,确保所有 Pod 都处于 Running 状态。
  • Deployment 状态: 使用 kubectl describe deployment your-deployment 命令查看 Deployment 的状态,确保 rollout 成功。

6. 回滚 (Rollback)

如果在滚动更新过程中出现问题,可以使用 kubectl rollout undo 命令回滚到之前的版本:


kubectl rollout undo deployment/your-deployment

你还可以指定要回滚到的特定版本:


kubectl rollout undo deployment/your-deployment --to-revision=2

7. 蓝绿部署 (Blue/Green Deployment)

蓝绿部署是一种更高级的部署策略,它可以实现零停机更新。 🚀

基本思路是创建两个相同的环境:蓝色环境(当前运行的版本)和绿色环境(新版本)。 将流量从蓝色环境切换到绿色环境。 如果一切正常,则可以删除蓝色环境。

虽然蓝绿部署可以实现零停机,但它也更复杂,需要更多的资源。

8. 金丝雀发布 (Canary Release)

金丝雀发布是一种将新版本逐步引入生产环境的策略。 🐦

首先,将少量流量路由到新版本(金丝雀版本)。 如果一切正常,则逐渐增加流量比例,直到所有流量都路由到新版本。

金丝雀发布可以帮助你在将新版本完全发布到生产环境之前,发现潜在的问题。

9. 总结

滚动更新是 GKE 中保证服务持续可用性的关键技术。 通过合理配置更新策略、健康检查和监控,你可以安全地将新版本部署到生产环境。 🔑 记得根据你的具体需求选择合适的部署策略。不同的策略有不同的优缺点。 希望这个指南对你有所帮助! 🎉