You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:05:10