Managing Cluster Upgrades

1. Planning Cluster Upgrades

StepDetail
Read release notesDeprecations, removed APIs
Skew policykubelet ≤ 3 minors behind API server
API auditkubectl convert, pluto, kube-no-trouble
Backupetcd snapshot + Velero

2. Upgrading Control Plane

sudo apt-mark unhold kubeadm && sudo apt-get install -y kubeadm=1.32.0-1.1 && sudo apt-mark hold kubeadm
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.32.0
# other control-plane nodes
sudo kubeadm upgrade node

3. Upgrading Worker Nodes

kubectl drain NODE --ignore-daemonsets --delete-emptydir-data
ssh NODE
sudo apt-get install -y kubelet=1.32.0-1.1 kubectl=1.32.0-1.1
sudo systemctl daemon-reload && sudo systemctl restart kubelet
kubectl uncordon NODE

4. Upgrading kubectl

brew upgrade kubernetes-cli                        # macOS
curl -LO "https://dl.k8s.io/release/v1.32.0/bin/linux/amd64/kubectl"   # linux

5. Upgrading Managed Clusters

ProviderCommand
EKSeksctl upgrade cluster --name N --version 1.32
GKEgcloud container clusters upgrade N --cluster-version=1.32
AKSaz aks upgrade -g G -n N --kubernetes-version 1.32.0

6. Using Blue-Green Strategy

Blue/Green Cluster Upgrade

[blue cluster v1.31] -- traffic --→
                                   ↘
[green cluster v1.32] (replica)    ←-- switch DNS / LB --
        

7. Performing Rolling Upgrades

StepDetail
Per-nodedrain → upgrade → uncordon
ParallelismLimit to 1-2 nodes; respect PDBs

8. Testing Before Upgrade

ToolUse
kube-no-trouble (kubent)Detect deprecated APIs in cluster
plutoAudit Helm/YAML for removed APIs
SonobuoyConformance + e2e tests

9. Rolling Back Upgrades

LayerMethod
Control planeRestore etcd snapshot
WorkersDowngrade kubelet package (skew permitting)
ManagedMost providers don't allow version rollback

10. Monitoring Upgrade Progress

kubectl get nodes -o wide
kubectl get componentstatuses
kubectl version
kubectl get pods -A | grep -v Running