EKS Version Upgrade: A Safe, Zero-Downtime Guide
An EKS fleet rarely fails because upgrading one cluster is impossible. It fails because every cluster has its own version, add-on set, node group history, and maintenance window. The result is often a release process measured in months, with teams postponing upgrades until version skew becomes an operational risk.
Get a Plural demo to coordinate a safe, zero-downtime EKS version upgrade across your entire fleet.
A safe eks version upgrade requires an inventory-driven rollout: align control planes and data planes, verify version-skew limits and add-on compatibility. Test workloads on a canary cluster, then upgrade node groups in controlled waves. Automation can reduce this work from a three-month cycle to one day, according to Plural.
The key is to treat the fleet as one upgrade program while preserving cluster-level safeguards. Start by understanding why version drift compounds across clusters, then build the support-window, dependency, and rollback checks that make zero-downtime execution repeatable.
Why an EKS version upgrade gets harder with every cluster
One EKS cluster gives you a bounded upgrade problem. You inventory its add-ons, check its workloads, move the control plane, then bring the nodes into alignment. A fleet of ten or more clusters turns that procedure into a coordination problem. Each cluster accumulates its own release history, node groups, maintenance windows, and exceptions. The work is no longer only upgrading Kubernetes. It is discovering which assumptions are no longer true across the fleet.
Version skew is where that divergence becomes operationally visible. Kubernetes defines a version as both the control plane and the data plane, and recommends that they run the same minor version. In EKS, the data plane maps to the kubelet versions on individual nodes. If the control plane advances while node groups remain behind, the cluster may continue operating within supported skew, but it is not in the desired steady state. Across a fleet, those temporary states become easy to lose track of.
The permitted range is wider than many teams expect. In most cases, a kubelet may be up to three minor versions older than the kube-apiserver. That is a compatibility boundary, not a planning strategy. It can provide room to sequence node group updates, but it should not become a reason to defer them indefinitely. A cluster with an apiserver on 1.30 and nodes on 1.27 may be technically within policy, though it carries older APIs and assumptions into the next change.
Highly available control planes add another constraint during the transition. The newest and oldest kube-apiserver instances must remain within one minor version. A control plane replacement therefore has an intermediate state that must be managed, not merely scheduled. The same upgrade that looks like a single API operation in a runbook is a sequence of component changes underneath.
Start with evidence rather than a spreadsheet maintained by memory. For every cluster, record the control-plane version, node-group versions, add-ons, and workload owners. Then inspect the actual node state with:
kubectl get nodesThat output exposes mixed kubelet versions that a fleet-level dashboard or stale inventory may hide. Comparing it with the control-plane version identifies which clusters are already carrying skew and which ones can safely enter the next upgrade wave. The goal is not to make every cluster change at once. It is to make every difference explicit, so sequencing, testing, and ownership are deliberate instead of discovered during a weekend cutover.Fleet-level upgrade coordination documentation explains how Plural maps those differences into a single control-plane view.
See how Plural helps platform teams coordinate EKS upgrades across an entire fleet.
What the EKS version lifecycle and support windows mean for your upgrade
An EKS upgrade calendar should follow the platform's support lifecycle, not the date a team happens to have a maintenance window. New Kubernetes minor versions arrive roughly every four months, while each minor version receives 14 months of standard support in Amazon EKS. That creates a predictable planning rhythm: a fleet that waits too long can accumulate several versions of operational and compatibility work before the next upgrade is unavoidable.
Standard support is the first planning deadline
During standard support, a minor version remains within the normal EKS support model. When that period ends, EKS offers another 12 months of extended support at an additional cost per cluster hour. In practical terms, each minor version can have 26 months of EKS coverage in total. But the final 12 months are not a free substitute for a current upgrade plan. The EKS support model makes the tradeoff explicit: postponement buys time, but it also creates a recurring cost across every affected cluster.
That cost is only one part of the risk. Extended support can turn an upgrade backlog into a budget line that grows with fleet size. A platform team operating dozens of clusters should therefore treat the standard-support end date as an escalation point. Start validation and dependency testing before that date, then reserve extended support for clusters with a documented exception, not as the default operating mode.
Community support narrows the safe version range
EKS support also needs to be viewed alongside the Kubernetes community release policy. Kubernetes follows an approximate N-2 policy, providing security fixes and bug patches for the three most recent minor versions. Kubernetes 1.19 and newer receive approximately one year of patch support. The Kubernetes version-skew policy is not an EKS contract, but it is a useful risk boundary for platform owners deciding how far behind the current release their fleet can safely run.
These windows overlap, but they do not eliminate the need for sequencing. A cluster can still be covered by EKS while its Kubernetes minor version falls outside the community's most recent supported set. That increases the chance that security fixes, add-on releases, and vendor troubleshooting guidance will assume a newer baseline. It also compresses your options when an upgrade exposes an application or infrastructure issue.
Turn lifecycle dates into an upgrade calendar
Maintain a per-cluster inventory with the current minor version, EKS standard-support end date, extended-support status, add-on dependencies, and planned target version. Use those dates to create rolling upgrade waves rather than a single annual event. A sensible policy is to begin testing several months before standard support ends, upgrade representative non-production clusters first, and leave enough time for production rollback or remediation.
For a large fleet, this is where centralized visibility and automation matter. Plural manages complex multi-cluster Kubernetes environments at scale, helping teams reduce upgrade cycles from three months to one day. Its upgrade workflows can also provide automated compatibility checking before changes move across the fleet. The result is not a reason to ignore support windows. It is a way to make those windows operationally manageable instead of letting them dictate an emergency upgrade.
How to plan an EKS version upgrade across a fleet
A fleet upgrade is a scheduling problem as much as a Kubernetes problem. Treat every cluster as an entry in a dependency-aware plan, not as an isolated console action. The following sequence gives you a current inventory, a safe compatibility envelope, and enough time to test before an EKS support deadline turns into an emergency.
- Build a complete cluster and node inventory. Record each cluster's AWS account, region, environment, owner, business dependency, current control-plane minor version, node-group versions, add-on versions, and planned target. Run
kubectl get nodesagainst every cluster to expose mixed node versions. AWS notes that nodes in the same cluster can run different versions, and the data-plane version is tied to the kubelet versions on those nodes. A spreadsheet is workable for a small fleet, but a central inventory is more reliable once cluster count or account boundaries make manual collection error-prone. - Calculate the version-skew budget before choosing a target. Keep the control plane and data plane on the same minor version as the end state. During the transition, Kubernetes generally permits a kubelet to be up to three minor versions older than the kube-apiserver. But that is a compatibility limit, not a reason to operate indefinitely at maximum skew. Check the actual kubelet version on each node, then identify clusters that require an intermediate node-group rollout rather than a direct jump. For highly available control planes, the newest and oldest kube-apiserver instances must remain within one minor version. See the EKS version upgrade strategy for a more detailed planning model.
- Map dependencies and assign an upgrade order. Start with a representative nonproduction cluster, then move through test, staging, and production tiers. Within each tier, upgrade clusters that have fewer downstream dependencies first. Mark shared services, ingress, identity, storage, observability, and deployment pipelines that could make one cluster's upgrade affect another. Use the first cluster as a compatibility signal, not as permission to upgrade the entire fleet blindly. A failed test should pause the next wave while you update the runbook, add-on versions, or workload configuration.
- Reserve time for workload validation between waves. AWS recommends testing application behavior against a new Kubernetes version before updating production. Define the checks before the first upgrade: scheduling, service discovery, ingress, persistent volumes, autoscaling, policy enforcement, deployments, and monitoring. Give owners a clear approval or rollback deadline, and retain evidence from the canary cluster so each subsequent wave is based on observed behavior rather than assumption.
- Work backward from EKS support-window deadlines. Kubernetes minor versions are released about every four months, while EKS standard support lasts 14 months after a minor release. EKS can provide another 12 months of extended support at additional cost, but using that window as the default plan compounds version drift across a large fleet. Track the next target, the last acceptable production wave, and contingency time for failed tests or blocked dependencies. The broader Kubernetes release cycle helps explain why a quarterly review is more durable than a once-a-year upgrade project.
Pre-upgrade checks to run before you touch a production cluster
A controlled EKS version upgrade starts before you call the update API. The fastest way to create an avoidable outage is to treat the production cluster as the test environment. Run this checklist against each cluster, record the result, and keep the evidence with the change request. These checks remove the infrastructure and application surprises that turn a planned cutover into an emergency.
- Confirm subnet capacity before scheduling the change. Amazon EKS may need up to five available IP addresses from the subnets specified when the cluster was created. Check every relevant subnet, not just the one currently hosting most control-plane traffic. Account for other workloads, autoscaling activity, and any network reservations that could consume capacity during the update. If the available address count is marginal, expand capacity or choose a safer maintenance window before proceeding. AWS documents the subnet IP requirement as an explicit upgrade prerequisite.
- Validate security group rules across all cluster subnets. The control plane must be able to establish the required cluster communication through the security groups associated with every specified subnet. Review inbound and outbound rules, references to cluster security groups, network ACLs, and any organization-level policy that could filter traffic. Do not assume a rule is correct because a previous upgrade succeeded. Subnet assignments and security controls often change independently of the cluster lifecycle. The EKS update guidance specifically requires rules that permit required cluster communication for those subnets.
- Inventory add-ons and test the target version outside production. Check the compatibility of the VPC CNI, CoreDNS, kube-proxy, ingress controllers, admission policies, storage drivers, and observability agents with the target Kubernetes minor version. Then deploy representative workloads to a staging or canary cluster running that version. Test startup, service discovery, ingress, persistent storage, autoscaling, disruption budgets, and policy enforcement. AWS recommends testing application behavior against a new Kubernetes version before updating production because new releases can introduce significant changes. This is the check most likely to expose a failure that infrastructure validation cannot see.
- Review the AWS readiness path and define your stop criteria. During the update, Amazon EKS runs standard infrastructure and readiness health checks, including verification of network traffic on new API server nodes. Decide in advance which signals require a halt: failed readiness, broken API access, unhealthy add-ons, application errors, or unacceptable latency. Capture the current cluster health and workload baseline so the team can compare it during the change. A prewritten stop condition prevents pressure to continue when the evidence says the cutover is unsafe.
- Approve the change only after the evidence is complete. Attach subnet capacity, security group validation, compatibility results, application test output, and rollback ownership to the change record. The goal is not paperwork. It is to ensure that the person initiating the EKS version upgrade knows what was tested, what can fail, and who makes the next decision. That discipline is what separates a repeatable upgrade from a one-time success.
Control plane vs node group: how EKS version upgrade execution works
An EKS version upgrade is two related operations, not one atomic switch. Amazon EKS handles the control plane, while your node groups carry the data plane and must be upgraded through their own replacement cycle. Keeping those responsibilities separate makes the execution path easier to reason about, especially when several clusters are moving through the process at once.
For the control plane, AWS launches new API server nodes running the target Kubernetes version and replaces the existing API server infrastructure. The upgrade is managed through the EKS API, and once started, it cannot be paused or stopped. That makes the readiness checks and preflight validation described in the earlier planning steps operationally important, rather than optional housekeeping.
| Execution concern | Control-plane step | Node-group step |
|---|---|---|
| Who manages it? | Amazon EKS manages the API server infrastructure and the control-plane replacement. | You manage the node-group rollout, or use an automation system to create and cycle replacement nodes. |
| What changes? | New API server nodes run the target Kubernetes minor version. | Each replacement node runs a new kubelet version, which defines the data-plane version. |
| Downtime exposure | Running applications are not affected by the infrastructure readiness checks. | Workloads are evicted and rescheduled as nodes cycle, so capacity, disruption budgets, and scheduling constraints determine exposure. |
| Can you pause it? | No. The control-plane upgrade cannot be paused or stopped after it begins. | The rollout can generally be controlled between node replacements, subject to the chosen update strategy and capacity. |
| What happens if validation fails? | EKS reverts the infrastructure deployment and leaves the cluster on its prior version. | The affected node-group rollout needs remediation, such as correcting capacity, compatibility, or scheduling conditions. |
| Rollback window | EKS allows rollback to the previous cluster version within seven days if issues arise. | Rollback means restoring or cycling nodes to a compatible prior kubelet version and image. |
The distinction matters because the data-plane version is associated with the kubelet on each individual node. A cluster can therefore contain node groups at different stages during a controlled rollout. But the target state should bring control plane and data plane onto the same minor version. Kubernetes permits a kubelet to be up to three minor versions older than the kube-apiserver in most cases. But that is a compatibility boundary, not a reason to postpone node upgrades indefinitely.
Use the Plural documentation to map these AWS-managed and fleet-managed steps into your operating process. A clear ownership boundary lets platform teams monitor the irreversible control-plane action while sequencing node-group changes with workload capacity and rollback readiness in view.
How to test add-ons and workloads before a zero-downtime EKS upgrade
A production upgrade should be the final execution of a test you have already run. It should not be the first time your workloads meet the target minor version. Create a canary or test cluster that matches production closely, then upgrade it to the target EKS version. Automated Kubernetes upgrade cycles shorten this feedback loop by running compatibility checks before any production change. Keep the same networking model, admission policies, storage classes, node operating systems, and observability integrations wherever practical. The closer the test environment is to production, the more useful its failures become.
Start by deploying representative workloads, not just a smoke-test deployment. Include the services with strict availability requirements, stateful components, scheduled jobs, ingress paths, autoscaling behavior, and the integrations that sit outside the cluster. Run the same application and integration tests your delivery pipeline uses. Exercise deployments, rollbacks, pod disruption, node replacement, DNS, service-to-service traffic, persistent volume attachment, and alerting. AWS recommends testing application behavior against a new Kubernetes version before updating production because new versions can introduce significant changes. The EKS upgrade guidance provides the relevant operational context.
Validate the add-on matrix, not only the application
Build an explicit compatibility matrix for the target minor version. Record the intended versions of the VPC CNI, CoreDNS, kube-proxy, EBS CSI driver, ingress controller, service mesh, policy engine, autoscaler, and monitoring agents. For each add-on, verify both the published version support and the Kubernetes APIs it uses. Pay particular attention to deprecated or removed APIs, webhook behavior, CRD conversion, RBAC permissions, and dependencies between add-ons. A workload can pass its own tests while an outdated networking, storage, or admission component fails during the real upgrade.
Use the canary to validate the complete sequence, including add-on installation order and configuration drift. Capture the tested versions, manifests, health checks, and acceptance criteria as a repeatable template. That template gives the next cluster a known starting point and turns fleet-wide upgrades into controlled variation rather than a series of bespoke investigations. Plural extends this approach with intelligent, automated compatibility checking, helping platform teams identify upgrade conflicts before they become production incidents. Its multi-cluster operating model is designed to apply the same upgrade discipline across a complex fleet.
Use AWS safeguards, then define your own rollback decision
Testing reduces uncertainty, but it does not eliminate the need for a recovery plan. Define measurable rollback triggers before production begins: failed readiness checks, error-rate increases, broken integrations, unavailable storage, or unacceptable latency. During the EKS infrastructure transition, AWS runs standard infrastructure and readiness health checks on new API server nodes. Running applications are not affected by those checks, and AWS states that the cluster is not left in a non-deterministic or unrecoverable state. If readiness checks fail, EKS reverts the infrastructure deployment and keeps the cluster on its prior Kubernetes version.
For issues discovered after the upgrade, Amazon EKS supports rollback to the previous Kubernetes version within seven days. Treat that window as a safety net, not as a substitute for canary testing. Preserve the tested add-on matrix and workload results with the change record, then use them to compare production behavior against the known-good template. When the process is repeatable, automating EKS version upgrades can reduce manual coordination without reducing the verification standard.
How automation turns an EKS version upgrade from months to days
The operational cost of an EKS version upgrade is rarely the API call that changes the control plane. It is the coordination around that call: inventorying clusters, checking dependencies, validating add-ons, scheduling maintenance windows, and repeating the same sequence across every environment. When those tasks are handled as a series of one-off projects, a fleet can spend months moving between Kubernetes minor versions.
Plural changes the unit of work from an individual cluster to the fleet. Its unified control plane manages complex, multi-cluster Kubernetes environments at scale, with day-2 operations represented in one consistent workflow. Instead of waiting for one cluster to finish before starting the next. Platform teams can coordinate many EKS version upgrade operations in parallel, while preserving the sequencing and approvals required by each environment. Plural states that its automation reduces upgrade cycle time from three months to one day. Read more about automating EKS version upgrades.
Automated checks replace upgrade-by-spreadsheet
Parallel execution is only useful when each target is ready. Plural's AI-native architecture supports intelligent, automated compatibility checking before an upgrade proceeds. That check can surface incompatibilities across the cluster configuration and its surrounding workloads, giving engineers a reasoned starting point instead of another manually maintained spreadsheet. Teams can then apply the same policy across development, staging, and production, while handling exceptions explicitly rather than discovering them during a weekend cutover.
This approach also makes the result easier to operate. A platform team can define the intended upgrade state, review the proposed changes, and let agents reconcile each cluster toward that state. The process is repeatable and observable, which matters when a fleet includes different owners, regions, compliance boundaries, and application dependencies. The unified workflow does not remove engineering judgment. It puts that judgment where it has the most leverage: setting compatibility rules, approving rollout groups, and responding to meaningful exceptions.
Why the architecture fits zero-trust and regulated fleets
Security requirements often make centralized automation difficult. Plural uses an agent-based pull architecture, so upgrades can be performed without central credential storage and can adhere to zero-trust requirements. That distinction is important for regulated organizations that cannot place broad cluster credentials in a shared management service. It also supports environments with strict network controls, including air-gapped deployments where the control plane must remain self-hosted and data sovereignty is non-negotiable.
For a team managing ten or more EKS clusters, the payoff is not simply a faster button click. It is a shorter, more predictable change window, fewer serial handoffs, and a clearer audit trail for every cluster that moved. Plural provides that operating model as a self-hosted Kubernetes fleet management platform, with pricing options for teams evaluating the right scale of deployment.
Ready to take an EKS version upgrade from months to days across your fleet?
Frequently Asked Questions
How do I perform an EKS version upgrade safely?
Inventory each cluster, confirm the target version, test workloads and add-ons in a representative environment. Then upgrade the control plane before bringing node groups to the target minor version. Check node versions with kubectl get nodes, verify subnet capacity and security-group rules, and monitor application health throughout the rollout. Keep a tested rollback plan for issues that appear after the change.
Does an EKS version upgrade cause downtime?
The control-plane replacement is designed to keep running applications available. Amazon EKS performs infrastructure and readiness checks on new API server nodes, and AWS states that running applications are not affected by these checks. If readiness checks fail, EKS reverts the infrastructure deployment and leaves the cluster on its prior version. Source: AWS EKS documentation.
How often should I upgrade my EKS cluster version?
Plan upgrades against both your application compatibility window and the support lifecycle. EKS minor versions receive 14 months of standard support, followed by 12 months of extended support, according to the referenced EKS lifecycle guidance. Waiting until the end of support compresses testing and rollout time across the fleet, so establish a recurring upgrade cadence instead of treating upgrades as emergency projects.
What should I check before upgrading an EKS cluster?
Confirm that the subnets used by the cluster have up to five available IP addresses for the update, and that security groups permit required cluster communication. Test application behavior against the target Kubernetes version, validate add-on compatibility, and check for version skew between the control plane and nodes. Sources: AWS EKS update requirements and AWS EKS upgrade best practices.
Ready to make EKS upgrades predictable across your fleet?
A consistent upgrade process can help your team replace reactive maintenance with planned, repeatable fleet operations. See how Plural brings compatibility checks and coordinated upgrade workflows into one control plane, so you can evaluate a safer path for your clusters.
Book a Plural demo to see automated, zero-downtime EKS version upgrades across your fleet.