kubernetes Terraform GKE google_container_cluster -应该删除默认节点池吗?

axkjgtzd  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(126)

Terraform google_container_cluster示例删除默认节点池。

resource "google_container_cluster" "primary" {
  name     = "my-gke-cluster"
  location = "us-central1"

  # We can't create a cluster with no node pool defined, but we want to only use
  # separately managed node pools. So we create the smallest possible default
  # node pool and immediately delete it.
  remove_default_node_pool = true
  initial_node_count       = 1
}

但是,由于删除了默认池,因此可能没有节点来部署系统Pod。

问题

使用节点部署系统Pod的好方法是什么?
1.使用节点数为1的默认池,并在默认节点中计划系统pod。将最小自动扩展节点数设置为0,并且不在自动扩展pod中计划系统pod
1.删除默认池。将最小自动扩展节点数设置为1,以便可以在自动扩展节点中部署系统Pod。

节点池定义

resource "google_container_node_pool" "primary" {
  name     = "${google_container_cluster.primary.name}-node-pool"
  project  = var.PROJECT_ID
  location = var.location

  cluster  = google_container_cluster.primary.name

  #--------------------------------------------------------------------------------
  # Node instantiation based on auto-scaling setting.
  # node_count and autoscaling are mutually exclusive.
  #--------------------------------------------------------------------------------
  node_count = var.autoscaling == true ? null : var.num_nodes
  dynamic "autoscaling" {
    for_each = var.autoscaling ? [1] : []
    content {
      min_node_count = var.min_node_count   # Set to 0 currently
      max_node_count = var.max_node_count
    }
  }

  #--------------------------------------------------------------------------------
  # Node configurations
  #--------------------------------------------------------------------------------
  node_config {
    #--------------------------------------------------------------------------------
    # Service Account, the roles of which the node assumes
    #--------------------------------------------------------------------------------
    service_account = var.service_account

    #--------------------------------------------------------------------------------
    # Instance configurations
    #--------------------------------------------------------------------------------
    machine_type = var.machine_type
    preemptible  = var.node_preemptive
    disk_size_gb = var.disk_size_gb
    disk_type    = var.disk_type

    metadata = {
      disable-legacy-endpoints = "true"
    }

    #--------------------------------------------------------------------------------
    # The K8S labels (key/value pairs) to be applied to each node
    #--------------------------------------------------------------------------------
    labels = var.labels

    oauth_scopes = [
      "https://www.googleapis.com/auth/logging.write",
      "https://www.googleapis.com/auth/monitoring",
    ]
    tags = var.tags
  }
}
4uqofj5v

4uqofj5v1#

这些是部署在每个节点上的系统pod,可能是kube-dns、kube-proxy,但如果作为部署运行,则可以作为其中一个节点上的单个副本运行。
使用节点部署系统Pod的好方法是什么?
至少保留1-2个节点用于系统pod,如度量服务器、入口(如果您正在安装在kube-system内部)等。
使用节点数为1的默认池,并在默认节点中计划系统pod。将最小自动扩展节点数设置为0,并且不在自动扩展pod中计划系统pod
如果你已经将自动缩放节点计数设置为0,这并不能保证它会缩小。GKE在缩小节点方面有一些限制,你可能需要先看一下,但是你可以通过更新PDB和检查其他限制来缩小到零。

限制:https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#limitations

删除默认池。将最小自动扩展节点数设置为1,以便可以在自动扩展节点中部署系统Pod。
如果最小计数为1,则这是很好的,系统pod应该在该节点上启动并运行,并且当您部署应用程序时,您的节点在系统pod已经运行的情况下开始根据需要进行扩展。
在这种情况下,如果设置了自动伸缩,您也可以将其缩减到零,并且您部署了应用程序,它将在可用节点上自动启动应用程序和系统,因此在这种情况下也无需太担心。
如果不想删除默认节点池并继续运行1节点,可以使用此字段:https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/container_cluster#remove_default_node_pool

相关问题