如何通过Terraform在AWS EKS特定节点部署aws-load-balancer-controller
在Terraform中配置AWS Load Balancer Controller的Pod节点调度
Terraform的helm_release资源本身没有暴露直接的nodeSelector/affinity配置项,你需要通过传递Helm Chart的自定义values来实现Pod的节点调度——AWS Load Balancer Controller的官方Helm Chart支持在values里配置Pod的调度规则。
方法1:使用set参数直接配置简单规则
如果只需要基础的nodeSelector,可以直接在helm_release资源里添加set块,指定目标节点的标签:
resource "helm_release" "aws_load_balancer_controller" { name = "aws-load-balancer-controller" repository = "https://aws.github.io/eks-charts" chart = "aws-load-balancer-controller" version = "v2.5.4" # 替换为你实际使用的Chart版本 set { name = "controller.nodeSelector.eks\\.amazonaws\\.com/nodegroup" value = "your-target-nodegroup" # 替换为你的目标节点组名称 } # 补充必要的集群配置 set { name = "clusterName" value = "your-eks-cluster-name" } set { name = "serviceAccount.create" value = "true" } set { name = "serviceAccount.name" value = "aws-load-balancer-controller" } }
注意:标签中包含点号等特殊字符时,需要用双反斜杠转义,避免HCL解析报错。
方法2:使用values块配置复杂调度规则(如nodeAffinity)
如果需要更灵活的调度逻辑(比如强制匹配标签、偏好性调度),可以通过values块传递完整的YAML配置:
resource "helm_release" "aws_load_balancer_controller" { name = "aws-load-balancer-controller" repository = "https://aws.github.io/eks-charts" chart = "aws-load-balancer-controller" version = "v2.5.4" # 替换为你实际使用的Chart版本 values = [ <<-EOT controller: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/nodegroup operator: In values: - your-target-nodegroup - key: custom-node-label operator: Exists EOT ] # 补充必要的集群配置 set { name = "clusterName" value = "your-eks-cluster-name" } # 省略serviceAccount等其他必填配置... }
前置检查
- 确保目标节点已经打好对应标签,可通过
kubectl get nodes --show-labels确认标签存在; - 确认使用的AWS Load Balancer Controller Chart版本支持该配置(官方v2.x系列均支持)。
内容的提问来源于stack exchange,提问作者MIHIR UPADHYAY
相关产品推荐
相关产品推荐

