This page shows you how to add and perform operations on node pools running your Google Kubernetes Engine (GKE) clusters. To learn about how node pools work, refer to Node pools.
Before you begin
Before you start, make sure you have performed the following tasks:
- Ensure that you have enabled the Google Kubernetes Engine API. Enable Google Kubernetes Engine API
- Ensure that you have installed the Cloud SDK.
Set up default gcloud
settings using one of the following methods:
- Using
gcloud init
, if you want to be walked through setting defaults. - Using
gcloud config
, to individually set your project ID, zone, and region.
Using gcloud init
If you receive the error One of [--zone, --region] must be supplied: Please specify
location
, complete this section.
-
Run
gcloud init
and follow the directions:gcloud init
If you are using SSH on a remote server, use the
--console-only
flag to prevent the command from launching a browser:gcloud init --console-only
-
Follow the instructions to authorize
gcloud
to use your Google Cloud account. - Create a new configuration or select an existing one.
- Choose a Google Cloud project.
- Choose a default Compute Engine zone.
Using gcloud config
- Set your default project ID:
gcloud config set project PROJECT_ID
- If you are working with zonal clusters, set your default compute zone:
gcloud config set compute/zone COMPUTE_ZONE
- If you are working with regional clusters, set your default compute region:
gcloud config set compute/region COMPUTE_REGION
- Update
gcloud
to the latest version:gcloud components update
Adding a node pool
gcloud
To create a node pool, run the gcloud container node-pools create
command:
gcloud container node-pools create POOL_NAME --cluster CLUSTER_NAME
--machine-type
: The Compute Engine machine type to use for instances in the node pool. If unspecified, the default machine type ise2-medium
. Refer togcloud container node-pools create --machine-type
for information on specifying machine types.--num-nodes
: Specifies the number of nodes to create in the node pool. Default is 3. Your project must have enough quota available for the number of nodes, as well as sufficient route quota.--disk-size
: Size in GB for node VM boot disks. Defaults to 100GB.--image-type
: The image type to use for the node pool. Image type specifies the base OS to run on nodes in the node pool. If an image type is specified, that is assigned to the node pool and all future upgrades use the specified image type. If it is not specified, the server chooses the default image type.The default image type and the list of valid image types are available using the following command:
gcloud container get-server-config
--min-cpu-platform
: The baseline minimum CPU platform to run on the nodes.--node-locations=[ZONE,ZONE,...]
: Enables you to specify zones for your node pools independently of setting the zone for a cluster. Multiple locations can be specified, separated by commas and you can use this flag for single zone, multi-zone, and regional clusters. You can also use this flag to change the zones of your node pool after you've created your cluster usingnode-pools update --node-locations=[zones]
.--scopes=SCOPE,[SCOPE,...]
: Specifies scopes for the node instances. For example:gcloud container node-pools create example-cluster \ --scopes https://www.googleapis.com/auth/devstorage.read_only
gcloud container node-pools create example-cluster \ --scopes bigquery,storage-rw,compute-ro
Multiple comma-delimited scopes can be specified. The scopes necessary for the cluster to function properly (
compute-rw
,storage-ro
), are always added, even if not explicitly specified.SCOPE
can be either the full URI of the scope or an alias.
For the full list of options, refer to the
gcloud container node-pools create
documentation.
A successful node-pools create
request returns the node pool information:
Creating node pool example-pool...done. Created [https://container.googleapis.com/v1/projects/kubernetes-engine-docs/zones/us-central1-f/clusters/example-cluster/nodePools/example-pool]. NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION example-pool e2-medium 100 1.2.4
The node pool is created. Occasionally, the node pool is created
successfully but the gcloud
command times out instead of reporting the
status from the server. To check the status of all node pools, including
ones not yet fully provisioned, use the following command:
gcloud container node-pools list --cluster CLUSTER_NAME
Console
To add a node pool to an existing cluster, perform the following steps:
Visit the Google Kubernetes Engine menu in Cloud Console.
Beside the cluster you want to edit, click more_vert Actions, then click edit Edit.
Click add_box Add Node Pool.
Configure your node pool as desired.
Click Create to add the node pool.
Viewing node pools in a cluster
gcloud
To list all the node pools of a cluster, run the
gcloud container node-pools list
command:
gcloud container node-pools list --cluster CLUSTER_NAME
To view details about a specific node pool, run the
gcloud container node-pools describe
command:
gcloud container node-pools describe POOL_NAME \ --cluster CLUSTER_NAME
Replace the following:
CLUSTER_NAME
: the name of the cluster.POOL_NAME
: the name of the node pool to view.
Console
To view node pools for a cluster, perform the following steps:
Visit the Google Kubernetes Engine menu in Cloud Console.
Click the name of the cluster you want to view.
Click the Nodes tab next to the Details tab.
The Node Pools section shows the node pools in the cluster.
To view the details for a specific node pool, click the node pool's name.
Resizing a node pool
gcloud
To resize a cluster's node pools, run the
gcloud container clusters resize
command:
gcloud container clusters resize CLUSTER_NAME --node-pool POOL_NAME \ --num-nodes NUM_NODES
Replace the following:
CLUSTER_NAME
: the name of the cluster to resize.POOL_NAME
: the name of the node pool to resize.NUM_NODES
: the number of nodes in the pool in a zonal cluster. If you use multi-zonal or regional clusters, NUM_NODES is the number of nodes for each zone the node pools is in.
Repeat this command for each node pool. If your cluster has only one node
pool, omit the --node-pool
flag.
Console
To resize a cluster's node pools, perform the following steps:
Visit the Google Kubernetes Engine menu in Cloud Console.
Beside the cluster you want to edit, click more_vert Actions, then click edit Edit.
Click the Nodes tab next to the Details tab.
In the Node Pools section, click the name of the node pool that you want to resize.
Click edit Resize.
In the Number of nodes field, enter how many nodes that you want in the node pool, and then click Resize.
Repeat for each node pool as needed.
Upgrading a node pool
gcloud
To update all nodes to the same version as the control plane, run the
gcloud container clusters upgrade
command:
gcloud container clusters upgrade CLUSTER_NAME
To update a specific node pool, specify the --node-pool
flag:
gcloud container clusters upgrade CLUSTER_NAME --node-pool POOL_NAME
Console
To upgrade a node pool, perform the following steps:
Visit the Google Kubernetes Engine menu in Cloud Console.
Beside the cluster you want to edit, click more_vert Actions, then click edit Edit.
Click the Nodes tab next to the Details tab.
In the Node Pools section, click the name of the node pool that you want to upgrade.
Click edit Edit.
Under the Node version field, click Change.
Select the desired Kubernetes version.
Read the warning, then click Change to confirm.
Deploying a Pod to a specific node pool
You can explicitly deploy a Pod to a specific node pool by using a
nodeSelector
in your Pod manifest. nodeSelector
schedules Pods onto
nodes with a matching label.
All GKE node pools have labels with the following format:
cloud.google.com/gke-nodepool: POOL_NAME
.
Add this label to the nodeSelector
field in your Pod as shown in the
following example:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
cloud.google.com/gke-nodepool: POOL_NAME
For more information, see Assigning Pods to Nodes.
As an alternative to node selector, you can use node affinity. Use node affinity if you want a "soft" rule where the Pod attempts to meet the constraint, but is still scheduled even if the constraint can't be satisfied. For more information, see Node affinity. You can also specify resource requests for the containers.
Deleting a node pool
Deleting a node pool deletes the nodes and routes to them. Any Pods running on those nodes are evicted and rescheduled. If the Pods have specific node selectors, the Pods might remain in an unschedulable condition if no other node in the cluster satisfies the criteria.
gcloud
To delete a node pool, run the gcloud container node-pools delete
command:
gcloud container node-pools delete POOL_NAME --cluster CLUSTER_NAME
Console
To delete a node pool, perform the following steps:
Visit the Google Kubernetes Engine menu in Cloud Console.
Beside the cluster you want to edit, click more_vert Actions, then click edit Edit.
Click the Nodes tab next to the Details tab.
In the Node Pools section, beside of the node pool you want to delete, click delete.
Confirm that you want to delete the node pool by clicking Delete.
What's next
- Read about how node pools work.
- Learn about auto-provisioning node pools.
- Learn how to configure
kubelet
andsysctl
using Node System Configuration.