如何在AWS中自动将最新AMI推送至已创建的EKS集群?
如何将新的EKS黄金AMI自动推送至现有EKS集群
你提供的Terraform数据源代码如下(用于拉取最新EKS黄金AMI):
data "aws_ami" "eks_golden_ami"{ most_recent = true owners = ["<account id>"] filter { name = "name" value = "*eks*" } }
但这个数据源仅在Terraform执行plan/apply时拉取最新AMI,集群创建完成后不会自动同步新AMI到现有节点。要实现自动推送,可通过以下几种方式:
1. 用Terraform配置节点组自动刷新
如果你的EKS节点组是用Terraform管理的,可以直接在节点组资源中绑定数据源的AMI ID,并配置实例刷新策略,实现每次有新AMI时自动滚动更新节点:
示例配置:
resource "aws_eks_node_group" "eks_nodes" { cluster_name = aws_eks_cluster.my_cluster.name node_group_name = "eks-node-group" node_role_arn = aws_iam_role.eks_node_role.arn subnet_ids = aws_subnet.private.*.id # 绑定最新的黄金AMI ami_type = "CUSTOM" custom_ami_id = data.aws_ami.eks_golden_ami.id # 配置实例刷新策略,自动滚动更新节点 instance_refresh { strategy = "ROLLING" preferences { min_healthy_percentage = 70 } } # 其他节点组配置... }
每次运行terraform apply时,Terraform会检测到新的AMI ID变化,自动触发节点组的实例刷新,逐步用新AMI替换旧节点。如果要完全自动化,可以把Terraform apply放到CI/CD流水线中,定期执行或在AMI创建时触发。
2. 用AWS原生服务实现全自动化
如果不想依赖Terraform的定期执行,可以用AWS EventBridge + SSM自动化(或Lambda)来实现:
- 创建EventBridge规则,监听黄金AMI的创建事件(筛选条件为EC2 AMI创建,且名称匹配
*eks*) - 编写SSM自动化文档或Lambda函数,实现以下逻辑:
- 获取EKS集群的所有节点组
- 更新节点组的自定义AMI ID为新创建的黄金AMI
- 触发节点组的实例刷新操作
- 将EventBridge规则的目标设置为上述SSM文档或Lambda函数,实现新AMI创建时自动触发节点更新
3. 手动触发更新(适合小规模场景)
如果不需要完全自动化,也可以手动操作:
- 运行
terraform plan,确认检测到新的AMI ID变更 - 执行
terraform apply,触发节点组的实例刷新 - 或者直接在AWS控制台找到对应的EKS节点组,手动替换AMI ID并启动实例刷新
内容的提问来源于stack exchange,提问作者Biju
相关产品推荐
相关产品推荐

