如何手动升级实例组含自定义元数据脚本的GKE节点池
带自定义元数据脚本的GKE单节点池手动升级操作指南
升级前准备
- 先确认基础版本兼容性:执行
gcloud container clusters describe <你的集群名> --region=<集群所在区域> --format="value(currentMasterVersion)"拿到控制面当前版本,节点池升级的目标版本不能高于控制面版本,跨次版本升级建议逐版本升,不要直接跳多个大版本。 - 备份自定义元数据配置:执行
gcloud container node-pools describe <待升级节点池名> --cluster=<集群名> --region=<区域> --format="value(config.metadata)" > metadata-backup.yaml把节点池当前所有自定义元数据(包括存在元数据里的自定义脚本)导出本地备份,避免配置丢失。 - 提前配置滚动升级策略:建议升级时设置浪涌节点数为1、不可用节点数为0,也就是升级过程中先创建1个新版本节点,等新节点就绪、老节点上的Pod全部排空后再删除老节点,全程业务无中断;同时提前检查业务配置的PodDisruptionBudget规则,确保允许单节点逐台驱逐,不要出现PDB卡驱逐导致升级卡住的情况。
正式执行升级
- 执行升级命令,非必要不要携带
--metadata参数:GKE节点池滚动升级时,默认会继承原有节点池的所有配置(包括自定义元数据、关联脚本、标签、污点等),如果手动带--metadata参数会全量覆盖原有元数据配置,很容易把自定义脚本冲掉。标准升级命令如下:
gcloud container node-pools upgrade <待升级节点池名称> \ --cluster=<你的集群名称> \ --region=<集群所在区域> \ --cluster-version=<目标GKE节点版本> \ --max-surge-upgrade=1 \ --max-unavailable-upgrade=0
命令执行后会弹出二次确认提示,其中会列出生成的新节点模板的核心配置,这时候一定要核对元数据字段里的自定义脚本条目和你之前备份的内容一致,确认无误再输入
Y启动升级。
- 升级过程巡检:新开终端执行
kubectl get nodes -w实时观测节点的版本切换、状态变化,每有一个新节点注册到集群后,随机抽查节点对应的GCE实例详情,确认自定义元数据中的脚本存在,同时可以手动触发一次节点重启,验证开机流程中自定义脚本能正常执行无报错。等所有节点版本都切换为目标版本、所有业务Pod运行正常后,升级就算完成。
异常处理
- 如果升级过程中发现新节点的自定义脚本丢失、执行报错,第一时间执行
gcloud container node-pools upgrade cancel <待升级节点池名称> --cluster=<集群名> --region=<区域>终止升级流程。 - 已经创建的异常新版本节点,逐个执行
kubectl drain <节点名> --ignore-daemonsets --delete-emptydir-data排空后手动删除,节点池会自动用原有正确配置的实例模板补全节点副本,等业务全部恢复后,再排查配置丢失原因——如果是元数据被覆盖导致的问题,重新执行升级时可以把备份的元数据全量带到--metadata参数里,确保配置不丢失。
内容的提问来源于stack exchange,提问作者Wellme
相关产品推荐
相关产品推荐

