» google_container_node_pool
Manages a node pool in a Google Kubernetes Engine (GKE) cluster separately from the cluster control plane. For more information see the official documentation and the API reference.
» Example Usage - using a separately managed node pool (recommended)
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
}
resource "google_container_node_pool" "primary_preemptible_nodes" {
name = "my-node-pool"
location = "us-central1"
cluster = "${google_container_cluster.primary.name}"
node_count = 1
node_config {
preemptible = true
machine_type = "n1-standard-1"
oauth_scopes = [
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring",
]
}
}
» Example Usage - 2 node pools, 1 separately managed + the default node pool
resource "google_container_node_pool" "np" {
name = "my-node-pool"
location = "us-central1-a"
cluster = "${google_container_cluster.primary.name}"
node_count = 3
timeouts {
create = "30m"
update = "20m"
}
}
resource "google_container_cluster" "primary" {
name = "marcellus-wallace"
location = "us-central1-a"
initial_node_count = 3
node_locations = [
"us-central1-c",
]
# Setting an empty username and password explicitly disables basic auth
master_auth {
username = ""
password = ""
}
node_config {
oauth_scopes = [
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring",
]
metadata {
disable-legacy-endpoints = "true"
}
guest_accelerator {
type = "nvidia-tesla-k80"
count = 1
}
}
}
» Argument Reference
-
cluster
- (Required) The cluster to create the node pool for. Cluster must be present inzone
provided for zonal clusters.
-
location
- (Optional) The location (region or zone) in which the cluster resides. -
zone
- (Optional, Deprecated) The zone in which the cluster resides.zone
has been deprecated in favor oflocation
. -
region
- (Optional, Deprecated) The region in which the cluster resides (for regional clusters).zone
has been deprecated in favor oflocation
.
Note: You must specify a location
for either cluster type or the
type-specific region
for regional clusters / zone
for zonal clusters.
-
autoscaling
- (Optional) Configuration required by cluster autoscaler to adjust the size of the node pool to the current cluster usage. Structure is documented below. -
initial_node_count
- (Optional) The initial node count for the pool. Changing this will force recreation of the resource. -
management
- (Optional) Node management configuration, wherein auto-repair and auto-upgrade is configured. Structure is documented below. -
max_pods_per_node
- (Optional, Beta) The maximum number of pods per node in this node pool. Note that this does not work on node pools which are "route-based" - that is, node pools belonging to clusters that do not have IP Aliasing enabled. See the official documentation for more information. -
name
- (Optional) The name of the node pool. If left blank, Terraform will auto-generate a unique name. -
node_config
- (Optional) The node configuration of the pool. See google_container_cluster for schema. -
node_count
- (Optional) The number of nodes per instance group. This field can be used to update the number of nodes per instance group but should not be used alongsideautoscaling
. -
project
- (Optional) The ID of the project in which to create the node pool. If blank, the provider-configured project will be used. -
version
- (Optional) The Kubernetes version for the nodes in this pool. Note that if this field andauto_upgrade
are both specified, they will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy versions are used. See thegoogle_container_engine_versions
data source'sversion_prefix
field to approximate fuzzy versions in a Terraform-compatible way.
The autoscaling
block supports:
-
min_node_count
- (Required) Minimum number of nodes in the NodePool. Must be >=0 and <=max_node_count
. -
max_node_count
- (Required) Maximum number of nodes in the NodePool. Must be >= min_node_count.
The management
block supports:
-
auto_repair
- (Optional) Whether the nodes will be automatically repaired. -
auto_upgrade
- (Optional) Whether the nodes will be automatically upgraded.
» Timeouts
google_container_node_pool
provides the following
Timeouts configuration options:
-
create
- (Default30 minutes
) Used for adding node pools -
update
- (Default10 minutes
) Used for updates to node pools -
delete
- (Default10 minutes
) Used for removing node pools.
» Import
Node pools can be imported using the project
, zone
, cluster
and name
. If
the project is omitted, the default provider value will be used. Examples:
$ terraform import google_container_node_pool.mainpool my-gcp-project/us-east1-a/my-cluster/main-pool
$ terraform import google_container_node_pool.mainpool us-east1-a/my-cluster/main-pool