EKS 节点组 Terraform - 为特定节点添加标签

EKS Node Group Terraform - Add label to specific node

我正在通过 Terraform 使用托管节点配置 EKS。没问题,一切正常。

我的问题是我想向我的一个节点添加一个标签,以用作我的一个部署中的节点选择器。我有一个由 EBS 持久卷支持的应用程序,它显然只能在单个 AZ 中使用,所以我希望我的 pod 在那里安排。

我可以很容易地添加标签:

kubectl label nodes <my node> <key>=<value>

实际上这很好,直到您执行类似将节点组更新到下一个版本的操作。标签不会持续存在,这是有道理的,因为它们不受亚马逊管理。

有没有办法通过 terraform 或其他方式来设置这些标签并使它们持久存在。我注意到 Terraform 的 EKS 提供程序有一个标签选项,但它似乎会将标签添加到节点组中的所有节点,而这不是我想要的。我环顾四周,但找不到任何东西。

您可以使用 Terraform 轻松实现:

resource "aws_eks_node_group" "example" {
  ...
  labels = {
    label_key = "label_value"
  }
}

您可能不需要为特定节点添加标签来解决您的问题。亚马逊作为云提供商向托管节点组中的每个节点添加了一些 Kubernetes 标签。示例:

labels:  
  failure-domain.beta.kubernetes.io/region: us-east-1
  failure-domain.beta.kubernetes.io/zone: us-east-1a
  kubernetes.io/hostname: ip-10-10-10-10.ec2.internal...
  kubernetes.io/os: linux
  topology.ebs.csi.aws.com/zone: us-east-1a
  topology.kubernetes.io/region: us-east-1
  topology.kubernetes.io/zone: us-east-1a

您可以使用的确切标签将取决于您使用的 Kubernetes 版本 运行。尝试 运行 kubectl get nodes -o json | jq '.items[].metadata.labels' 查看集群中每个节点上设置的标签。

我建议使用 topology.kubernetes.io/zone 来匹配包含您的 EBS 卷的可用区。根据 Kubernetes documentation,节点和持久卷都应具有由云提供商填充的此标签。

希望这对您有所帮助。如果您还有问题,请告诉我。

添加第二个节点组(带有所需的节点信息)并标记该节点组。