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

为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:31