使用Terraform配置DigitalOcean Kubernetes动态节点池报错求助
问题分析与修正方案
错误1:Unsupported block type auto_scale
问题原因
DigitalOcean的Terraform Provider中,digitalocean_kubernetes_cluster资源的node_pool块里,auto_scale是布尔类型的参数,而非嵌套块。min_nodes和max_nodes是与auto_scale同级的参数,不需要嵌套在auto_scale块内。你错误地将其定义为dynamic block,导致Terraform识别失败。
错误2:Too many node_pool blocks
问题原因
你使用的DigitalOcean Terraform Provider版本(适配K8s 1.24)不允许在digitalocean_kubernetes_cluster资源中定义多个node_pool块。要创建多个节点池,必须单独使用digitalocean_kubernetes_node_pool资源,而非在集群资源中嵌套多个节点池配置。
修正后的配置代码
1. modules/DO/kubernetes/main.tf
resource "digitalocean_kubernetes_cluster" "example_cluster" { name = var.name region = var.region version = "1.24.12-do.0" # 定义一个默认节点池(若不需要可删除,完全依赖单独的node_pool资源) node_pool { name = "default-pool" size = "s-2vcpu-4gb" node_count = 1 auto_scale = false } } # 单独创建多个自定义节点池 resource "digitalocean_kubernetes_node_pool" "additional_pools" { for_each = { for pool in var.node_pools : pool.name => pool } cluster_id = digitalocean_kubernetes_cluster.example_cluster.id name = each.value.name size = each.value.size node_count = each.value.node_count labels = each.value.labels auto_scale = each.value.auto_scale min_nodes = each.value.auto_scale ? each.value.min_nodes : null max_nodes = each.value.auto_scale ? each.value.max_nodes : null }
2. modules/DO/kubernetes/variables.tf
variable "name" { type = string description = "The name of the Kubernetes cluster to be created." } variable "region" { type = string description = "The region in which to create the Kubernetes cluster." } variable "node_pools" { description = "List of additional node pools" type = list(object({ name = string size = string node_count = number min_nodes = number max_nodes = number auto_scale = bool labels = map(string) })) }
3. app.tf
module "kubernetes" { source = "../modules/kubernetes" name = "test-cluster" region = "fra1" node_pools = [ { name = "pool-test1-8c-16gb-tests" size = "s-8vcpu-16gb" node_count = 2 auto_scale = true # 修正为布尔值,匹配变量定义的bool类型 min_nodes = 1 max_nodes = 15 labels = { runner = "test1" } }, { name = "pool-test2-4c-8gb" size = "s-4vcpu-8gb" node_count = 1 auto_scale = true # 修正为布尔值,匹配变量定义的bool类型 min_nodes = 1 max_nodes = 15 labels = { runner = "test2" } } ] }
额外修正点
- app.tf中
auto_scale的值从字符串"true"改为布尔值true,匹配variables.tf中定义的bool类型,避免类型不兼容错误。 - 在单独的
digitalocean_kubernetes_node_pool资源中,通过三元表达式处理min_nodes和max_nodes:当auto_scale为false时,将其设为null,符合Provider的参数要求。
内容的提问来源于stack exchange,提问作者Debugger
相关产品推荐
相关产品推荐

