terraform无法创建eks_node组

时间:2020-09-28 23:15:06

标签: terraform

resource "aws_eks_node_group" "n-cluster-group" {
  cluster_name    = aws_eks_cluster.n-cluster.name
  node_group_name = "n-cluster-group"
  node_role_arn   = aws_iam_role.eks-nodegroup.arn
  subnet_ids      = [aws_subnet.public.id, aws_subnet.public2.id]

  scaling_config {
    desired_size = 3
    max_size = 6
    min_size = 1
  }

  launch_template {
    id      = aws_launch_template.n-cluster.id
    version = aws_launch_template.n-cluster.latest_version
  }

  depends_on = [
    aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy,
    aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly,
    aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy,
  ]

resource "aws_launch_template" "n-cluster" {
  image_id             = "ami-0d45236a5972906dd"
  instance_type        = "t3.medium"
  name_prefix          = "cluster-node-"

  block_device_mappings {
    device_name = "/dev/sda1"

    ebs {
      volume_size = 20
    }
  }

尽管实例似乎已成功创建节点组状态,但CREATE_FAILED terraform也报告了这一点。

  1. 我想知道CREATE_FAILED是什么意思

  2. 我在做什么错?当使用启动组和经过eks优化的AMI时,我仍应指定user_data,如果是这样,使用terraform的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

将其添加到启动模板定义中即可解决该问题:

user_data = base64encode(<<-EOF
#!/bin/bash -xe
/etc/eks/bootstrap.sh CLUSTER_NAME_HERE
EOF
)

我猜如果通过启动模板使用,甚至EKS优化的AMI也算作自定义AMI。

答案 1 :(得分:0)

我设法通过以下配置解决了这个问题:


resource "aws_launch_template" "eks_launch_template" {
  name = "eks_launch_template"

  block_device_mappings {
    device_name = "/dev/xvda"

    ebs {
      volume_size = 20
      volume_type = "gp2"
    }
  }

  image_id = <custom_ami_id>
  instance_type = "t3.medium"
  user_data = filebase64("${path.module}/eks-user-data.sh")

  tag_specifications {
    resource_type = "instance"

    tags = {
      Name = "EKS-MANAGED-NODE"
    }
  }
}

resource "aws_eks_node_group" "eks-cluster-ng" {
  cluster_name    = aws_eks_cluster.eks-cluster.name
  node_group_name = "eks-cluster-ng-"
  node_role_arn   = aws_iam_role.eks-cluster-ng.arn
  subnet_ids      = [var.network_subnets.pvt[0].id, var.network_subnets.pvt[1].id, var.network_subnets.pvt[2].id]
  scaling_config {
    desired_size = var.asg_desired_size
    max_size     = var.asg_max_size
    min_size     = var.asg_min_size
  }

  launch_template {
    name = aws_launch_template.eks_launch_template.name
    version = aws_launch_template.eks_launch_template.latest_version
  }

  depends_on = [
    aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy,
    aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly,
    aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy,
  ]
}

关键在于user_data = filebase64("${path.module}/eks-user-data.sh")

eks-user-data.sh文件应如下所示:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
/etc/eks/bootstrap.sh <cluster-name>

--==MYBOUNDARY==--\

我已经测试了上面的内容,并且可以正常工作。谢谢大家引导我使用此解决方案