如何配置GCP托管实例组(MIG)缩容时保留指定实例?
GCP托管实例组(MIG)缩容时保护特定实例的方案
要实现MIG缩容时保留指定实例(带已知外部IP),可以通过实例标记+自定义缩容过滤器或Preserved State配置来实现,以下是具体操作步骤:
1. 用实例标记+缩容过滤器实现精准保护
这是最直接灵活的方式,通过给目标实例打标记,让MIG缩容时只删除不带标记的实例:
步骤1:给需要保护的实例添加专属标记
给目标实例打上唯一标记,比如protected: no-delete:
- gcloud命令:
gcloud compute instances add-tags YOUR_INSTANCE_NAME --tags=protected=no-delete --zone=YOUR_ZONE - Python SDK实现:使用
google-cloud-compute的InstancesClient调用set_tags方法,传入实例名称、区域和新标签列表。
步骤2:配置MIG的缩容策略排除带标记实例
更新MIG的自动扩缩容配置,指定缩容时只移除不带保护标记的实例:
gcloud compute instance-groups managed set-autoscaling YOUR_MIG_NAME \ --zone=YOUR_ZONE \ --min-num-replicas=YOUR_MIN \ --max-num-replicas=YOUR_MAX \ --target-cpu-utilization=0.6 \ --remove-instances-with-tags="!protected=no-delete"
这里的!表示取反,即MIG只会删除不包含protected=no-delete标记的实例。
2. 用Preserved State保护实例(同时保留外部IP)
如果你需要同时保留实例的外部IP等属性,Preserved State是更合适的选择——配置后,MIG缩容时会优先删除没有Preserved State的实例:
给实例设置Preserved State(保留外部IP)
gcloud compute instance-groups managed set-instance-template YOUR_MIG_NAME \ --zone=YOUR_ZONE \ --preserved-state=external-ip=YOUR_EXTERNAL_IP \ --instances=YOUR_INSTANCE_NAME
该配置会让MIG在缩容时跳过这个实例,同时确保实例的外部IP不会被回收(即使实例重启或重建)。
关于Target Pools的说明
Target Pools是负载均衡的后端分组,加入Target Pool不会直接阻止MIG删除实例——只有当实例通过健康检查被标记为不健康时,MIG才可能优先删除,但这和“主动保护特定实例”的需求不匹配,所以不建议用这个方式。
验证配置
缩容前可以用模拟命令确认哪些实例会被删除:
gcloud compute instance-groups managed simulate-instance-update YOUR_MIG_NAME --zone=YOUR_ZONE
输出会列出MIG计划移除的实例,确认你的保护实例不在其中即可。
内容的提问来源于stack exchange,提问作者Chezy Miletz
相关产品推荐
相关产品推荐

