为AWS EKS集群节点添加第二块磁盘的Terraform配置求助
为AWS EKS节点组添加第二块磁盘的Terraform解决方案
AWS EKS节点组的原生aws_eks_node_group资源不支持直接配置第二块磁盘,需要通过关联自定义Launch Template来实现,因为Launch Template可以定义额外的EBS块设备。以下是具体实现步骤和代码修改:
1. 创建包含额外磁盘的Launch Template
首先定义一个Launch Template,配置根磁盘和第二块EBS卷,同时包含EKS节点加入集群所需的基础配置:
# 获取EKS官方Worker节点AMI(需匹配集群版本) data "aws_ami" "eks_worker" { most_recent = true owners = ["amazon"] filter { name = "name" values = ["amazon-eks-node-${var.eks_version}-v*"] # 替换为你的集群版本,如1.29 } filter { name = "architecture" values = ["x86_64"] # 按需替换为arm64 } } # 定义EKS节点的Launch Template resource "aws_launch_template" "eks_node_lt" { name_prefix = "${var.appConfig_subdomain}-eks-node-lt" image_id = data.aws_ami.eks_worker.id instance_type = var.aws_node_size key_name = aws_key_pair.nodegroup-kp.key_name # 根磁盘配置(替代原节点组的disk_size参数) block_device_mappings { device_name = "/dev/xvda" # Amazon Linux 2 EKS AMI的根设备名称,Ubuntu需改为/dev/sda1 ebs { volume_size = var.aws_node_diskSize volume_type = "gp3" delete_on_termination = true } } # 第二块磁盘配置 block_device_mappings { device_name = "/dev/xvdh" # 自定义设备名称,避免冲突 ebs { volume_size = 100 # 按需调整磁盘大小 volume_type = "gp3" delete_on_termination = true } } # EKS节点加入集群的初始化脚本 user_data = base64encode(<<-EOF #!/bin/bash set -o xtrace # 格式化并自动挂载第二块磁盘 mkfs.ext4 /dev/xvdh mkdir -p /mnt/extra-disk echo "/dev/xvdh /mnt/extra-disk ext4 defaults 0 0" >> /etc/fstab mount /mnt/extra-disk # 加入EKS集群 /etc/eks/bootstrap.sh ${aws_eks_cluster.pm_eks.name} EOF ) vpc_security_group_ids = [aws_security_group.allow_dmz.id] }
2. 修改EKS节点组配置,关联Launch Template
更新原有的aws_eks_node_group资源,移除已在Launch Template中配置的参数(如disk_size、instance_types、remote_access内的安全组和密钥),添加Launch Template引用:
resource "aws_eks_node_group" "node_group" { cluster_name = aws_eks_cluster.pm_eks.name node_group_name = "${var.appConfig_subdomain}-NodeGroup" node_role_arn = aws_iam_role.node-group-iam-role.arn subnet_ids = [ aws_subnet.node-a_subnet.id, aws_subnet.node-b_subnet.id, aws_subnet.node-c_subnet.id ] # 引用自定义Launch Template launch_template { id = aws_launch_template.eks_node_lt.id version = "$Latest" } scaling_config { desired_size = 3 max_size = 5 min_size = 3 } provisioner "local-exec" { command = "echo '${tls_private_key.nodegroup-kp.private_key_pem}' > ./${var.appConfig_subdomain}-${var.appConfig_env}-nodegroup.pem" } depends_on = [ aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy, aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy, aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly, ] }
3. 应用配置与注意事项
- 版本匹配:确保
data.aws_ami.eks_worker中的EKS版本与你的集群版本完全一致,否则节点无法正常加入集群。 - 滚动更新:应用Terraform配置后,EKS节点组会自动触发滚动更新,替换现有节点为使用新Launch Template的节点。若需控制更新节奏,可调整
scaling_config或手动触发节点组更新。 - 磁盘验证:新节点启动后,可通过
lsblk命令查看第二块磁盘,确认/mnt/extra-disk已挂载。
内容的提问来源于stack exchange,提问作者user3238318
相关产品推荐
相关产品推荐

