使用 terraform 更新 OKE k8s 集群节点池中每个工作节点的内存不起作用

Updating the memory for each worker node in OKE k8s cluster node pool using terraform is not working

我在 oracle 云中有一个 OKE k8s 集群。它有一个只有一个工作节点的节点池 pool2。此池是使用 terraform 创建的。

现在我正在尝试为节点池中的每个工作节点更新内存和 cpu。 这是我用来创建节点池的 Terraform 脚本:

resource "oci_containerengine_node_pool" "oke-node-pool" {

    # Required variables
    compartment_id = var.compartment_ocid
    cluster_id = var.oke_cluster_ocid
    kubernetes_version = var.node_pool_kubernetes_version
    name = var.node_pool_name
    node_shape = var.node_pool_node_shape
    # subnet_ids = var.node_pool_subnet_ids

    # Specify the source to use to launch nodes in the node pool. Currently, image is the only supported source.
    node_source_details {
         image_id = var.node_image_ocid[var.region]
         source_type = "IMAGE"
    }

    # The configuration of nodes in the node pool.
    node_config_details {
        placement_configs {
            availability_domain = var.node_pool_availability_domain
            subnet_id = var.node_pool_subnet_id
        }
        size = var.node_pool_size
    }


    # The shape configuration of the nodes.
    node_shape_config {
        memory_in_gbs = var.node_shape_config_memory
        ocpus = var.node_shape_config_ocpus
    }

}

我在 terraform.tfvars 文件中更新了 var.node_shape_config_memoryvar.node_shape_config_ocpus 的值(修改了节点的形状配置)并执行了 terraform apply.

apply 操作没有任何错误,它说: Terraform 将执行以下操作:

  # oci_containerengine_node_pool.oke-node-pool will be updated in-place
  ~ resource "oci_containerengine_node_pool" "oke-node-pool" {
        id                  = "ocid1.nodepool.oc1.***.aaaaaaaakc67a"
        name                = "pool2"
        # (11 unchanged attributes hidden)



      ~ node_shape_config {
          ~ memory_in_gbs = 8 -> 16
          ~ ocpus         = 1 -> 2
        }

        # (4 unchanged blocks hidden)
    }

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

此输出中的部分表示节点配置已更新,这是真的,我可以在 OCI 控制台的节点池详细信息中看到它。:

  ~ node_shape_config {
      ~ memory_in_gbs = 8 -> 16
      ~ ocpus         = 1 -> 2
    }

但问题是,当我检查单个节点配置时(通过 OCI 控制台的实例页面),很明显 现有节点具有旧的 ocpumemory配置。它们没有更新。

是否存在对节点池的更新将仅反映在更新后创建的节点上的情况?它们不适用于现有节点?

这个问题有什么办法解决吗?

Oracle docs 说:

You can use Container Engine for Kubernetes to modify the properties of node pools and worker nodes in existing Kubernetes clusters.

You can change:

  • the version of Kubernetes to run on new worker nodes
  • the image to use for new worker nodes
  • the shape to use for new worker nodes
  • the boot volume size to use for new worker nodes

Also note the following:

Any changes you make to worker node properties will only apply to new worker nodes. You cannot change the properties of existing worker nodes.

这意味着,更改仅应用于节点池中的新工作节点。

在某些情况下,当我们想要同时更新节点池中所有工作节点的属性时(例如,将所有工作节点升级到新版本的 Oracle Linux),那么我们应该创建一个新的具有所需属性的工作节点的节点池,并使用 kubectl drain 命令和 pod 中断预算将工作从原始节点池转移到新节点池。