如何使用 Terraform 正确更改 Google Kubernetes Engine 节点池?

How to Properly Change a Google Kubernetes Engine Node Pool Using Terraform?

我已经在 Google 云平台 (GCP) 项目 ($GCP_PROJECT_NAME) 中成功创建了一个 Google Kubernetes Engine (GKE) 集群 ($GKE_CLUSTER_NAME):

gcloud container clusters list \
--format="value(name)" \
--project=$GCP_PROJECT_NAME

#=>

. . .
$GKE_CLUSTER_NAME
. . .

使用节点池$GKE_NODE_POOL:

gcloud container node-pools list \
--cluster=$GKE_CLUSTER_NAME \
--format="value(name)" \
--zone=$GKE_CLUSTER_ZONE

#=>

$GKE_NODE_POOL

我正在检查这个配置。通过以下 container_node_pool.tf:

使用 Terraform 进入 SCM
resource "google_container_node_pool" ". . ." {
  autoscaling {
    max_node_count = "3"
    min_node_count = "3"
  }

  . . .

  initial_node_count = "3"

  . . .

}

并且我确认上面的 Terraform 配置匹配 $GKE_NODE_POOL 运行 目前在 $GKE_CLUSTER_NAME$GCP_PROJECT_NAME:

terraform plan

#=>

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.

如果我想更改 $GKE_NODE_POOL:

resource "google_container_node_pool" ". . ." {
  autoscaling {
    max_node_count = "4"
    min_node_count = "4"
  }

  . . .

  initial_node_count = "4"

  . . .

}

并将 $GKE_NODE_POOL 中的 node 的数量从 3 缩放到 4,我在尝试 plan 时得到以下输出:

terraform plan

#=>

. . .

Plan: 1 to add, 0 to change, 1 to destroy.

. . .

如何在不破坏资源然后重新创建资源的情况下更新 $GKE_NODE_POOL

更改任何 google_container_node_pool initial_node_count 参数将 触发破坏和重建。只是不要修改 initial_node_count,您应该能够修改 $GKE_NODE_POOL 参数,例如 min_node_countmax_node_count.

plan 命令的输出 应该 明确显示哪个参数导致破坏和重建行为 [红色]:

terraform plan

. . .

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # google_container_node_pool.$GKE_NODE_POOL must be replaced
-/+ resource "google_container_node_pool" ". . ." {

. . .

      ~ initial_node_count  = 3 -> 4 # forces replacement

. . .

Plan: 1 to add, 0 to change, 1 to destroy.

. . .

initial_node_count 参数似乎是 只有 参数 google_container_node_pool 导致此行为; initial_node_count 参数似乎也是 可选 .

您可以在官方文档中阅读此警告 here