delivered for clients · names withheldupgrade Cloud and infrastructure

Kubernetes, EKS and OpenShift version upgrades

Cohash upgrades Kubernetes on Amazon EKS, AKS and Red Hat OpenShift and puts a cadence in place so clusters don't drift again. Before any change, manifests and Helm charts are scanned for removed APIs and each add-on and operator is checked against the target version. We upgrade a non-production cluster first, then move control planes and node pools one minor at a time. Clusters on extended support get a dated exit plan.

  1. 01Cluster and add-on inventory
  2. 02Deprecated API and chart scan
  3. 03Rehearse on non-production
  4. 04Control plane, then nodes
  5. 05Cadence and automation
case-study / kubernetes-and-eks-upgrades delivered
beforeClusters on old or extended-support minors afterSupported EKS, AKS or OpenShift release
01 · SOURCE OF TRUTH 02 · CHECKS 03 · CLUSTERS 04 · WORKLOADS Terraform and GitOps: cluster versions as code Terraform and GitOps cluster versions ascode Lifecycle calendar: vendor notices with an owner Lifecycle calendar vendor notices with anowner Deprecated API scan: upgrade insights · Pluto · kubent Deprecated API scan upgrade insights ·Pluto · kubent Staging cluster: same add-ons, upgraded first Staging cluster same add-ons, upgradedfirst EKS on standard support EKS on standardsupport OpenShift on an EUS path: OVN-Kubernetes OpenShift on an EUSpath OVN-Kubernetes Node groups: matching minor · surge settings Node groups matching minor · surgesettings Workloads: Pod disruption budgets · backups Workloads Pod disruption budgets· backups
case file

The story

Told without the client's name or anything that could identify them.

what happened

A logistics company's platform team had EKS and OpenShift clusters drifting behind, with an extended support line on the AWS bill and node groups on a different minor from their control planes. Past upgrades had broken an ingress controller or an operator, so each new one kept getting deferred. We inventoried every cluster, add-on and operator, scanned manifests and Helm releases for removed APIs, and gave each workload owner a fix list. A staging cluster with the same add-ons went first, then control planes and node groups moved one minor at a time. Cluster versions now live in Terraform and GitOps, and the next upgrade is on the calendar before the current one closes.

why it was urgent

Kubernetes ships a minor roughly every four months. On EKS, each gets 14 months of standard support and 12 months of paid extended support, after which EKS upgrades the control plane on its own. For 1.31, extended support ends 26 November 2026. On OpenShift, 4.14 EUS Term 2 ends 31 October 2026, and if your clusters are still on OpenShift SDN they cannot pass 4.16.

problem statement
  • openThe AWS bill shows an extended support line for EKS clusters.
  • recurringAn AWS Health notice with an end of standard support date came in. Nobody owns it.
  • blockedEach upgrade breaks an ingress controller, a service mesh or an operator.
  • openThe control plane got upgraded last time, the node groups didn't, and now they're on different minors.
architecture

The estate, before and after

before
before

Before: clusters drifting behind with unowned lifecycle notices

Nobody was assigned the lifecycle notices. Old Helm charts and lagging add-ons blocked upgrades, node groups fell behind their control planes, and on OpenShift the SDN capped how far clusters could go.

Before: clusters drifting behind with unowned lifecycle notices Nobody was assigned the lifecycle notices. Old Helm charts and lagging add-ons blocked upgrades, node groups fell behind their control planes, and on OpenShift the SDN capped how far clusters could go. 01 · LIFECYCLE NOTICES 02 · WORKLOADS 03 · CLUSTERS unowned date removed APIs removed APIs lagging support version skew AWS Health notices end of standard supportdates Helm charts pinned yearsago removed APIs Add-ons and operators ingress · service mesh · CNI EKS on extended support paid support line on thebill Node groups older minor than controlplane OP OpenShift onOpenShift SDN can't pass 4.16
Read the diagram as text
  1. AWS Health notices → EKS on extended support: unowned date
  2. Helm charts pinned years ago → EKS on extended support: removed APIs
  3. Helm charts pinned years ago → OpenShift on OpenShift SDN: removed APIs
  4. Add-ons and operators → EKS on extended support: lagging support
  5. EKS on extended support → Node groups: version skew
after
after

After: declared versions, a staging rehearsal and a fixed cadence

Cluster versions live in Terraform or GitOps, and we check each change for removed APIs before it runs. Every upgrade gets a rehearsal on staging. Then the control plane goes first and node groups after, with disruption budgets protecting workloads.

After: declared versions, a staging rehearsal and a fixed cadence Cluster versions live in Terraform or GitOps, and we check each change for removed APIs before it runs. Every upgrade gets a rehearsal on staging. Then the control plane goes first and node groups after, with disruption budgets protecting workloads. 01 · SOURCE OF TRUTH 02 · CHECKS 03 · CLUSTERS 04 · WORKLOADS manifests schedule fix list rehearsed upgrade rehearsed upgrade declared version control plane first surge roll Terraform andGitOps cluster versions ascode Lifecycle calendar vendor notices with anowner Deprecated API scan upgrade insights · Pluto ·kubent Staging cluster same add-ons, upgradedfirst EKS on standard support OP OpenShift on anEUS path OVN-Kubernetes Node groups matching minor · surgesettings Workloads Pod disruption budgets ·backups
Read the diagram as text
  1. Terraform and GitOps → Deprecated API scan: manifests
  2. Lifecycle calendar → Staging cluster: schedule
  3. Deprecated API scan → Staging cluster: fix list
  4. Staging cluster → EKS on standard support: rehearsed upgrade
  5. Staging cluster → OpenShift on an EUS path: rehearsed upgrade
  6. Terraform and GitOps → EKS on standard support: declared version
  7. EKS on standard support → Node groups: control plane first
  8. Node groups → Workloads: surge roll
