Amazon EKS Kubernetes 版本 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon EKS Kubernetes 版本

该 Kubernetes 项目持续整合新功能,提供了新功能、设计更新和错误修复。社区将发布新的 Kubernetes 次要版本,如 1.21,一般大约每三个月提供一次。每个次要版本在首次发布后约 12 个月内受支持。

可用的 Amazon EKS Kubernetes 版本

以下 Kubernetes 版本目前可用于新的 Amazon EKS 集群:

  • 1.21.5

  • 1.20.7

  • 1.19.15

  • 1.18.16

除非您的应用程序需要一个特定版本的 Kubernetes,否则我们建议您为您的集群选择 Amazon EKS 支持的最新可用 Kubernetes 版本。随着新 Kubernetes 版本在 Amazon EKS 中提供,我们建议您主动将集群更新为使用最新的可用版本。有关如何更新集群的说明,请参阅 更新集群。有关 Kubernetes 版本的更多信息,请参阅 Amazon EKS Kubernetes 发布日历Amazon EKS 版本支持和常见问题

注意

从 Kubernetes 1.23 版起,正式发布的 Amazon EKS AMI 将 containerd 作为唯一运行时。Kurbernetes 1.17 至 1.21 版使用 Docker 作为原定设置运行时,但是有一个 bootstrap 标志选项,用于使用 containerd 在任何支持的集群上测试工作负载。有关更多信息,请参阅 Dockershim 弃用

Kubernetes 1.21

Kubernetes 1.21 现已在 Amazon EKS 中可用。有关 Kubernetes 1.21 的更多信息,请参阅官方发布公告

重要提示

  • Pod、服务和节点上双堆栈联网支持(IPv4 和 IPv6 地址)已达到测试状态。但是,Amazon EKS 和 Amazon VPC CNI 目前不支持双堆栈联网。

  • Amazon EKS 优化版 Amazon Linux 2 AMI 现在包含一个引导启动标志,以启用 containerd 运行时间作为 Docker 替代方案。此标志允许为在下一个 Kubernetes 版本中移除作为受支持的运行时间的 Docker 做准备。有关更多信息,请参阅 启用 containerd 运行时间引导标记。这可以通过 Github 上的容器路线图进行跟踪。

  • 托管节点组支持 Cluster Autoscaler 优先级扩展器。

    Amazon EKS v1.21 集群上新创建的托管节点组对基础 Auto Scaling 组名称使用以下格式:

    eks-<managed-node-group-name>-<uuid>

    这样就可以根据用户定义的优先级使用 Cluster Autoscaler 的优先级扩展器功能。一个常见的使用案例是,将 Spot 节点组而不是按需节点组作为扩缩首选。此行为更改解决了 #1304 容器路线图问题

在 Kubernetes 1.21 Amazon EKS 集群中,现支持以下 Kubernetes 功能:

  • CronJobs(前称为 ScheduledJobs)现已升级到稳定状态。此项更改后,用户定期执行计划的操作,例如备份和报告生成。

  • 不可改变的密钥和 ConfigMaps 现已升级到稳定状态。已向这些对象添加了一个不可改变的新字段以拒绝更改。此拒绝可保护集群免受会意外中断应用程序的更新。由于这些资源是不可改变的,因此 kubelet 不会关注或者轮询更改。这将减少 kube-apiserver 负载并提高可扩展性和性能。

  • 正常节点关机功能现已升级到测试版状态。此更新允许 kubelet 知道节点关闭,并能够正常终止该节点的 Pod。在此更新之前,当节点关闭时,它的容器组没有遵循预期的终止生命周期。这导致了工作负载问题。现在,kubelet 可以通过 systemd 检测即将发生的系统关闭,并通知正在运行的 Pod,以便它们正常终止。

  • 具有多个容器的 Pod 现在可以使用 kubectl.kubernetes.io/default-container 注释为 kubectl 命令预先选择容器。

  • PodSecurityPolicy 正在逐步停用。根据 Kubernetes 弃用指南,PodSecurityPolicy 将可用于多个 Kubernetes 版本。要了解详情,请参阅 PodSecurityPolicy 弃用:过去、现在和将来Amazon 博客

