Google Kubernetes Engine (GKE) Cheatsheet
Cluster Management
- Create a basic GKE cluster
gcloud container clusters create <cluster-name> \
--zone=<zone> \
--num-nodes=3
- Create GKE cluster with machine type
gcloud container clusters create <cluster-name> \
--zone=<zone> \
--machine-type=e2-standard-4 \
--num-nodes=3 \
--disk-size=100GB
- Create autopilot cluster (serverless)
gcloud container clusters create-auto <cluster-name> \
--region=<region>
gcloud container clusters create <cluster-name> \
--zone=<zone> \
--enable-private-nodes \
--master-ipv4-cidr-block=172.16.0.0/28 \
--enable-ip-alias
gcloud container clusters list
gcloud container clusters describe <cluster-name> --zone=<zone>
gcloud container clusters get-credentials <cluster-name> --zone=<zone>
gcloud container clusters delete <cluster-name> --zone=<zone>
Node Pool Management
gcloud container node-pools list --cluster=<cluster-name> --zone=<zone>
- Create additional node pool
gcloud container node-pools create <pool-name> \
--cluster=<cluster-name> \
--zone=<zone> \
--machine-type=e2-standard-2 \
--num-nodes=2
- Create preemptible node pool
gcloud container node-pools create <pool-name> \
--cluster=<cluster-name> \
--zone=<zone> \
--preemptible \
--machine-type=e2-standard-2 \
--num-nodes=3
gcloud container node-pools create <pool-name> \
--cluster=<cluster-name> \
--zone=<zone> \
--spot \
--machine-type=e2-standard-2 \
--num-nodes=3
- Enable autoscaling for node pool
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-autoscaling \
--node-pool=<pool-name> \
--min-nodes=1 \
--max-nodes=10
gcloud container clusters resize <cluster-name> \
--zone=<zone> \
--node-pool=<pool-name> \
--num-nodes=5
gcloud container node-pools delete <pool-name> \
--cluster=<cluster-name> \
--zone=<zone>
Cluster Operations
gcloud container clusters upgrade <cluster-name> \
--zone=<zone> \
--master
gcloud container clusters upgrade <cluster-name> \
--zone=<zone> \
--node-pool=<pool-name>
gcloud container get-server-config --zone=<zone>
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-autorepair \
--enable-autoupgrade
Google Container Registry (GCR) Integration
gcloud auth configure-docker
docker tag <image-name> gcr.io/<project-id>/<image-name>:<tag>
docker push gcr.io/<project-id>/<image-name>:<tag>
gcloud container images list
- List tags for specific image
gcloud container images list-tags gcr.io/<project-id>/<image-name>
gcloud container images delete gcr.io/<project-id>/<image-name>:<tag>
Networking
- Create cluster with custom network
gcloud container clusters create <cluster-name> \
--zone=<zone> \
--network=<vpc-name> \
--subnetwork=<subnet-name> \
--enable-ip-alias
- Enable HTTP load balancing
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-http-load-balancing
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-network-policy
- Create cluster with authorized networks
gcloud container clusters create <cluster-name> \
--zone=<zone> \
--enable-master-authorized-networks \
--master-authorized-networks=<cidr-range>
Security and Identity
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--workload-pool=<project-id>.svc.id.goog
- Create service account for Workload Identity
gcloud iam service-accounts create <ksa-name>
- Bind Kubernetes SA to Google SA
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:<project-id>.svc.id.goog[<namespace>/<ksa-name>]" \
<gsa-name>@<project-id>.iam.gserviceaccount.com
- Enable Binary Authorization
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-binauthz
- Enable Pod Security Policy
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-pod-security-policy
Storage
gcloud compute disks create <disk-name> \
--size=10GB \
--zone=<zone>
- Example StorageClass for SSD persistent disks
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
replication-type: none
- Example PVC using custom StorageClass
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: fast-storage
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast-ssd
resources:
requests:
storage: 10Gi
Monitoring and Logging
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-cloud-monitoring
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-cloud-logging
gcloud container operations list
- Describe specific operation
gcloud container operations describe <operation-id> --zone=<zone>
Autopilot Clusters
gcloud container clusters create-auto <cluster-name> \
--region=<region>
gcloud container clusters update <cluster-name> \
--region=<region> \
--enable-autoscaling
- Get Autopilot cluster info
gcloud container clusters describe <cluster-name> \
--region=<region> \
--format="value(autopilot)"
Troubleshooting
gcloud container clusters describe <cluster-name> \
--zone=<zone> \
--format="value(status)"
kubectl get events --sort-by='.metadata.creationTimestamp'
kubectl get nodes -o wide
kubectl describe nodes
kubectl run test-pod --image=busybox -it --rm -- nslookup kubernetes.default
gcloud container clusters describe <cluster-name> \
--zone=<zone> \
--format="value(addonsConfig)"
Multi-Zone and Regional Clusters
gcloud container clusters create <cluster-name> \
--region=<region> \
--num-nodes=1
- Create multi-zone cluster
gcloud container clusters create <cluster-name> \
--zone=<zone> \
--additional-zones=<zone1>,<zone2> \
--num-nodes=1
- Add zones to existing cluster
gcloud container node-pools update <pool-name> \
--cluster=<cluster-name> \
--zone=<zone> \
--additional-zones=<zone1>,<zone2>
Advanced Features
- Enable Istio service mesh
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-istio
- Enable cluster autoscaling
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-autoscaling \
--min-nodes=1 \
--max-nodes=10
- Enable vertical pod autoscaling
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-vertical-pod-autoscaling
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-shielded-nodes
Cost Optimization
- Create preemptible cluster
gcloud container clusters create <cluster-name> \
--zone=<zone> \
--preemptible \
--num-nodes=3
- Enable cluster autoscaling
gcloud container clusters update <cluster-name> \
--zone=<zone> \
--enable-autoscaling \
--min-nodes=0 \
--max-nodes=5
gcloud container node-pools create <pool-name> \
--cluster=<cluster-name> \
--zone=<zone> \
--spot \
--num-nodes=3
Useful kubectl Commands for GKE
kubectl cluster-info
kubectl get nodes -o wide
kubectl get pods --all-namespaces
kubectl create deployment nginx --image=gcr.io/<project-id>/nginx:latest
- Create load balancer service
kubectl expose deployment nginx --port=80 --type=LoadBalancer
- Check GKE-specific annotations
kubectl get service nginx -o yaml | grep -A 5 -B 5 "cloud.google.com"
Configuration Examples
- Example cluster with advanced features
gcloud container clusters create production-cluster \
--zone=us-central1-a \
--machine-type=e2-standard-4 \
--num-nodes=3 \
--enable-autoscaling \
--min-nodes=1 \
--max-nodes=10 \
--enable-autorepair \
--enable-autoupgrade \
--enable-network-policy \
--enable-ip-alias \
--enable-cloud-logging \
--enable-cloud-monitoring \
--disk-size=100GB \
--disk-type=pd-ssd
- Example Autopilot cluster
gcloud container clusters create-auto autopilot-cluster \
--region=us-central1 \
--enable-private-nodes \
--enable-master-authorized-networks \
--master-authorized-networks=10.0.0.0/8