【问题标题】:The nodes doesn't attach to the EKS cluster via Terraform节点不通过 Terraform 连接到 EKS 集群
【发布时间】:2021-07-21 15:14:55
【问题描述】:

我使用的是 0.14.2 Terraform 版本。我正在尝试使用以下代码部署具有两个节点的 EKS 集群:

resource "aws_eks_cluster" "cluster" {
  enabled_cluster_log_types = []
  name                      = var.cluster_name
  role_arn                  = aws_iam_role.cluster.arn
  version                   = var.eks_version
  vpc_config {
    subnet_ids              = flatten([ aws_subnet.private.*.id, aws_subnet.public.*.id ])
    security_group_ids      = []
    endpoint_private_access = "true"
    endpoint_public_access  = "true"
  }
  tags = var.tags[terraform.workspace]

  depends_on = [
    aws_iam_role_policy_attachment.cluster_AmazonEKSClusterPolicy,
    aws_iam_role_policy_attachment.cluster_AmazonEKSServicePolicy,
    aws_cloudwatch_log_group.cluster
  ]
}

resource "aws_launch_configuration" "eks-managenodes" {
  for_each                    = local.ob
  
  name_prefix                 = "${var.cluster_name}-launch-${each.value}"
  image_id                    = "ami-038341f2c72928ada"
  instance_type               = "t3.medium"
  user_data = <<-EOF
      #!/bin/bash
      set -o xtrace
      /etc/eks/bootstrap.sh ${var.cluster_name}
      EOF

  root_block_device {
    delete_on_termination = true
    volume_size = 30
    volume_type = "gp2"
  }

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_autoscaling_group" "eks-asg" {
  for_each        = local.ob

  desired_capacity     = 1
  launch_configuration = aws_launch_configuration.eks-managenodes[each.value].id
  max_size             = 1
  min_size             = 1
  name                 = "${var.cluster_name}-node-${each.value}"
  vpc_zone_identifier  = aws_subnet.private.*.id

  tag {
    key                 = "Name"
    value               = "eks-manage-node-${each.value}"
    propagate_at_launch = true
  }

  tag {
    key                 = "kubernetes.io/cluster/${var.cluster_name}"
    value               = "owned"
    propagate_at_launch = true
  }
  depends_on = [
    aws_launch_configuration.eks-managenodes,
    aws_eks_cluster.cluster
  ]
}

然后,集群部署正常,ASG和EC2实例部署正常,但问题是这些实例没有附加到相应的集群,我没有发现问题..

有什么想法吗? 谢谢

【问题讨论】:

    标签: amazon-web-services kubernetes terraform amazon-eks


    【解决方案1】:

    节点可能由于多种原因无法加入集群。

    1. cloud-init 期间的故障可能会阻止它们向集群控制平面注册。
    2. 可能存在 IAM 身份验证失败。

    调试步骤:

    1. SSH 进入一个节点并检查/var/log/cloud-init.log/var/log/cloud-init-output.log 以确保它完成而没有错误。

    2. 验证 kubeletaws-node 进程是否在 ec2 节点上运行。两者都应该出现在ps

    3. 检查/etc/eks/bootstrap.sh 是否存在。尝试使用来自 AWS ui 中 EKS 概述页面的变量以 root 身份调用它,并使用参数 /etc/eks/bootstrap.sh --apiserver-endpoint '${endpoint}' --b64-cluster-ca '${cluster_ca_data}' '${cluster_name}'

    4. 检查kube-system 中的aws-auth 配置映射并验证ec2 角色的映射如下:

        mapRoles: |
          - rolearn: arn:aws:iam::<account id>:role/<node role>
            username: system:node:{{EC2PrivateDNSName}}
            groups:
              - system:bootstrappers
              - system:nodes
    

    如果没有这个,节点将无法对集群进行身份验证。

    如有疑问,请为集群的 kubernetes 版本尝试最新版本的 EKS ami - 一些 AMI 已损坏。

    【讨论】:

    • 感谢您的回答@mcfinnigan。我只是看到日志,我得到了一些错误。其中之一是:无法找到凭据。您可以通过运行“aws configure”来配置凭据。
    • @HumbertoLantero 这很可能意味着您的 EC2 节点没有绑定实例配置文件以允许其向 EKS 注册。
    • true,我附加了实例配置文件,现在我没有收到此错误,但我收到了另一个错误:未找到 nvidia-smi .. 我正在为我的地区使用优化的 AMI。
    • @HumbertoLantero:您找到解决方案了吗?我也收到同样的错误“nvidia-smi not found”
    • @SujeetPadhi 是的,问题出在 AMI。您必须使用 AWS 提出的优化 AMI。
    【解决方案2】:

    如果 EKS 集群拥有这些节点,您将不得不使用 AWS EKS Node Group 而不是 EC2 Launch Configuration 我相信。

    通过以下文档中的同一链接,cluster_name 将引用您创建的 EKD 集群。

    resource "aws_eks_node_group" "example" {
      cluster_name    = aws_eks_cluster.example.name
      node_group_name = "example"
      node_role_arn   = aws_iam_role.example.arn
      subnet_ids      = aws_subnet.example[*].id
    
      scaling_config {
        desired_size = 1
        max_size     = 1
        min_size     = 1
      }
    

    【讨论】:

    • 是的,我知道这个选择.. 问题是使用这个选择我无法访问实例 ID 以在 cloudwatch 中进行监控.. 所以我只能使用 ASG..
    • 啊!帮助我理解为什么使用 EKS 节点组不会获得 ID?
    • 因为这个资源的输出没有暴露实例ID..:S
    • @VishalBiyani 不需要为 EKS 使用节点组,这只是相对于传统 asg + launchconfig 的新模式
    • 谢谢@mcfinnigan 我认为我的回答在技术上是不正确的。也许我应该删除它以避免给其他人造成混淆!
    猜你喜欢
    • 2021-07-20
    • 2021-01-12
    • 2020-03-22
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2021-03-25
    • 2021-10-12
    相关资源
    最近更新 更多