有关完整的 Kubernetes 1.21 更新日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md

Kubernetes 1.20

有关 Kubernetes 1.20 的更多信息,请参阅官方发布公告

重要提示

在 Kubernetes 1.20 Amazon EKS 集群中,现支持以下 Kubernetes 功能:

  • API 优先级和公平性功能已达到测试状态,并且在预设情况下是处于已启用状态。此功能允许 kube-apiserver 按优先级对传入请求进行分类。

  • RuntimeClass 功能已达到稳定状态。RuntimeClass 资源提供了一种用于支持集群中多个运行时间的机制,并将有关该容器运行时的信息显示到控制层面。

  • 进程 ID 限制功能现已升级到正式发布版本。

  • kubectl debug 已达到测试版状态。kubectl debug 提供了对直接来自于 kubectl 的常见调试工作流的支持。

  • Docker 容器运行时间已逐步停止。Kubernetes 社群已经就这一点撰写了一篇详细的博客文章并提供了专门的常见问题页面。Docker 生成的镜像可以继续使用,并且会一如既往地发挥功能。您可以安全地忽略 kubelet 启动日志中打印的 Dockershim 弃用警告消息。EKS 最终将迁移到 containerd,后者将作为 EKS 优化版 Amazon Linux 2 AMI 的运行时间。您可以参阅容器路线图问题,了解更多详细信息。

  • Pod Hostname as FQDN 功能已升级到测试状态。此功能允许将 Pod 的主机名设置为其完全限定域名 (FQDN),从而能够将内核的主机名字段设置为 Pod 的 FQDN。

  • client-go 凭证插件现在可以通过 KUBERNETES_EXEC_INFO 环境变量在当前集群信息中传递。此增强功能允许 Go 客户端使用外部凭证提供商(如 Key Management Systems (KMS))进行身份验证。

有关完整的 Kubernetes 1.20 更新日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md

Kubernetes 1.19

有关 Kubernetes 1.19 的更多信息,请参阅官方发布公告

重要提示

  • 从 1.19 版本开始,Amazon EKS 不再向在集群创建时传入的子网添加 kubernetes.io/cluster/<cluster-name> 标签。仅当您想影响 Kubernetes 服务控制器或Amazon负载均衡器控制器放置 Elastic Load Balancer 的位置时,才需要此子网标签。有关在集群创建过程中传递给 Amazon EKS 的子网的要求的更多信息,请参阅 集群 VPC 和子网注意事项

  • 您不再需要为需要访问 Web 身份令牌文件以便与服务账户的 IAM 角色一起使用的无根容器提供安全上下文。有关更多信息,请参阅 GitHub 上的 服务账户的 IAM 角色预计服务账户卷中的文件权限处理建议

  • Pod 身份 Webhook 已更新,以解决缺少启动探测器的 GitHub 问题。Webhook 现在还支持控制令牌过期的注释。有关更多信息,请参阅 GitHub 拉取请求

  • CoreDNS 1.8.0 版是推荐用于 Amazon EKS 1.19 集群的版本。预设情况下,此版本已安装在新的 Amazon EKS 1.19 集群中。有关更多信息,请参阅 管理 CoreDNS 附加组件

  • Amazon EKS 优化版 Amazon Linux 2 AMI 包括适用于 Kubernetes 1.19 的 Linux 5.4 内核版本。有关更多信息,请参阅 Amazon EKS 优化版 Amazon Linux AMI

  • CertificateSigningRequest API 已被提升为稳定 certificates.k8s.io/v1 并附带以下更改:

    • spec.signerName现在需要使用 。您无法为具有 certificates.k8s.io/v1 API 的 kubernetes.io/legacy-unknown 创建请求。

    • 您可以继续使用 certificates.k8s.io/v1beta1 API 创建具有 kubernetes.io/legacy-unknown 签名者名称的 CSR。

    • 您可以继续请求,为非节点服务器证书 webhook(例如 certificates.k8s.io/v1beta1 API)签署 CSR。这些 CSR 不是自动批准的。

    • 要批准证书,特权用户需要 kubectl 1.18.8 或更高版本。

    有关证书 v1 API 的更多详细信息,请参阅 Kubernetes 文档中的证书签名请求