results

What the client got

What changed for the client once the work was done. Described, not scored: we don't publish client figures.

  1. result 01

    Control planes and node groups run the same minor

    Each cluster was upgraded control plane first, then add-ons, then node groups. So no cluster is left running with a version skew.

  2. result 02

    Removed APIs are found before an upgrade starts

    We scan manifests, Helm releases and GitOps repos against the target minor ahead of each change. Workload owners get their fix lists before anything moves.

  3. result 03

    Every upgrade is rehearsed on staging first

    Non-production goes first, on a cluster with the same add-ons. Each cluster type has a runbook, with rollback steps.

  4. result 04

    OpenShift has a clear path past 4.16

    We moved the OpenShift SDN clusters to OVN-Kubernetes. EUS-to-EUS upgrades now run with worker pools paused.

  5. result 05

    Versions are declared and scheduled

    We put cluster versions in Terraform or GitOps. Vendor lifecycle notices go to a named owner. Each upgrade sits on a cadence calendar tied to vendor dates.

what can go wrong

Risks we plan for

  1. Removed APIs in old charts

    Charts pinned years ago will break on install once an API is removed. That's why the scan covers every repo, plus the live objects in the cluster.

  2. Add-ons that lag behind

    The provider may support a new minor long before your self-managed CNI, CSI drivers, ingress controllers and operators do. In practice their release notes set the upgrade date.

  3. Forced upgrades at end of support

    Once extended support ends, EKS updates the control plane at a time it doesn't announce and leaves the nodes behind. Plan ahead and you won't end up running a skewed cluster.

  4. Stateful workloads

    Databases and queues on Kubernetes need disruption budgets, backups and a tested restore before node pools roll.

ai in this move

Where AI helps, and where it needs guardrails

EKS upgrade insights flag what blocks the next minor in a cluster, removed APIs for example. We have AI assistants read the release notes and draft fixes for deprecated manifests. Each fix still goes through review and a staging upgrade. An agent that reaches the cluster through an MCP server gets a read-only role by default, and anything that can change the cluster needs approval.

forward deployed engineers →
you keep

What you're left with

We write these for your setup, and they're working documents. Your team should be able to keep things running from them long after we've gone.

  • inventory01

    Cluster, add-on and operator version inventory

    yours to keep
  • code02

    Deprecated API report with an owner per workload

    yours to keep
  • runbook03

    Upgrade runbook per cluster type with rollback steps

    yours to keep
  • tests04

    Rehearsal results from a non-production cluster

    yours to keep
  • plan05

    Version cadence calendar tied to vendor lifecycle dates

    yours to keep
talent and delivery · supported eks, aks or openshift release

Certified engineers, wherever you need them.

Some clients want a project team, some want a couple of engineers on theirs. Either works. Onsite, nearshore or offshore, with handovers across time zones that keep things moving.

Onsite

Engineers at your sites in the US

Nearshore

Overlapping hours with US teams

Offshore

Overnight progress on your backlog

All time zones

Coverage handed over across time zones

24-hour coverage · US Central time
OnsiteUS business hours
Nearshoreoverlapping US hours
Offshoreovernight progress
Combinedhandover, not hand-off
01Can we skip minors on EKS?

No. An EKS control plane moves one minor per upgrade. Nodes are allowed to lag by up to three minors, though we keep them close. Even OpenShift EUS-to-EUS updates take the control plane through the odd minor in between.

02Is EKS extended support worth paying for?

As a short bridge, sometimes. It costs extra per cluster hour and ends after 12 months with an automatic control plane upgrade. We treat it as time to fix blockers, not a place to stay.

03How long does an upgrade take?

Usually the control plane part is quick. Most of the time is spent on add-on compatibility, API fixes and testing, and that scales with your workloads and third-party operators. We size it from the inventory.

04Can you take over cluster operations?

Yes. Either we keep running upgrades, add-on updates and capacity reviews, or your platform team takes over with our runbooks.

sources 4 sources linked last checked 2026-10-20 content fingerprint 517e8ebb
  1. 01AWS: Understand the Kubernetes version lifecycle on EKSdocs.aws.amazon.com ↗
  2. 02AWS: EKS cluster insightsdocs.aws.amazon.com ↗
  3. 03Red Hat: OpenShift Container Platform 4 life cycleaccess.redhat.com ↗
  4. 04Red Hat: OpenShift 4.17 release notes (OpenShift SDN removed)docs.redhat.com ↗
Reviewed by the Cohash team Product names are trademarks of their owners. how we handle facts and data →
next step

Planning this move?

A 30-minute working session with a senior engineer. No slides.

useful to bring
  • The platform and the version you're on
  • Where you need to get to, and by when
  • What's custom: rules, plugins, integrations
  • Any audit finding or deadline driving it