如何让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-authConfigMap,将节点角色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
相关产品推荐
相关产品推荐

