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

ram*_*esh 4 amazon-web-services kubernetes terraform amazon-eks

我正在使用这个 Terraform provider构建一个 AWS EKS 集群。但是,我找不到将节点污点应用于托管节点组或工作组的方法。这个问题及其解决方案似乎表明这是不可能的。有没有办法做到这一点?

Ser*_*lyi 10

现在eks模块确实支持开箱即用的污点,只需使用以下配置:

module "eks" {
  source = "terraform-aws-modules/eks/aws"
  ...
  node_groups = {
    test_name = {
      ...
      taints = [
        {
          key    = "dedicated"
          value  = "statefulset"
          effect = "NO_SCHEDULE"
        }
      ] 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 凉爽的!现在我将您的答案设置为正确答案。 (2认同)

Rtm*_*tmY 6

请注意,您不必为此功能使用专用模块,因为 Hashicorp AWS 提供商通过污点配置块支持开箱即用的污点:

resource "aws_eks_node_group" "statefulset-ng" {
  cluster_name    = aws_eks_cluster.main.name
  node_group_name = "statefulset-ng"
  .
  .
  .
  
  # Block 1 
  taint {
    key = "statefulset-no-schedule"
    value  = "true"
    effect = "NO_SCHEDULE"
  }

  # Block 2    
  taint {
    key = "statefulset-no-execute"
    value  = "true"
    effect = "NO_EXECUTE"
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,每个污点都需要在单独的配置块中进行配置。


ram*_*esh 5

在该提供程序的 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 = []
    },
]
Run Code Online (Sandbox Code Playgroud)

重要的部分是设置kubelet_extra_args将节点标签应用于节点,并使用该节点标签来设置污点--register-with-taints。这些是 EK​​S 在启动时在每个工作节点上运行的命令。(注意,我在worker组中设置的所有其他参数都可以根据您的要求进行更改)

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