如何实现Google Cloud托管实例组MIG无需新建实例模板的自动更新
核心实现逻辑
Google Cloud 托管实例组(MIG)默认不会监听容器镜像仓库的镜像更新事件,因此不会在镜像推送后自动触发实例更新。无需每次发布新版本都创建新实例模板的需求可以通过以下方案实现:
注意:GCP 实例模板本身为不可变资源,创建后无法修改。如果现有实例模板未配置镜像
Always拉取策略,仅需要新建1次实例模板调整该配置即可,后续镜像更新无需再新建模板。
前置配置要求
- 实例模板中的容器镜像拉取策略需设置为
Always,确保实例重启/重建时会主动拉取镜像仓库的最新版本镜像 - 实例模板中配置的镜像地址需使用可变标签(如
latest),或每次推送新版本镜像时覆盖对应固定标签
方案1:推送镜像后自动触发MIG更新
配置事件驱动流程实现全自动化更新,无需人工介入:
- 配置Cloud Function触发器,关联Container Registry的镜像推送事件,仅当
gcr.io/prok/server镜像有新版本推送时触发函数运行 - Cloud Function内执行MIG滚动重启命令即可完成更新,命令参考:
gcloud compute instance-groups managed rolling-action restart <你的MIG名称> --zone <实例组所属区域> --max-surge 25% --max-unavailable 0
上述命令会逐台重启实例组内的实例,实例重启时自动拉取最新镜像,全程不需要调整实例模板配置。如果业务对重启敏感,可以将
restart改为replace,采用先增量启动新实例再销毁旧实例的方式完成无宕机更新。
方案2:手动触发更新
如果不需要自动化触发,每次推送新镜像后手动执行1条命令即可完成更新,无需修改实例模板:
# 滚动重启更新 gcloud compute instance-groups managed rolling-action restart <MIG名称> --zone <区域> # 无宕机滚动替换更新 gcloud compute instance-groups managed rolling-action replace <MIG名称> --zone <区域> --max-surge 1 --max-unavailable 0
内容的提问来源于stack exchange,提问作者Hiroo
相关产品推荐
相关产品推荐

