如何通过Terraform安全变更EKS工作节点实例类型以避免停机?
如何通过Terraform变更EKS实例类型并维持服务可用性
直接修改现有节点组的实例类型会触发Terraform销毁旧节点组再创建新节点组,导致服务停机。正确的操作流程是分阶段替换节点组:
第一步:新增目标实例类型的节点组
在Terraform配置中添加一个全新的节点组资源,指定需要的CPU优化型实例类型,同时确保该节点组的标签、污点/容忍度、IAM角色、子网配置等与旧节点组匹配(或满足业务调度需求)。给新节点组设置唯一名称,避免与旧节点组冲突。
执行terraform plan确认仅会创建新节点组,随后运行terraform apply完成创建,等待新节点全部加入EKS集群并处于Ready状态。第二步:迁移旧节点上的Pod
使用kubectl drain命令逐个驱逐旧节点组内节点上的Pod,命令示例:kubectl drain <旧节点名称> --ignore-daemonsets --delete-emptydir-data可以编写脚本批量处理所有旧节点,确保所有业务Pod都调度到新节点上。验证所有服务的Pod正常运行后,再进行下一步操作。
第三步:删除旧节点组
在Terraform配置中移除原来的旧节点组资源块,执行terraform plan确认仅会销毁旧节点组,随后运行terraform apply完成删除。
额外注意事项
- 如果使用官方
terraform-aws-modules/eks/aws模块,可利用模块的多节点组管理能力,避免直接修改现有节点组配置。 - 为业务Pod配置
PodDisruptionBudget(PDB),限制驱逐过程中不可用Pod的数量,进一步降低服务影响。 - 对于有状态应用,需确保存储卷(如EBS)已正确配置持久化策略,避免数据丢失。
内容的提问来源于stack exchange,提问作者rippie
相关产品推荐
相关产品推荐

