【问题标题】:Tagging autoscaling groups created by EKS标记由 EKS 创建的自动缩放组
【发布时间】:2022-05-12 21:03:01
【问题描述】:

我使用 terraform-aws-eks module 创建了一个 AWS EKS 集群。 Terraform 版本是 1.0.6,aws 提供者版本是 3.60.0。有了这些版本,我应该能够使用aws_autoscaling_group_tag 资源来标记由 EKS 创建的 ASG。

我的问题是模块中的节点组是地图的映射(描述为here),我不知道如何遍历我的节点组以标记其中的所有 ASG。以下是 terraform 的示例:

resource "aws_eks_node_group" "example" {
  cluster_name    = "example"
  node_group_name = "example"

  # ... other configuration ...
}

resource "aws_autoscaling_group_tag" "example" {
  for_each = toset(
    [for asg in flatten(
      [for resources in aws_eks_node_group.example.resources : resources.autoscaling_groups]
    ) : asg.name]
  )

  autoscaling_group_name = each.value

  tag {
    key   = "k8s.io/cluster-autoscaler/node-template/label/eks.amazonaws.com/capacityType"
    value = "SPOT"

    propagate_at_launch = false
  }
}

在这种情况下,有一个特定的节点组。但就我而言,有 3 个节点组,我希望标记所有 ASG。到目前为止,我还没有在 terraform 中使用太多循环,我什至不确定它是否会起作用。感谢您的帮助!

【问题讨论】:

  • 为什么不用additional_tags模块自己标记节点组?
  • 我不知道additional_tags 是否也标记了自动缩放组。我会尽力。谢谢。
  • 如果您可以选择; eksctl 自动为您提供标签 propagate,它适用于自管理和受管节点组。目前,terraform-aws-eks 模块支持托管节点组的标签传播,尚不支持自托管节点组。

标签: terraform amazon-eks terraform0.12+ terraform-aws-modules


【解决方案1】:

你提到你使用terraform-aws-eks module。当您使用该模块时,节点组(托管或自我托管)的定义是该模块的一部分。这个模块基本上使用了一个子模块eks-managed-node-group,这个子模块支持标记。该模块基于这些模板创建 Launch 模板和 ASG 组。

您不需要在模块外标记 ASG。您最好不要这样做,因为它会影响您的基础架构配置:下次您在 terraform-aws-eks 模块代码上运行 apply 时,标签 可能会发生更改。

您的配置应如下所示:

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 18.0"
  ..
  ..

  # EKS Managed Node Group(s)
  eks_managed_node_group_defaults = {
    tags = {
      "k8s.io/cluster-autoscaler/node-template/label/eks.amazonaws.com/capacityType" = "SPOT"
    }
  }

  eks_managed_node_groups = {
    blue = {}
    green = {
      min_size     = 1
      max_size     = 10
      desired_size = 1

      instance_types = ["t3.large"]
    }
  }

eks_managed_node_group_defaults 指定标签将应用于所有节点组。如果您希望它们不同,您可以为每个节点组配置它(在上面的示例中,蓝色和绿色)。

注意使用tags 意味着所有创建的资源都会被标记。我不觉得它有问题,但如果你这样做了,那么这里需要一个不同的解决方案。

这是一个link,用于子模块的所有支持的输入。

您可以查看模块文档以获取更多示例。


如果我理解正确,您希望创建容量类型为 SPOT 实例的 ASG 组。 terraform-aws-eks 模块具有 capacity_type 参数,该参数被描述为与 EKS 节点组关联的容量类型。有效值:ON_DEMANDSPOT

然后,实现您的目标就简单多了:

  eks_managed_node_group_defaults = {
    capacity_type  = "SPOT"
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2018-06-17
    • 2020-03-31
    • 2014-05-29
    • 2017-11-22
    相关资源
    最近更新 更多