以下 Amazon EKS Kubernetes 资源对于 Kubernetes 控制层面执行工作至关重要。建议您不要删除或编辑它们。

权限 Kind 命名空间 Reason
eks:certificate-controller Rolebinding kube-system 影响控制层面中的签名者和批准者功能。
eks:certificate-controller Role kube-system 影响控制层面中的签名者和批准者功能。
eks:certificate-controller ClusterRolebinding 全部 影响 kubelet 请求服务器证书的能力,这会影响某些集群功能,如 kubectl execkubectl logs

在 Kubernetes 1.19 Amazon EKS 集群中,现支持以下 Kubernetes 功能:

  • ExtendedResourceToleration 准入控制器已启用。此准入控制器会自动向请求扩展资源(例如 GPU)的 Pod 添加污点容忍度,因此您无需手动添加容忍度。有关更多信息,请参阅 Kubernetes 文档中的 ExtendedResourceToleration

  • 由树内 Kubernetes 服务控制器预置的 Elastic Load Balancers(CLB 和 NLB)支持筛选作为实例目标而纳入的节点。这有助于防止大型集群中达到目标组限制。有关更多信息,请参阅相关 GitHub 问题和 Kubernetes 文档中其他 ELB 注释下的 service.beta.kubernetes.io/aws-load-balancer-target-node-labels 注释。

  • Pod 拓扑分布已达到稳定状态。您可以使用拓扑分布约束来控制 Pod 在集群内故障域(如区域、可用区、节点和其他用户定义的拓扑域)间的分布方式。这有助于实现高可用性以及高效的资源利用率。有关更多信息,请参阅 Kubernetes 文档中的 Pod 拓扑分布约束

  • Ingress API 已达到正式发布版本。有关更多信息,请参阅 Kubernetes 文档中的 Ingress

  • 预设情况下,EndpointSlices 为已启用状态。EndpointSlices 是一个新的 API,它为 Endpoints API 提供了更加可扩展和可扩充的替代方案,用于跟踪为服务提供支持的 Pod 的 IP 地址、端口、就绪性和拓扑信息。有关更多信息,请参阅 Kubernetes 博客中的使用 EndpointSlices 扩展 Kubernetes 联网

  • Secret 和 ConfigMap 卷现在可以标记为不可改变。如果集群中存在许多 Secret 卷和 ConfigMap 卷,这将显著减少 API 服务器上的负载。有关更多信息,请参阅 Kubernetes 文档中的 ConfigMap密钥

有关完整的 Kubernetes 1.19 更新日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md

Kubernetes 1.18

有关 Kubernetes 1.18 的更多信息,请参阅官方发布公告

在 Kubernetes 1.18 Amazon EKS 集群中,现支持以下 Kubernetes 功能:

  • 拓扑管理器现已达到测试版本状态。此功能允许 CPU 和设备管理器协调资源分配决策,通过机器学习和分析工作负载优化低延迟。有关更多信息,请参阅 Kubernetes 文档中的控制节点上的拓扑管理策略

  • 服务器端应用功能将更新为新的测试版。此功能可以跟踪和管理对所有新 Kubernetes 对象字段的更改,以便您知道是什么更改了您的资源以及更改时间。有关更多信息,请参阅 Kubernetes 文档中的“什么是服务器端应用?”。

  • 入口规范中添加了一个新的 pathType 字段和新的 IngressClass 资源。这些功能使自定义入口配置变得更加简单,并且受Amazon负载均衡器控制器(以前称为 ALB 入口控制器)支持。有关更多信息,请参阅 Kubernetes 文档中 Kubernetes 1.18 中的入口 API 的改进

  • 可配置的水平 Pod 弹性伸缩行为。有关更多信息,请参阅 Kubernetes 文档中的可配置的扩展行为支持

  • 在 1.18 版集群中,在对中国区域的服务账户使用 IAM 角色时,无论是使用变异 Webhook 还是手动配置环境变量,您都不再需要将 AWS_DEFAULT_REGION=<region-code> 环境变量纳入到 Pod 中。在早期版本中,您仍然需要纳入所有 Pod 的变量。

  • 新集群包含 externalTrafficPolicy 中更新的默认值。HealthyThresholdCountUnhealthyThresholdCount 每个都为 2,而且 HealthCheckIntervalSeconds 减少到 10 秒。在旧版本中创建并升级的集群将保留旧的值。

