Amazon EKS Kubernetes versions
The Kubernetes project is continually integrating new features, design updates, and bug fixes. The community releases new Kubernetes minor versions, such as 1.21, as generally available approximately every three months. Each minor version is supported for approximately twelve months after it's first released.
Available Amazon EKS Kubernetes versions
The following Kubernetes versions are currently available for new Amazon EKS clusters:
-
1.21.2
-
1.20.7
-
1.19.8
-
1.18.16
-
1.17.17
Unless your application requires a specific version of Kubernetes, we recommend that you choose the latest available Kubernetes version that's supported by Amazon EKS for your clusters. As new Kubernetes versions become available in Amazon EKS, we recommend that you proactively update your clusters to use the latest available version. For instructions on how to update your cluster, see Updating a cluster. For more information about Kubernetes releases, see Amazon EKS Kubernetes release calendar and Amazon EKS version support and FAQ.
Kubernetes 1.21
Kubernetes 1.21 is now available in Amazon EKS. For more information about Kubernetes
1.21,
see the official release announcement
Important
-
Dual-stack networking
support (IPv4 and IPv6 addresses) on pods, services, and nodes has reached beta status. However, Amazon EKS and the Amazon VPC CNI don't currently support dual stack networking. -
The Amazon EKS Optimized Amazon Linux 2 AMI now contains a bootstrap flag to enable the
containerdruntime as a Docker alternative. This flag allows preparation for the removal of Docker as a supported runtimein the next Kubernetes release. For more information, see Enable the containerd runtime bootstrap flag. This can be tracked through the container roadmap on Github . -
Managed node groups support for Cluster Autoscaler priority expander.
Newly created managed node groups on Amazon EKS v1.21 clusters use the following format for the underlying Auto Scaling group name:
eks-<managed-node-group-name>-<uuid>This enables using the priority expander
feature of Cluster Autoscaler to scale node groups based on user defined priorities. A common use case is to prefer scaling spot node groups over on-demand groups. This behavior change solves the containers roadmap issue #1304 .
The following Kubernetes features are now supported in Kubernetes 1.21 Amazon EKS clusters:
-
CronJobs
(previously ScheduledJobs) have now graduated to stable status. With this change, users perform regularly scheduled actions such as backups and report generation. -
Immutable Secrets and ConfigMaps
have now graduated to stable status. A new, immutable field was added to these objects to reject changes. This rejection protects the cluster from updates that can unintentionally break the applications. Because these resources are immutable, kubelet doesn't watch or poll for changes. This reduces kube-apiserverload and improving scalability and performance. -
Graceful Node Shutdown
has now graduated to beta status. With this update, the kubelet is aware of node shutdown and can gracefully terminate that node's pods. Before this update, when a node shut down, its pods didn't follow the expected termination lifecycle. This caused workload problems. Now, the kubelet can detect imminent system shutdown through systemd, and inform running pods so they terminate gracefully. -
Pods with multiple containers can now use the
kubectl.kubernetes.io/default-containerannotation to have a container preselected for kubectl commands. -
PodSecurityPolicy is being phased out. PodSecurityPolicy will still be functional for several more releases according to Kubernetes deprecation guidelines. For more information, see PodSecurityPolicy Deprecation: Past, Present, and Future
and the AWS blog .
For the complete Kubernetes 1.21 changelog, see https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md
Kubernetes 1.20
For more information about Kubernetes 1.20, see the official release announcement
Important
-
1.20 brings new default roles and users. You can find more information in Default EKS Kubernetes roles and users.
The following Kubernetes features are now supported in Kubernetes 1.20 Amazon EKS clusters:
-
API Priority and Fairness
has reached beta status and is enabled by default. This allows kube-apiserverto categorize incoming requests by priority levels. -
RuntimeClass
has reached stable status. The RuntimeClassresource provides a mechanism for supporting multiple runtimes in a cluster and surfaces information about that container runtime to the control plane. -
Process ID Limits
has now graduated to general availability. -
kubectl debug
has reached beta status. kubectl debugprovides support for common debugging workflows directly fromkubectl. -
The Docker container runtime has been phased out. The Kubernetes community has written a blog post
about this in detail with a dedicated FAQ page . Docker-produced images can continue to be used and will work as they always have. You can safely ignore the dockershim deprecation warning message printed in kubelet startup logs. EKS will eventually move to containerd as the runtime for the EKS optimized Amazon Linux 2 AMI. You can follow the containers roadmap issue for more details. -
Pod Hostname as FQDN has graduated to beta status. This feature allows setting a pod’s hostname to its Fully Qualified Domain Name (FQDN), giving the ability to set the hostname field of the kernel to the FQDN of a Pod.
-
The client-go credential plugins can now be passed in the current cluster information via the
KUBERNETES_EXEC_INFOenvironment variable. This enhancement allows Go clients to authenticate using external credential providers, such as a key management system (KMS).
For the complete Kubernetes 1.20 changelog, see https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md
Kubernetes 1.19
For more information about Kubernetes 1.19, see the official release announcement
Important
-
Starting with 1.19, Amazon EKS no longer adds the
kubernetes.io/cluster/tag to subnets passed in when clusters are created. This subnet tag is only required if you want to influence where the Kubernetes service controller or AWS Load Balancer Controller places Elastic Load Balancers. For more information about the requirements of subnets passed to Amazon EKS during cluster creation, see updates to Cluster VPC considerations.<cluster-name>-
Subnet tags aren't modified on existing clusters updated to 1.19.
-
The AWS Load Balancer Controller version
v2.1.1and earlier required thesubnet tag. In version<cluster-name>v2.1.2and later, you can specify the tag to refine subnet discovery, but it's not required. For more information about the AWS Load Balancer Controller, see AWS Load Balancer Controller. For more information about subnet tagging when using a load balancer, see Application load balancing on Amazon EKS and Network load balancing on Amazon EKS.
-
-
You're no longer required to provide a security context for non-root containers that need to access the web identity token file for use with IAM roles for service accounts. For more information, see IAM roles for service accounts andproposal for file permission handling in projected service account volume
on GitHub. -
The pod identity webhook has been updated to address the missing startup probes
GitHub issue. The webhook also now supports an annotation to control token expiration. For more information, see the GitHub pull request . -
CoreDNS version 1.8.0 is the recommended version for Amazon EKS 1.19 clusters. This version is installed by default in new Amazon EKS 1.19 clusters. For more information, see Managing the CoreDNS add-on.
-
Amazon EKS optimized Amazon Linux 2 AMIs include the Linux kernel version 5.4 for Kubernetes version 1.19. For more information, see Amazon EKS optimized Amazon Linux AMI.
-
The
CertificateSigningRequest APIhas been promoted to stablecertificates.k8s.io/v1with the following changes:-
spec.signerNameis now required. You can't create requests forkubernetes.io/legacy-unknownwith thecertificates.k8s.io/v1API. -
You can continue to create CSRs with the
kubernetes.io/legacy-unknownsigner name with thecertificates.k8s.io/v1beta1API. -
You can continue to request that a CSR to is signed for a non-node server cert, webhooks (for example, with the
certificates.k8s.io/v1beta1API). These CSRs aren't auto-approved. -
To approve certificates, a privileged user requires
kubectl1.18.8 or later.
For more information about the certificate v1 API, see Certificate Signing Requests
in the Kubernetes documentation. -
The following Amazon EKS Kubernetes resources are critical for the Kubernetes control plane to work. We recommend that you don't delete or edit them.
| Permission | Kind | Namespace | Reason |
|---|---|---|---|
eks:certificate-controller |
Rolebinding |
kube-system |
Impacts signer and approver functionality in the control plane. |
eks:certificate-controller |
Role |
kube-system |
Impacts signer and approver functionality in the control plane. |
eks:certificate-controller |
ClusterRolebinding |
All | Impacts kubelet's ability to request server certificates which
affects certain cluster functionality like kubectl exec and
kubectl logs.
|
The following Kubernetes features are now supported in Kubernetes 1.19 Amazon EKS clusters:
-
The
ExtendedResourceTolerationadmission controller is enabled. This admission controller automatically adds tolerations for taints to pods requesting extended resources, such as GPUs, so you don't have to manually add the tolerations. For more information, see ExtendedResourceTolerationin the Kubernetes documentation. -
Elastic Load Balancers (CLB and NLB) provisioned by the in-tree Kubernetes service controller support filtering the nodes included as instance targets. This can help prevent reaching target group limits in large clusters. For more information, see the related GitHub issue
and the service.beta.kubernetes.io/aws-load-balancer-target-node-labelsannotation under Other ELB annotationsin the Kubernetes documentation. -
Pod Topology Spread has reached stable status. You can use topology spread constraints to control how pods are spread across your cluster among failure-domains such as regions, zones, nodes, and other user-defined topology domains. This can help to achieve high availability, as well as efficient resource utilization. For more information, see Pod Topology Spread Constraints
in the Kubernetes documentation. -
The Ingress API has reached general availability. For more information, see Ingress
in the Kubernetes documentation. -
EndpointSlices are enabled by default. EndpointSlices are a new API that provides a more scalable and extensible alternative to the Endpoints API for tracking IP addresses, ports, readiness, and topology information for Pods backing a Service. For more information, see Scaling Kubernetes Networking With EndpointSlices
in the Kubernetes blog. -
Secret and ConfigMap volumes can now be marked as immutable. This significantly reduces load on the API server if there are many Secret and ConfigMap volumes in the cluster. For more information, see ConfigMap
and Secret in the Kubernetes documentation.
For the complete Kubernetes 1.19 changelog, see https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md
Kubernetes 1.18
For more information about Kubernetes 1.18, see the official release announcement
The following Kubernetes features are now supported in Kubernetes 1.18 Amazon EKS clusters:
-
Topology Manager has reached beta status. This feature allows the CPU and Device Manager to coordinate resource allocation decisions, optimizing for low latency with machine learning and analytics workloads. For more information, see Control Topology Management Policies on a node
in the Kubernetes documentation. -
Server-side Apply is updated with a new beta version. This feature tracks and manages changes to fields of all new Kubernetes objects, allowing you to know what changed your resources and when. For more information, see What is Server-side Apply?
in the Kubernetes documentation. -
A new
pathTypefield and a newIngressClassresource has been added to the Ingress specification. These features make it simpler to customize Ingress configuration, and are supported by the AWS Load Balancer Controller (formerly called the ALB Ingress Controller). For more information, see Improvements to the Ingress API in Kubernetes 1.18 in the Kubernetes documentation. -
Configurable horizontal pod autoscaling behavior. For more information, see Support for configurable scaling behavior
in the Kubernetes documentation. -
In 1.18 clusters, you no longer need to include the
AWS_DEFAULT_REGION=<region-code>environment variable to pods when using IAM roles for service accounts in China Regions, whether you use the mutating web hook or configure the environment variables manually. You still need to include the variable for all pods in earlier versions. -
New clusters contain updated default values in
externalTrafficPolicy.HealthyThresholdCountandUnhealthyThresholdCountare 2 each, andHealthCheckIntervalSecondsis reduced to 10 seconds. Clusters created in older versions and upgraded retain the old values.
For the complete Kubernetes 1.18 changelog, see https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md
Kubernetes 1.17
For more information about Kubernetes 1.17, see the official release announcement
-
EKS has not enabled the
CSIMigrationAWSfeature flag. This will be enabled in a future release, along with detailed migration instructions. For more information about CSI migration, see the Kubernetes blog. -
Updating a cluster from 1.16 to 1.17 fails if any of your AWS Fargate pods have a
kubeletminor version earlier than 1.16. Before updating your cluster from 1.16 to 1.17, you need to recycle your Fargate pods so that theirkubeletis 1.16 before attempting to update the cluster to 1.17. To recycle a Kubernetes deployment on a 1.15 or later cluster, use the following command.kubectl rollout restart deployment<deployment-name>
The following Kubernetes features are now supported in Kubernetes 1.17 Amazon EKS clusters:
-
Cloud Provider Labels
have reached general availability. If you're using the beta labels in your pod specs for features such as node affinity, or in any custom controllers, then we recommend that you start migrating them to the new GA labels. For information about the new labels, see the following Kubernetes documentation: -
The ResourceQuotaScopeSelectors
feature has graduated to generally available. You can use this feature to limit the number of resources a quota supports to only those that pertain to the scope. -
The TaintNodesByCondition
feature has graduated to generally available. This feature allows you to taint nodes that have conditions such as high disk or memory pressure. -
The CSI Topology
feature has graduated to generally available, and is fully supported by the EBS CSI driver . You can use topology to restrict the Availability Zone where a volume is provisioned. -
Finalizer protection
for services of type LoadBalancerhas graduated to generally available. This feature ensures that a service resource isn't fully deleted until the correlating load balancer is also deleted. -
Custom resources now support default values.
You specify values in an OpenAPI v3 validation schema . -
The Windows containers RunAsUsername
feature is now in beta. You can use it to run Windows applications in a container as a different user name than the default.
For the complete Kubernetes 1.17 changelog, see https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md
Kubernetes 1.16
For more information about Kubernetes 1.16, see the official release announcement
-
Kubernetes 1.16 removes a number of discontinued APIs. Changes to your applications might be required before updating your cluster to 1.16. Follow the 1.16 update prerequisites before updating.
-
Starting with 1.16, the Amazon EKS certificate authority will honor certificate signing requests with SAN X.509 extensions. This resolves the EKS CA should honor SAN x509 extension
feature request from GitHub.
The following Kubernetes features are now supported in Kubernetes 1.16 Amazon EKS clusters:
-
Volume expansion in the CSI specification has moved to beta. This allows for any CSI spec volume plugin to be resizeable. For more information, see Volume Expansion
in the Kubernetes CSI documentation. The latest version of the EBS CSI driver supports volume expansion when running on an Amazon EKS 1.16 cluster. -
Windows GMSA support has graduated from alpha to beta, and is now supported by Amazon EKS. For more information, see Configure GMSA for Windows Pods and containers
in the Kubernetes documentation. -
A new annotation:
service.beta.kubernetes.io/aws-load-balancer-eip-allocationsis available on service typeLoadBalancerto assign an elastic IP address to Network Load Balancers. For more information, see the Support EIP Allocations with AWS NLBGitHub issue. -
Finalizer protection for service load balancers is now in beta and enabled by default. Service load balancer finalizer protection ensures that any load balancer resources that are allocated for a Kubernetes Service object, such as network load balancers, are be destroyed or released when the service is deleted. For more information, see Garbage Collecting Load Balancers
in the Kubernetes documentation. -
The Kubernetes custom resource definitions and admission webhooks extensibility mechanisms have both reached general availability. For more information, see Custom Resources
and Dynamic Admission Control in the Kubernetes documentation. -
The server-side apply feature has reached beta status and is enabled by default. For more information, see Server Side Apply
in the Kubernetes documentation. -
The
CustomResourceDefaultingfeature is promoted to beta and enabled by default. Defaults might be specified in structural schemas through theapiextensions.k8s.io/v1API. For more information, see Specifying a structural schemain the Kubernetes documentation.
For the complete Kubernetes 1.16 changelog, see https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.16.md
Amazon EKS Kubernetes release calendar
Dates with only a month and a year are approximate and are updated with an exact date when it's known.
| Kubernetes version | Upstream release | Amazon EKS release | Amazon EKS end of support |
|---|---|---|---|
| 1.16 | September 8, 2019 | April 30, 2020 | September 27, 2021 |
| 1.17 | December 9, 2019 | July 10, 2020 | November 2, 2021 |
| 1.18 | March 23, 2020 | October 13, 2020 | February 18, 2022 |
| 1.19 | August 26, 2020 | February 16, 2021 | April, 2022 |
| 1.20 | December 8, 2020 | May 18, 2021 | July, 2022 |
| 1.21 | April 8, 2021 | July 19, 2021 | September, 2022 |
Amazon EKS version support and FAQ
In line with the Kubernetes community support for Kubernetes versions, Amazon EKS is committed to supporting at least four production-ready versions of Kubernetes at any given time. We will announce the end of support date of a given Kubernetes minor version at least 60 days before the end of support date. Because of the Amazon EKS qualification and release process for new Kubernetes versions, the end of support date of a Kubernetes version on Amazon EKS will be on or after the date that the Kubernetes project stops supporting the version upstream.
Frequently asked questions
Q: How long is a Kubernetes version supported by Amazon EKS?
A: A Kubernetes version is fully supported for 14 months after first being available on Amazon EKS. This is true even if upstream Kubernetes is no longer supporting a version available on Amazon EKS. We backport security patches that are applicable to the Kubernetes versions supported on Amazon EKS.
Q: Am I notified when support is ending for a Kubernetes version on Amazon EKS?
A: Yes, if any clusters in your account are running the version nearing the end of support, Amazon EKS sends out a notice through the AWS Personal Health Dashboard approximately 12 months after the Kubernetes version was released on Amazon EKS. The notice includes the end of support date. This is at least 60 days from the date of the notice.
Q: What happens on the end of support date?
A: On the end of support date, you can no longer create new Amazon EKS clusters with the unsupported version. Existing control planes are automatically updated by Amazon EKS to the oldest supported version through a gradual deployment process after the end of support date. After the automatic control plane update, you must manually update cluster add-ons and Amazon EC2 nodes. For more information, see To update the Kubernetes version for your Amazon EKS cluster .
Q: When exactly will my control plane be automatically updated after the end of support date?
A: Amazon EKS can't provide specific timeframes. Automatic updates can happen at any time after the end of support date. We recommend that you take proactive action and update your control plane without relying on the Amazon EKS automatic update process. For more information, see Updating a cluster.
Q: Can I leave my control plane on a Kubernetes version indefinitely?
A: No, cloud security at AWS is the highest priority. Past a certain point (usually 1 year), the Kubernetes community stops releasing CVE patches and discourages CVE submission for deprecated versions. This means that vulnerabilities specific to an older version of Kubernetes may not even be reported, leaving clusters exposed with no notice and no remediation options in the case of a vulnerability. Amazon EKS considers this to be an unacceptable security posture, and as a result does not allow control planes to stay on a version that has reached end of support.
Q: Which Kubernetes features are supported by Amazon EKS?
A: Amazon EKS supports all general availability features of the Kubernetes API, as well as beta features which are enabled by default. Alpha features aren't supported.
Q: Are Amazon EKS managed node groups automatically updated along with the cluster control plane version?
A: No, a managed node group creates Amazon EC2 instances in your account. These instances aren't automatically upgraded when you or Amazon EKS update your control plane. If Amazon EKS automatically updates your control plane, the Kubernetes version on your managed node group might be more than one version earlier than your control plane. If a managed node group contains instances that are running a version of Kubernetes that's more than one version earlier than the control plane, the node group has a health issue in the Node Groups section of the Compute tab on the Configuration tab of your cluster in the console. If a node group has an available version update, Update now appears next to the node group in the console. For more information, see Updating a managed node group. We recommend maintaining the same Kubernetes version on your control plane and nodes.
Q: Are self-managed node groups automatically updated along with the cluster control plane version?
A: No, a self-managed node group includes Amazon EC2 instances in your account.
These instances aren't automatically upgraded when you or Amazon EKS update the
control plane version. A self-managed node group doesn't have any indication in
the console that it needs updating. You can view the kubelet
version installed on a node by selecting the node in the
Nodes list on the Overview tab of
your cluster to determine which nodes need updating. You must manually update
the nodes. For more information, see Self-managed node updates.
The Kubernetes project tests compatibility between the control plane and nodes for
up to two minor versions. For example, 1.19 nodes continue to operate when
orchestrated by a 1.21 control plane. However, running a cluster with nodes that
are persistently two minor versions behind the control plane is not recommended. For
more information, see Kubernetes version
and version skew support policy
Q: Are pods running on Fargate automatically upgraded with an automatic cluster control plane version upgrade?
Yes, Fargate pods run on infrastructure in AWS owned accounts on the Amazon EKS side
of the shared responsibility model. Amazon EKS uses
the Kubernetes eviction API to attempt to gracefully drain pods running on Fargate.
For more information, see The Eviction APIdelete pod command. We
strongly recommend running Fargate pods as part of a replication controller like a
Kubernetes deployment so a pod is automatically rescheduled after deletion. For
more information, see Deploymentskubelet version that is the same
version as your updated cluster control plane version.
If you update the control plane, you must update the Fargate nodes yourself. To
update Fargate nodes, delete the Fargate pod represented by the node and redeploy
the
pod. The new pod is deployed with a kubelet version that is the
same version as your cluster.

