如何使用Terraform for Amazon EKS设置节点污点

时间:2020-08-28 14:25:58

标签: kubernetes terraform amazon-eks

我正在使用this Terraform provider构建一个AWS EKS集群。但是,我找不到将节点污点应用于受管节点组或工作组的方法。 This issue and its resolution似乎暗示不可能。有什么办法吗?

3 个答案:

答案 0 :(得分:4)

在该提供程序的Terraform脚本中,您可以将以下内容添加到工作组:

(在main.tf中)

worker_groups = [
  {
      name                          = "my_node_group"
      instance_type                 = "t3.medium"
      asg_desired_capacity          = 1
      asg_min_size                  = 1
      additional_security_group_ids = [aws_security_group.all_worker_mgmt.id]
      kubelet_extra_args            = "--node-labels=my_node_label --register-with-taints=my_node_label:NoSchedule"
      asg_max_size                  = 1
      tags = []
    },
]

重要的部分是设置kubelet_extra_args以将节点标签应用于节点,并使用该节点标签通过--register-with-taints设置异味。这些是由EKS在启动时在每个工作程序节点上运行的命令。 (请注意,我可以根据您的要求更改在工作组中设置的所有其他参数)

您可以使用kubectl describe node <node_ip>检查节点上的污点。

答案 1 :(得分:1)

现在eks模块开箱即用支持taints,只需使用以下配置:

module "eks" {
  source = "terraform-aws-modules/eks/aws"
  ...
  node_groups = {
    test_name = {
      ...
      taints = [
        {
          key    = "dedicated"
          value  = "statefulset"
          effect = "NO_SCHEDULE"
        }
      ] 
    }
  }
}

答案 2 :(得分:0)

这就是我使用 aws_eks_node_group 资源和预先创建的 EKS 集群创建带有污点的节点组的方式。

resource "aws_eks_node_group" "test" {
  cluster_name    = var.cluster_name
  node_group_name = "test"
  node_role_arn   = master.worker_iam_role_arn
  subnet_ids      = var.vpc.private_subnets_id
  disk_size       = 20
  taint {
    key = "dedicated"
    value = "gpuGroup"
    effect = "NO_SCHEDULE"
  }
  scaling_config {
      desired_size = 1
      max_size     = 3
      min_size     = 1
  }
  labels = {
        "some-labels" = "labels"
  }
  instance_types = ["t3.micro"]
  remote_access {
    ec2_ssh_key = ssh-key.key_name
  }
}

参考:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_node_group#taint