部署应用的GKE集群跨版本升级(1.27→1.28→1.29)操作咨询
GKE集群跨版本升级(1.27→1.28→1.29)分步指南
一、升级前准备
- 检查集群健康:执行
gcloud container clusters describe CLUSTER_NAME --zone ZONE,确认所有节点池、Pod均处于Running状态 - 备份核心资源:导出Deployment、StatefulSet、ConfigMap等资源到本地,示例命令:
kubectl get deployments --all-namespaces -o yaml > deployments-backup.yaml - 验证应用兼容性:排查应用是否使用K8s 1.28/1.29中已移除的废弃API,可通过
kubectl deprecated-resources工具检测 - 优化应用部署:无状态应用确保副本数≥2;有状态应用配置PodDisruptionBudget(PDB),限制同时下线的Pod数量
二、升级参数配置(低中断最优方案)
通用参数建议
- maxSurge:控制升级时新增的节点数量,推荐设为
20%或1(取两者较大值),兼顾升级效率与资源消耗 - maxUnavailable:控制升级时允许不可用的节点数量,低中断场景下:
- 无状态应用集群:设为
0,确保服务容量不下降 - 有状态应用集群:设为
1,配合PDB避免多个有状态Pod同时离线
- 无状态应用集群:设为
场景化调整
- 高可用无状态服务:
maxSurge=20%,maxUnavailable=0 - 有状态服务(如数据库集群):
maxSurge=1,maxUnavailable=1,同时将PDB的maxUnavailable设为1
三、分步升级操作
第一阶段:升级至K8s 1.28
- 升级控制平面
- 执行命令:
gcloud container clusters upgrade CLUSTER_NAME --zone ZONE --master --cluster-version 1.28.x --max-surge MAX_SURGE --max-unavailable MAX_UNAVAILABLE - 验证控制平面版本:
gcloud container clusters describe CLUSTER_NAME --zone ZONE | grep currentMasterVersion,确认版本为1.28.x
- 执行命令:
- 升级节点池(逐个操作,避免批量升级)
- 单节点池升级命令:
gcloud container node-pools upgrade NODE_POOL_NAME --cluster CLUSTER_NAME --zone ZONE --cluster-version 1.28.x --max-surge MAX_SURGE --max-unavailable MAX_UNAVAILABLE - 验证节点版本:
kubectl get nodes -o wide | grep 1.28,确保所有节点均完成升级
- 单节点池升级命令:
- 应用状态验证
- 检查Pod健康:
kubectl get pods --all-namespaces,确认无异常状态Pod - 业务可用性测试:通过服务健康检查接口或用户侧验证,确保业务无中断
- 检查Pod健康:
第二阶段:升级至K8s 1.29
重复第一阶段的操作,将版本参数替换为1.29.x:
- 升级控制平面:
gcloud container clusters upgrade CLUSTER_NAME --zone ZONE --master --cluster-version 1.29.x --max-surge MAX_SURGE --max-unavailable MAX_UNAVAILABLE - 升级节点池:
gcloud container node-pools upgrade NODE_POOL_NAME --cluster CLUSTER_NAME --zone ZONE --cluster-version 1.29.x --max-surge MAX_SURGE --max-unavailable MAX_UNAVAILABLE - 全集群验证:检查kube-proxy、coreDNS等系统组件状态,再次确认业务服务正常
四、升级后收尾
- 清理备份:确认集群稳定运行72小时后,可删除本地备份文件(按需留存)
- 更新监控:调整监控告警规则,适配K8s 1.29版本的指标变化
- 记录日志:留存升级时间、参数配置、问题及解决方法,作为后续运维参考
内容的提问来源于stack exchange,提问作者Schatt
相关产品推荐
相关产品推荐

