【问题标题】:EKS Node Group Terraform - Add label to specific nodeEKS 节点组 Terraform - 将标签添加到特定节点
【发布时间】:2021-03-16 19:52:18
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: kubernetes terraform amazon-eks


    【解决方案1】:

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

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

    【讨论】:

    • 我不知道,这正是我想要的这个用例。太棒了,谢谢你的信息
    【解决方案2】:

    您可以使用 Terraform 轻松实现:

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

    【讨论】:

    • 这会将标签添加到组中的所有节点,这不是我想要的
    • 这在实践中似乎行不通。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 2020-05-19
      • 2020-12-03
      • 2021-02-06
      • 2021-06-21
      • 2021-01-12
      • 2021-07-20
      • 2018-12-28
      • 2020-10-17
      相关资源
      最近更新 更多