首页 > 解决方案 > 通过 terraform 一起使用 count 和 for_each 来创建 AKS 附加节点池

问题描述

下面的 Terraform 片段以完成 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 中没有简单的方法吗?

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

标签: azureterraformazure-aks

解决方案


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

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

推荐阅读