Terraform GKE google_container_cluster - 应该删除默认节点池吗?
Terraform GKE google_container_cluster - should remove default node pool?
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
}
但是,由于删除了默认池,因此没有节点可以部署系统pods。
问题
有节点部署系统有什么好的方法pods?
- 有一个节点数为 1 的默认池,并在默认节点中安排系统 pods。将最小自动缩放节点数设置为 0,并且不在自动缩放 pods
中调度系统 pods
- 删除默认池。将最小自动缩放节点数设置为 1,以便系统 pods 可以部署在自动缩放节点中。
节点池定义
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
}
}
那些是部署在每个节点上的系统 pods,可能 kube-dns、kube-proxy 但是度量服务器和其他 运行 作为部署的那些可以是 运行作为节点之一上的单个副本。
What is the good way to have a node to deploy the system pods?
至少为系统 pods 保留 1-2 个节点 ,例如度量服务器,如果安装在内部 kube-system 等
Have a default pool with number of nodes is 1 and schedule system pods
in the defaujlt node. Set the min autoscaling node count to 0 and do
not schedule system pods in auto scaling pods
无法保证您是否已将自动缩放节点数设置为 0,这意味着它会缩减。 GKE 在缩小节点方面存在限制,您可能需要先看一下,但是是的,您可以通过更新 PDB 并检查其他限制来缩小到零。
限制 : https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#limitations
Remove the default pool. Set the min autoscaling node count to 1 so
that system pods can be deployed in a autoscaling node.
如果最小计数为 1 系统 pods 应该启动并且 运行 在该节点上,这很好,并且当您部署应用程序时,您的节点开始根据需要扩展,而系统 pods 已经是 运行.
在这种情况下,如果设置了自动缩放并且您部署了应用程序,您也可以缩小到零,它将 auto-start 应用程序和系统部署在可用节点上,因此在这种情况下也不必担心。
如果你不想移除默认节点池并保留运行 1个节点,你可以使用这个字段:https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/container_cluster#remove_default_node_pool
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
}
但是,由于删除了默认池,因此没有节点可以部署系统pods。
问题
有节点部署系统有什么好的方法pods?
- 有一个节点数为 1 的默认池,并在默认节点中安排系统 pods。将最小自动缩放节点数设置为 0,并且不在自动缩放 pods 中调度系统 pods
- 删除默认池。将最小自动缩放节点数设置为 1,以便系统 pods 可以部署在自动缩放节点中。
节点池定义
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
}
}
那些是部署在每个节点上的系统 pods,可能 kube-dns、kube-proxy 但是度量服务器和其他 运行 作为部署的那些可以是 运行作为节点之一上的单个副本。
What is the good way to have a node to deploy the system pods?
至少为系统 pods 保留 1-2 个节点 ,例如度量服务器,如果安装在内部 kube-system 等
Have a default pool with number of nodes is 1 and schedule system pods in the defaujlt node. Set the min autoscaling node count to 0 and do not schedule system pods in auto scaling pods
无法保证您是否已将自动缩放节点数设置为 0,这意味着它会缩减。 GKE 在缩小节点方面存在限制,您可能需要先看一下,但是是的,您可以通过更新 PDB 并检查其他限制来缩小到零。
限制 : https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#limitations
Remove the default pool. Set the min autoscaling node count to 1 so that system pods can be deployed in a autoscaling node.
如果最小计数为 1 系统 pods 应该启动并且 运行 在该节点上,这很好,并且当您部署应用程序时,您的节点开始根据需要扩展,而系统 pods 已经是 运行.
在这种情况下,如果设置了自动缩放并且您部署了应用程序,您也可以缩小到零,它将 auto-start 应用程序和系统部署在可用节点上,因此在这种情况下也不必担心。
如果你不想移除默认节点池并保留运行 1个节点,你可以使用这个字段:https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/container_cluster#remove_default_node_pool