如何修改terraform aws_eks_node_group自动创建的autoscaling_group最大实例生命周期参数
操作方案
- 确认前提:你的AWS Terraform Provider版本 >= 3.22.0,该版本开始支持ASG的
max_instance_lifetime参数配置 - 步骤1:添加数据源,匹配EKS自动生成的目标ASG
# 按EKS集群和节点组标签过滤ASG data "aws_autoscaling_groups" "eks_node_asg" { filter { name = "tag:eks:cluster-name" values = ["<你的EKS集群名称>"] } filter { name = "tag:eks:nodegroup-name" values = ["<你的EKS节点组名称>"] } } # 获取目标ASG的详细配置 data "aws_autoscaling_group" "target_asg" { name = one(data.aws_autoscaling_groups.eks_node_asg.names) }
- 步骤2:执行命令获取ASG名称,导入到Terraform状态
先执行terraform apply让数据源生效,再执行terraform state show data.aws_autoscaling_group.target_asg | grep name拿到ASG的完整名称,随后执行导入命令:terraform import aws_autoscaling_group.eks_managed_asg <上一步拿到的ASG完整名称> - 步骤3:添加ASG资源配置,仅管理
max_instance_lifetime参数
resource "aws_autoscaling_group" "eks_managed_asg" { name = data.aws_autoscaling_group.target_asg.name # 单位为秒,示例值2592000对应30天,可按需修改 max_instance_lifetime = 2592000 # 忽略所有其他属性,避免和EKS的托管逻辑冲突 lifecycle { ignore_changes = all } }
- 步骤4:执行
terraform plan确认只有max_instance_lifetime参数会被修改,确认无误后执行terraform apply即可完成配置。
注意事项:
- 配置生效后,ASG会自动终止运行时长超过阈值的实例,并用新实例替换,建议先在非生产环境验证
- 配置了
ignore_changes = all后,你后续对aws_eks_node_group资源的修改(比如扩缩容、更换实例类型)会由EKS自动同步到ASG,Terraform不会覆盖这些修改,仅会维持你设置的max_instance_lifetime参数值不变- 建议同时配置PodDisruptionBudget,避免实例批量终止影响业务可用性
内容的提问来源于stack exchange,提问作者Ali Mehdi
相关产品推荐
相关产品推荐

