You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让AWS EKS节点组使用自定义ASG和Launch Template?

解决EKS节点组自动创建ASG和Launch Template的问题

要让EKS节点组使用你自定义的Auto Scaling Group(ASG)和Launch Template,核心是不要使用AWS托管节点组(Managed Node Groups)——因为托管节点组的设计逻辑就是由AWS自动管理底层的ASG、Launch Template等资源。你需要切换到**自管理节点(Self-Managed Nodes)**的部署方式,具体操作如下:

1. 移除托管节点组的Terraform资源定义

如果你之前用了aws_eks_node_group资源,直接删除这段代码。这个资源是AWS托管节点组的Terraform实现,必然会自动生成ASG和Launch Template。

2. 配置自定义Launch Template

确保你的自定义Launch Template包含EKS节点必需的核心配置:

  • AMI:使用AWS官方EKS优化AMI(或自定义的符合EKS要求的AMI)
  • 用户数据(User Data):加入节点注册到EKS集群的初始化脚本
  • IAM实例角色:必须关联AmazonEKSWorkerNodePolicy、AmazonEC2ContainerRegistryReadOnly、AmazonEKS_CNI_Policy这三个托管权限(或自定义包含对应权限的策略)

Terraform配置示例:

resource "aws_launch_template" "eks_self_managed" {
  name_prefix   = "eks-self-managed-node"
  image_id      = "<你的EKS优化AMI ID>"
  instance_type = "t3.medium"
  
  iam_instance_profile {
    name = aws_iam_instance_profile.eks_node.name
  }

  user_data = base64encode(<<-EOF
              #!/bin/bash
              set -o xtrace
              /etc/eks/bootstrap.sh <你的集群名称> --kubelet-extra-args "--node-labels=eks.amazonaws.com/nodegroup=my-custom-nodegroup"
              EOF
  )

  vpc_security_group_ids = [aws_security_group.eks_node.id]
  key_name               = aws_key_pair.my_key.key_name
}

3. 基于自定义Launch Template创建ASG

配置ASG时,要确保子网是EKS集群所在的子网,且节点能访问EKS控制平面。Terraform配置示例:

resource "aws_autoscaling_group" "eks_self_managed" {
  name_prefix          = "eks-self-managed-node-asg"
  min_size             = 2
  max_size             = 5
  desired_capacity     = 2
  vpc_zone_identifier  = [aws_subnet.eks_private_1.id, aws_subnet.eks_private_2.id]

  launch_template {
    id      = aws_launch_template.eks_self_managed.id
    version = "$Latest"
  }

  tag {
    key                 = "Name"
    value               = "eks-self-managed-node"
    propagate_at_launch = true
  }
}

4. 确保节点能正常加入集群

  • 节点的IAM角色信任策略必须包含eks.amazonaws.com作为信任实体
  • 更新EKS集群的aws-auth ConfigMap,将节点角色ARN加入,示例内容:
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: <你的节点IAM角色ARN>
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes

你可以用Terraform的kubernetes_config_map资源管理这个配置,或手动执行kubectl apply。

关键注意事项

  • 托管节点组和自管理节点是互斥方案,要完全自定义ASG和Launch Template必须选择自管理节点
  • 自管理节点的维护(如更新、补丁)需自行处理,托管节点组会自动完成这些操作
  • 自定义的Launch Template和ASG配置必须符合EKS节点要求,否则节点无法成功注册到集群

内容的提问来源于stack exchange,提问作者BigA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:12:37