【问题标题】:Using count and for_each together to create AKS additional node pool by terraform通过 terraform 一起使用 count 和 for_each 来创建 AKS 附加节点池
【发布时间】:2021-10-24 00:54:54
【问题描述】:

Terraform sn -p 下面完成 0/1/2 个额外的节点池,

resource "azurerm_kubernetes_cluster_node_pool" "aksnp" {
  lifecycle {
    ignore_changes = [
      node_count
    ]
  }
  count                 = local.additional_node_pool_required == "true" ? 1 : 0
  for_each              = var.additional_node_pools
  kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
  name                  = each.value.node_os == "Windows" ? substr(each.key, 0, 6) : substr(each.key, 0, 12)
  node_count            = each.value.node_count
  vm_size               = each.value.vm_size
  availability_zones    = each.value.zones
  max_pods              = each.value.max_pods
  os_disk_size_gb       = each.value.os_disk_size_gb
  os_type               = each.value.node_os
  vnet_subnet_id        = var.vnet_subnet_id
  node_taints           = each.value.taints
  enable_auto_scaling   = each.value.cluster_auto_scaling
  min_count             = each.value.cluster_auto_scaling_min_count
  max_count             = each.value.cluster_auto_scaling_max_count
}

不幸的是,它不起作用。它会抛出如下所示的明显错误,

The Terraform configuration must be valid before initialization so that
Terraform can determine which modules and providers need to be installed.
╷
│ Error: Invalid combination of "count" and "for_each"
│
│   on main.tf line 99, in resource "azurerm_kubernetes_cluster_node_pool" "aksnp":
│   99:   for_each              = var.additional_node_pools
│
│ The "count" and "for_each" meta-arguments are mutually-exclusive, only one should be used to be explicit about the number of resources to be created.

我对如何使用设置创建节点池感到困惑,因此需要您的指导和帮助?

我需要 for_each,因为我希望为客户提供创建任意数量的额外节点池的选项。

我也确实有一些业务用户不能请求额外的节点池的要求。

我们如何解决这两个问题?

在 Terraform 中没有简单的方法吗?

P。 S:如何将父模块 (local_additional_pools_required) 的值设置为 false?因为我希望父模块指示子模块 (AKS) 是否要创建其他节点池。

【问题讨论】:

    标签: azure terraform azure-aks


    【解决方案1】:

    您也可以使用for_each 来创建条件资源:

    for_each              = local.additional_node_pool_required == "true" ? var.additional_node_pools : {}
    

    【讨论】:

    • 谢谢马尔辛!今天测试一下,让你知道。
    • @learner 没问题。让我知道进展如何:-)
    • 当我不想创建额外的节点池时,在父模块中提出一个快速问题我设置变量additional_node_pool_required = false?但是本地人是模块内部的而不是外部的?请提供一些启示。
    • @learner 不知道你是什么意思?但我猜你想从子模块访问父级的本地人?那你是对的,你不能那样做。
    • 嗨@Marcin,我已经用PS部分更新了我的问题。请给我一些指导。非常感谢!
    猜你喜欢
    • 2022-01-24
    • 2019-09-12
    • 2021-04-11
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多