有关完整的 Kubernetes 1.18 更新日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md

Kubernetes 1.17

有关 Kubernetes 1.17 的更多信息,请参阅官方发布公告

重要
  • EKS 尚未启用 CSIMigrationAWS 功能标记。此功能标记将在未来的版本中启用,同时附带详细的迁移说明。有关 CSI 迁移的详细信息,请参阅 Kubernetes 博客

在 Kubernetes 1.17 Amazon EKS 集群中,现支持以下 Kubernetes 功能:

有关完整的 Kubernetes 1.17 更新日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md

Amazon EKS Kubernetes 发布日历

注意

只有月份和年份的发布日期均为大概日期,这些日期会在确切日期明确后进行更新。

Kubernetes 版本 上游版本 Amazon EKS 版本 Amazon EKS 支持终止
1.17 2019 年 12 月 9 日 2020 年 7 月 10 日 2021 年 11 月 2 日
1.18 2020 年 3 月 23 日 2020 年 10 月 13 日 2022 年 3 月 31 日
1.19 2020 年 8 月 26 日 2021 年 2 月 16 日 2022 年 6 月
1.20 2020 年 12 月 8 日 2021 年 5 月 18 日 2022 年 9 月
1.21 2021 年 4 月 8 日 2021 年 7 月 19 日 2023 年 2 月
1.22 2021 年 8 月 4 日 2022 年 3 月 2023 年 5 月

Amazon EKS 版本支持和常见问题

为了与 Kubernetes 社群对 Kubernetes 版本的支持保持一致,Amazon EKS 致力于在任何特定时间支持至少四个生产就绪的 Kubernetes 版本。我们会在支持结束之日前至少 60 天公告特定 Kubernetes 次要版本的支持结束日期。鉴于新 Kubernetes 版本的 Amazon EKS 鉴定和发布流程,Amazon EKS 上对某个 Kubernetes 版本的支持的结束日期将会是 Kubernetes 项目停止支持上游版本之日或之后。

常见问题

问:Amazon EKS 对某个 Kubernetes 版本的支持持续时间是多久?

答:一个 Kubernetes 版本首次在 Amazon EKS 上发布后在 14 个月内完全受支持。即使上游 Kubernetes 不再支持 Amazon EKS 上可用的版本,也是如此。我们向后移植适用于 Amazon EKS 上支持的 Kubernetes 版本的安全补丁。

问:当对 Amazon EKS 上的 Kubernetes 版本的支持结束时,我是否会收到通知?

答:是的,如果您账户中的任何集群正在运行支持即将结束的版本,Amazon EKS 会在 Kubernetes 版本在 Amazon EKS 上发布大约 12 个月后通过 Amazon Health Dashboard 发布通知。该通知包括支持结束日期。为从通知发出之日起至少 60 天。

问:支持结束之日会发生什么?

答:在支持结束之日,您将无法再使用不受支持的版本创建新的 Amazon EKS 集群。Amazon EKS 会在支持结束日期后通过逐步部署流程,自动将现有控制层面更新为最早的受支持版本。控制层面自动更新后,您必须手动更新集群附加组件和 Amazon EC2 节点。有关更多信息,请参阅 更新 Amazon EKS 集群的 Kubernetes 版本的步骤

问:在支持结束日期后,自动更新控制层面的确切时间是何时?

