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

Mol*_*pad 3 kubernetes terraform amazon-eks

我通过 Terraform 为 EKS 提供托管节点。那里没有问题,一切正常。

我的问题是,我想向我的节点之一添加一个标签,以用作我的部署之一中的节点选择器。我有一个由 EBS 持久卷支持的应用程序,该卷显然仅在单个可用区中可用,因此我希望我的 pod 安排在那里。

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

kubectl label nodes <my node> <key>=<value>
Run Code Online (Sandbox Code Playgroud)

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

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

Joe*_*eke 6

您可能不需要向特定节点添加标签来解决您的问题。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
Run Code Online (Sandbox Code Playgroud)

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

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

希望这可以帮助。如果您仍有疑问,请告诉我。