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
}
}
1条答案
按热度按时间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