答:Amazon EKS 无法给出具体的时间范围。自动更新可以在支持结束日期后的任何时间进行。我们建议您采取主动行动并更新您的控制层面,而不要依赖 Amazon EKS 自动更新流程。有关更多信息,请参阅 更新集群

问:我能否无限期地将控制层面留在某个 Kubernetes 版本上?

答:不能,Amazon 的云安全性具有最高优先级。过去一段时间(通常为 1 年),Kubernetes 社群停止发布 CVE 补丁程序,并不鼓励提交已弃用版本的 CVE。这意味着,甚至可能无法报告特定于旧版本的 Kubernetes 的漏洞,从而在出现漏洞的情况下,集群不会发出通知,也没有修复选项。Amazon EKS 认为这是不可接受的安保状况,因此不允许控制面板保持在已经终止支持的版本上。

问:Amazon EKS 支持哪些 Kubernetes 功能?

答:Amazon EKS 支持 Kubernetes API 的所有正式发布功能,以及默认启用的测试版功能。不支持 Alpha 功能。

问:Amazon EKS 托管节点组是否会随集群控制层面版本一起自动更新?

答:否,托管节点组在您的账户中创建 Amazon EC2 实例。当您或 Amazon EKS 更新控制层面时,这些实例不会自动升级。如果 Amazon EKS 自动更新控制面板,则托管节点组上的 Kubernetes 版本可能会比控制面板早一个以上版本。如果托管节点组包含运行的 Kubernetes 版本比控制面板早一个以上版本的实例,则该节点组存在运行状况问题,您可在控制台中集群的 Configuration(配置)选项卡上 Compute(计算)选项卡的 Node Groups(节点组)部分中查看。如果节点组具有可用版本更新,则控制台中节点组旁边会显示 Update now(立即更新)。有关更多信息,请参阅 更新托管节点组。我们建议您的控制层面和节点上保持相同的 Kubernetes 版本。

问:自行管理的节点组是否会随集群控制层面版本一起自动更新?

答:否,自行管理的节点组包括您的账户中的 Amazon EC2 实例。当您或 Amazon EKS 更新控制层面版本时,这些实例不会自动升级。对于自行管理的节点组,控制台中没有任何其需要更新的标示。您可以在集群的 Overview(概览)选项卡上的 Nodes(节点)列表中选择节点查看其上安装的 kubelet 版本,确定哪些节点需要更新。您必须手动更新节点。有关更多信息,请参阅 自行管理节点的更新

Kubernetes 项目最多测试两个次要版本的控制层面和节点之间的兼容性。例如,当 1.19 版节点由 1.21 版控制层面编排时,节点会继续运行。但是,不建议运行具有版本持续落后控制层面两个次要版本的节点的集群。有关更多信息,请参阅 Kubernetes 文档中的 Kubernetes 版本和版本倾斜支持政策。我们建议您的控制层面和节点上保持相同的 Kubernetes 版本。

问:Fargate 上运行的 Pod 是否通过自动集群控制层面版本升级而自动升级?

是的,Fargate Pod 在责任共担模式的 Amazon EKS 侧上的Amazon拥有账户中的基础设施中运行。Amazon EKS 使用 Kubernetes 移出 API 尝试正常耗尽在 Fargate 上运行的 Pod。有关更多信息,请参阅 Kubernetes 文档中的 Eviction API。如果无法将 Pod 移出,则 Amazon EKS 会发出一个 Kubernetes delete pod 命令。我们强烈建议将 Fargate Pod 作为复制控制器的一部分运行,如 Kubernetes 部署,以便在删除 Pod 后自动重新调度 Pod。有关更多信息,请参阅 Kubernetes 文档中的部署。新版本的 Fargate Pod 部署有一个 kubelet 版本,该版本与更新的集群控制层面版本相同。

重要

如果您更新控制层面面,则必须自行更新 Fargate 节点。要更新 Fargate 节点,请删除该节点表示的 Fargate Pod,然后重新部署 Pod。部署新的 Pod 时使用 kubelet 版本,该版本与您的集群版本相同。