Cluster Upgrades

Upgrade the control plane first, then node groups and add-ons, one minor version at a time.

Kubernetes releases a new minor version roughly every quarter, and EKS supports each for a limited window. Upgrading on schedule keeps you supported and on the standard price.

The safe order

  1. Read the release notes and check for deprecated APIs your manifests use.
  2. Upgrade the control plane one minor version (you cannot skip versions).
  3. Update the add-ons to compatible versions.
  4. Upgrade the node groups so kubelet matches the control plane.

Node upgrades are graceful

Managed node groups roll nodes one at a time, cordoning and draining each before replacing it, so workloads keep running.

Example

Example · bash
# Upgrade the control plane, then the node group
eksctl upgrade cluster --name demo --version 1.31 --approve

eksctl upgrade nodegroup \
  --cluster demo \
  --name ng-default \
  --kubernetes-version 1.31

When to use it

  • A platform team plans a 1.29 to 1.30 cluster upgrade, running kubectl api-resources first to find any deprecated API usage in their deployed manifests.
  • An SRE team upgrades the control plane first and verifies nodes stay healthy before rolling node groups, following the one-version-at-a-time EKS rule.
  • A DevOps engineer uses eksctl upgrade nodegroup to replace nodes with the new AMI using a rolling update, draining one node at a time.

More examples

Check for deprecated API usage

Runs pluto against the live cluster to find any resources using APIs deprecated or removed in the target Kubernetes version before upgrading.

Example · bash
# Install pluto
brew install pluto
# Scan all cluster manifests
pluto detect-all-in-cluster --target-versions k8s=v1.30

Upgrade control plane version

Upgrades the EKS control plane to version 1.30 in place, then verifies the new version is active.

Example · bash
eksctl upgrade cluster \
  --name prod \
  --version 1.30 \
  --approve
aws eks describe-cluster \
  --name prod \
  --query 'cluster.version' \
  --output text

Roll node group to new version

Rolls the managed node group to the EKS-optimized AMI for 1.30, draining and replacing nodes one at a time to maintain workload availability.

Example · bash
eksctl upgrade nodegroup \
  --cluster prod \
  --name workers \
  --kubernetes-version 1.30
kubectl get nodes -o wide

Discussion

  • Be the first to comment on this lesson.