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

如何用Terraform删除DigitalOcean Kubernetes默认节点池且不重建集群?

问题描述

我已使用Terraform创建了带有额外节点池的DigitalOcean Kubernetes集群,运行一切正常。

初始配置代码如下:

resource "digitalocean_kubernetes_cluster" "k8s_cluster" {
  depends_on = [digitalocean_container_registry.docker_registry]
  name    = "dev"
  region  = var.region
  version = "1.30.2-do.0"
  registry_integration = true

  node_pool {
    name       = "dev-pool"
    size       = "s-2vcpu-2gb"
    auto_scale = true
    min_nodes  = 2
    max_nodes  = 4

  }
}

resource "digitalocean_kubernetes_node_pool" "new_k8s_node_pool" {
  cluster_id = digitalocean_kubernetes_cluster.k8s_cluster.id

  name       = "dev-pool-new"
  size       = "s-2vcpu-4gb"
  auto_scale = true
  min_nodes  = 2
  max_nodes  = 4
}

现在我希望删除旧节点池dev-pool,仅保留新节点池dev-pool-new维持集群运行。但执行terraform plan后发现Terraform将重建集群,我不想重建集群,仅删除默认节点池。请问该如何操作?是否可以不重建集群就删除默认节点池?

修改后的配置代码如下:

resource "digitalocean_kubernetes_cluster" "k8s_cluster" {
  depends_on = [digitalocean_container_registry.docker_registry]
  name    = "dev"
  region  = var.region
  version = "1.30.2-do.0"
  registry_integration = true

  node_pool {
    name       = "dev-pool-new"
    size       = "s-2vcpu-4gb"
    auto_scale = true
    min_nodes  = 2
    max_nodes  = 4

  }
}

terraform plan输出示例:

digitalocean_kubernetes_cluster.k8s_cluster must be replaced
digitalocean_kubernetes_node_pool.new_k8s_node_pool will be destroyed

解决方案

可以不重建集群就删除默认节点池,问题根源在于Terraform将digitalocean_kubernetes_cluster资源内定义的node_pool块视为集群的核心组成部分,直接修改或删除该块会触发集群重建。正确操作分两步:

步骤1:将原默认节点池转为独立资源管理

修改Terraform配置,把原集群内的dev-pool从digitalocean_kubernetes_cluster的node_pool块中移除,新增一个单独的digitalocean_kubernetes_node_pool资源来管理它,同时保留现有新节点池的资源配置:

resource "digitalocean_kubernetes_cluster" "k8s_cluster" {
  depends_on = [digitalocean_container_registry.docker_registry]
  name    = "dev"
  region  = var.region
  version = "1.30.2-do.0"
  registry_integration = true
  # 移除原来的dev-pool节点池块
}

resource "digitalocean_kubernetes_node_pool" "old_k8s_node_pool" {
  cluster_id = digitalocean_kubernetes_cluster.k8s_cluster.id

  name       = "dev-pool"
  size       = "s-2vcpu-2gb"
  auto_scale = true
  min_nodes  = 2
  max_nodes  = 4
}

resource "digitalocean_kubernetes_node_pool" "new_k8s_node_pool" {
  cluster_id = digitalocean_kubernetes_cluster.k8s_cluster.id

  name       = "dev-pool-new"
  size       = "s-2vcpu-4gb"
  auto_scale = true
  min_nodes  = 2
  max_nodes  = 4
}

执行命令:

terraform plan
terraform apply

这一步Terraform会将原默认节点池转换为独立管理的资源,不会重建集群,也不会影响现有节点池的运行。

步骤2:删除旧节点池资源

确认步骤1执行完成后,删除配置中对应旧节点池的digitalocean_kubernetes_node_pool.old_k8s_node_pool资源块,最终配置如下:

resource "digitalocean_kubernetes_cluster" "k8s_cluster" {
  depends_on = [digitalocean_container_registry.docker_registry]
  name    = "dev"
  region  = var.region
  version = "1.30.2-do.0"
  registry_integration = true
}

resource "digitalocean_kubernetes_node_pool" "new_k8s_node_pool" {
  cluster_id = digitalocean_kubernetes_cluster.k8s_cluster.id

  name       = "dev-pool-new"
  size       = "s-2vcpu-4gb"
  auto_scale = true
  min_nodes  = 2
  max_nodes  = 4
}

再次执行命令:

terraform plan
terraform apply

此时Terraform只会删除旧的dev-pool节点池,不会重建集群,新节点池会正常维持集群运行。

内容的提问来源于stack exchange,提问作者poisoned_monkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:27:05