Skip to content

Instantly share code, notes, and snippets.

@jjtroberts
Last active October 26, 2023 19:18
Show Gist options
  • Save jjtroberts/1c729c20541783cb52cd6e0e867d7f28 to your computer and use it in GitHub Desktop.
Save jjtroberts/1c729c20541783cb52cd6e0e867d7f28 to your computer and use it in GitHub Desktop.
GKE node pool upgrades
#!/usr/bin/env bash
PROJECT=""
LOCATION="us-east4"
CLUSTER=""
CONTEXT=""
FILTER="version:1.25.10-gke.1400"
NODEPOOLS=$(gcloud container node-pools list --cluster=$CLUSTER --project=$PROJECT --region=$LOCATION --filter="$FILTER" --format=json | jq -r ".[].name")
gcloud config set project $PROJECT
kubectl config set-context $CONTEXT
for NODEPOOL in $NODEPOOLS; do
echo "Processing ${NODEPOOL}..."
# Cordon
for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=$NODEPOOL -o=name); do
echo "Cordoning ${node}"
kubectl cordon "$node";
done
# Disable autoscaling
echo "Disabling autoscaling for ${NODEPOOL}"
gcloud container clusters update $CLUSTER \
--no-enable-autoscaling \
--node-pool=$NODEPOOL \
--region=$LOCATION
# Drain
for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=$NODEPOOL -o=name); do
echo "Draining ${node}"
kubectl drain --force --ignore-daemonsets --delete-emptydir-data --grace-period=10 "$node";
done
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment