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



我正在通过Terraform为托管节点配置EKS。没有问题,一切都很好。

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

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

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

实际上,这很好,直到你做了一些事情,比如将节点组更新到下一个版本。这些标签不会持续存在,这是有道理的,因为它们不是由亚马逊管理的。

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

您可能不需要为特定节点添加标签来解决问题。作为云提供商的Amazon为托管节点组中的每个节点添加了一些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文档,节点和持久卷都应该由云提供商填充此标签。

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

使用Terraform:可以轻松实现

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

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

最新更新