Amazon EKS Kubernetes 版本
该 Kubernetes 项目持续整合新功能、设计更新和错误修复。社区发布了新的 Kubernetes 次要版本,例如 1.25
。平均每三个月提供一次新版本更新。每个次要版本在首次发布后约 12 个月内受支持。
可用的 Amazon EKS Kubernetes 版本
以下 Kubernetes 版本目前可用于新的 Amazon EKS 集群:
-
1.25
-
1.24
-
1.23
-
1.22
如果您的应用程序需要一个特定版本的 Kubernetes,我们建议您为您的集群使用 Amazon EKS 支持的最新可用 Kubernetes 版本。随着新 Kubernetes 版本在 Amazon EKS 中提供,我们建议您主动将集群更新为使用最新的可用版本。有关如何更新集群的说明,请参阅 更新 Amazon EKS 集群 Kubernetes 版本。有关 Kubernetes 版本的更多信息,请参阅 Amazon EKS Kubernetes 发布日历 和 Amazon EKS 版本支持和常见问题。
对于 1.24
和更高版本的集群,正式发布的 Amazon EKS AMI 包括 containerd
作为唯一的运行时。低于 1.24
的 Kubernetes 版本将使用 Docker 作为默认运行时。这些版本有一个引导标志选项,您可以使用该选项在任何受支持的集群上通过 containerd
测试工作负载。有关更多信息,请参阅Amazon EKS 结束了对 Dockershim 的支持。
Kubernetes 1.25
Kubernetes 1.25
现已在 Amazon EKS 中推出。有关 Kubernetes 1.25
的更多信息,请参阅官方发布公告
PodSecurityPolicy
(PSP)已在 Kubernetes 1.25
中删除。PSPs 被容器组(pod)安全准入(PSA)1.25
中逐步达到稳定,并在 Amazon EKS 中被默认启用。如果您的集群中有 PSPs,则请确保在将集群升级到版本 1.25
之前,从 PSP 迁移到内置的 Kubernetes PSS 或策略即代码解决方案。如果您不从 PSP 迁移,则您的工作负载可能会中断。有关更多信息,请参阅 容器组(pod)安全策略 (PSP) 移除常见问题。
Amazon EKS 1.25
包括对集群身份验证的增强,其中包含更新的 YAML 库。如果在 kube-system
命名空间中找到的 aws-auth
ConfigMap
的 YAML 值以宏开头,则其中第一个字符是大括号,则应在大括号({ }
)之前和之后添加引号(“ ”
)。确保 aws-iam-authenticator
版本 v0.6.3
准确解析 Amazon EKS 1.25
中的 aws-auth
ConfigMap
需要此操作。
EndpointSlice
的测试版 API(discovery.k8s.io/v1beta1
)已在 Kubernetes 1.21
中弃用,自 Kubernetes 1.25
起不再提供。此 API 已更新为 discovery.k8s.io/v1
。有关更多信息,请参阅 Kubernetes文档中的 EndpointSlice
v2.4.6
和更早版本使用 v1beta1
端点与 EndpointSlices
通信。如果您将 EndpointSlices
配置用于 Amazon Load Balancer Controller,则必须先升级到 Amazon Load Balancer Controller v2.4.7
,然后才能将 Amazon EKS 集群升级到 1.25
。如果您在将 EndpointSlices
配置用于 Amazon Load Balancer Controller 时升级到 1.25
,则控制器将崩溃并导致您的工作负载中断。要升级控制器,请参阅 安装 Amazon Load Balancer Controller 附加组件。
-
SeccompDefault
已提升到 Kubernetes1.25
中的测试版。通过在配置kubelet
时设置--seccomp-default
标志,容器运行时使用其RuntimeDefault
seccomp
配置文件,而不是无约束(seccomp disabled
)模式。默认配置文件提供了一组强大的安全默认值,同时保留了工作负载的功能。尽管此标志可用,但默认情况下,Amazon EKS 不启用此标志,因此 Amazon EKS 的行为实际上没有变化。如果愿意,您可以开始在您的节点上启用这个功能。有关更多详细信息,请参阅 Kubernetes 文档中的教程使用 seccomp 限制容器的系统调用。 -
Kubernetes
1.24
及更高版本中删除了对 Docker(也称为Dockershim
)的容器运行时接口(CRI)的支持。Kubernetes1.24
及更高版本集群的 Amazon EKS 官方 AMIs 的唯一容器运行时是containerd
。在升级到 Amazon EKS1.24
或更高版本之前,删除对不再支持的引导脚本标志的任何引用。有关更多信息,请参阅Amazon EKS 结束了对 Dockershim 的支持。 -
对通配符查询的支持已在 CoreDNS
1.8.7
中被弃用并在 CoreDNS1.9
中被移除。此操作作为一项安全措施而执行。通配符查询不再起作用,并返回NXDOMAIN
而不是 IP 地址。
有关完整的 Kubernetes 1.25
更改日志,请参阅https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.25.md#changelog-since-v1240
Kubernetes 1.24
Kubernetes 1.24
现已在 Amazon EKS 中推出。有关 Kubernetes 1.24
的更多信息,请参阅官方发布公告
从 Kubernetes 1.24
开始,默认情况下集群中不启用新的测试版 API。默认情况下,现有的测试版 API 及其新版本继续处于启用状态。Amazon EKS 遵循与上游的 Kubernetes 1.24
相同的行为。默认情况下,控制新 API 操作和现有 API 操作的新功能的功能门控处于启用状态。这与上游 Kubernetes 一致。有关更多信息,请参阅 GitHub 上的 KEP-3136: Beta APIs Are Off by Default
Kubernetes 1.24
中删除了对 Docker(也称为 Dockershim)的容器运行时接口(CRI)的支持。Amazon EKS 官方 AMI 将 containerd 作为唯一的运行时。在迁移到 Amazon EKS 1.24
或更高版本之前,必须删除对不再支持的引导脚本标志的任何引用。有关更多信息,请参阅Amazon EKS 结束了对 Dockershim 的支持。
随着容器运行时从 Docker 更改为 containerd
,/var/log/containers/*.log
中容器日志的格式已更改为 CRI 格式。标准的 Docker 解析器不再起作用,因此需要将 CRI 解析器添加到您的 ConfigMap
中。
[PARSER] Name cri Format regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<log>.*)$ Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L%z
在 Kubernetes 1.23
及早期版本中,具有不可验证的 IP 和 DNS 使用者备用名称(SAN)的 kubelet
服务证书会自动使用不可验证的 SAN 进行颁发。预置的证书中省略了这些不可验证的 SAN。在 1.24
版及更高版本的集群中,如果无法验证任何 SAN,则不会颁发 kubelet
服务证书。这会阻止 kubectl
exec 和 kubectl
logs 命令发挥作用。有关更多信息,请参阅将集群升级到 Kubernetes 1.24 之前的证书签名注意事项。
-
当跨多个可用区部署集群 Worker 节点时,您可以使用拓扑感知提示(Topology Aware Hints)来表明您希望将流量保持在区域内。在区域内路由流量有助于降低成本和提高网络性能。默认情况下,拓扑感知提示在 Amazon EKS
1.24
中处于启用状态。有关更多信息,请参阅 Kubernetes 文档中的 Topology Aware Hints(拓扑感知提示)。 -
Kubernetes
1.25
计划删除PodSecurityPolicy
(PSP)。PSPs 正在被 Pod Security Admission (PSA)(容器组(pod)安全准入(PSA))所取代。PSA 是一个内置的准入控制器,使用了 Pod Security Standards(PSS) (容器组(pod)安全标准(PSS))中所述的安全控件。PSA 和 PSS 都是测试版功能,默认情况下在 Amazon EKS 中处于启用状态。为了解决 1.25
版中的 PSP 删除问题,我们建议您在 Amazon EKS 中实施 PSS。有关更多信息,请参阅 Amazon 博客上的 Implementing Pod Security Standards in Amazon EKS(在 Amazon EKS 中实施容器组(pod)安全标准)。 -
Kubernetes
1.24
中删除了client.authentication.k8s.io/v1alpha1
ExecCredential。ExecCredential API 通常在 Kubernetes1.22
中可用。如果您使用依赖于v1alpha1
API 的 client-go 凭证插件,请联系您的插件分销商,了解如何迁移到v1
API。 -
对于 Kubernetes
1.24
,我们为上游 Cluster Autoscaler 项目贡献了一项功能,该功能简化了从/向零节点扩展 Amazon EKS 托管节点组的过程。以前,要让 Cluster Autoscaler 了解扩展到零节点的托管节点组的资源、标签和污点,您需要使用其负责的节点的详细信息来标记底层 Amazon EC2 Auto Scaling 组。现在,当托管节点组中没有正在运行的节点时,Cluster Autoscaler 会调用 Amazon EKSDescribeNodegroup
API 操作。此 API 操作提供了 Cluster Autoscaler 所需有关托管节点组的资源、标签和污点的信息。此功能要求您向 Cluster Autoscaler 服务账户 IAM policy 添加eks:DescribeNodegroup
权限。当为 Amazon EKS 托管节点组提供支持的自动扩缩组上 Cluster Autoscaler 标签的值与节点组本身发生冲突时,Cluster Autoscaler 倾向于使用自动扩缩组标签的值。这样您就能根据需要覆盖值。有关更多信息,请参阅Autoscaling。 -
如果您打算在 Amazon EKS
1.24
中使用 Inferentia 或 Trainium 实例类型,则必须升级到 Amazon Neuron 设备插件 1.9.3.0 版或更高版本。有关更多信息,请参阅 Amazon Neuron 文档中的 Neuron K8 release [1.9.3.0](Neuron K8 版本 [1.9.3.0])。 默认情况下,
Containerd
已为容器组(pod)启用IPv6
。它将节点内核设置应用于容器组(pod)网络命名空间。因此,容器组(pod)中的容器绑定到IPv4
(127.0.0.1
)和IPv6
(::1
)环回地址。IPv6
是通信的默认协议。在将集群更新到版本1.24
之前,建议您测试您的多容器组(pod)。修改应用程序,使其可以绑定到环回接口上的所有 IP 地址。大多数库都启用了IPv6
绑定,绑定向后兼容IPv4
。当无法修改您的应用程序代码时,您有两种选择:运行
init
容器并将disable ipv6
设置为true
(sysctl -w net.ipv6.conf.all.disable ipv6=1
)。配置一个转换准入 Webhook
以在您的应用程序容器组(pod)旁注入 init
容器。
如果您需要为所有节点上的所有容器组(pod)阻止
IPv6
,则可能必须在实例上禁用IPv6
。
有关完整的 Kubernetes 1.24
更改日志,请参阅https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md#changelog-since-v1230
Kubernetes 1.23
Kubernetes 1.23
现已在 Amazon EKS 中推出。有关 Kubernetes 1.23
的更多信息,请参阅官方发布公告
Kubernetes 树内插件至 Container Storage Interface(CSI)卷的迁移功能已启用。此功能支持使用相应的 Amazon EBS CSI 驱动程序替换适用于 Amazon EBS 的现有 Kubernetes 树内存储插件。有关更多信息,请参阅 Kubernetes 博客上的 Kubernetes 1.17 Feature: Kubernetes In-Tree to CSI Volume Migration Moves to Beta
该功能将树内 API 转换为等效的 CSI API,并将操作委派给替换 CSI 驱动程序。借助此功能,如果您使用的是属于这些工作负载的现有 StorageClass
、PersistentVolume
和 PersistentVolumeClaim
对象,则可能不会有任何明显变化。该功能支持 Kubernetes 将树内插件的所有存储管理操作委派给 CSI 驱动程序。如果您在现有集群中使用 Amazon EBS 卷,请在将集群更新为 1.23
版之前,在集群中安装 Amazon EBS CSI 驱动程序。如果未在更新现有集群之前安装驱动程序,则可能会中断您的工作负载。如果您计划在新的 1.23
版集群中部署使用 Amazon EBS 卷的工作负载,请在集群中部署工作负载之前,在集群中安装 Amazon EBS CSI 驱动程序。有关如何在集群上安装 Amazon EBS CSI 驱动程序的说明,请参阅 Amazon EBS CSI 驱动程序。有关迁移功能的常见问题,请参阅 Amazon EBS CSI 迁移常见问题。
Amazon EKS Fargate 容器组(pod)的启动可能会因容器组(pod)规格而中断,即最大容器资源限制超过所请求资源的总和。为了保证调度,最大资源限制应始终小于所请求资源的总和。
-
Kubernetes 已停止支持版本
1.20
中的dockershim
,并已删除版本1.24
中的dockershim
。有关更多信息,请参阅 Kubernetes 博客上的 Kubernetes is Moving on From Dockershim: Commitments and Next Steps(Kubernetes 正在舍弃 Dockershim:承诺和后续步骤)。从 Amazon EKS 1.24
版开始,Amazon EKS 将终止对dockershim
的支持。从 Amazon EKS 版本containerd
开始,Amazon EKS 官方 AMI 仅会将1.24
作为唯一运行时。尽管 Amazon EKS
1.23
版继续支持dockershim
,我们仍建议您立即开始测试自己的应用程序,以识别和删除任何 Docker 依赖项。如此,您就可以做好将集群更新到版本1.24
的准备。有关删除dockershim
的更多信息,请参阅 Amazon EKS 结束了对 Dockershim 的支持。 -
Kubernetes 已将
IPv4
/IPv6
双堆栈联网功能升级到正式版本,可供 pods、服务和节点使用。但是,Amazon EKS 和 Amazon VPC CNI plugin for Kubernetes 目前不支持双堆栈联网。您的集群可以将IPv4
或IPv6
地址分配给 pods 和服务,但不能同时分配两种地址类型。 -
Kubernetes 已将容器组(pod)安全准入(PSA)功能升级到测试版。该功能已默认启用。有关更多信息,请参阅 Kubernetes 文档中的 Pod Security Admission
[容器组(pod)安全准入]。PSA 将取代容器组(pod)安全策略 (PSP)准入控制器。PSP 准入控制器不受支持,计划在 Kubernetes 版本 1.25
中删除。PSP 准入控制器根据设置强制级别的特定命名空间标签,在命名空间中的 pod 上强制实施 pods 安全标准。有关更多信息,请参阅 Amazon EKS 最佳实践指南中的 Pod Security Standards (PSS) and Pod Security Admission (PSA)
[容器组(pod)安全标准(PSS)和容器组(pod)安全准入(PSA)]。 -
使用集群部署的
kube-proxy
映像现在是 Amazon EKS Distro(EKS-D)维护的最低要求基本映像。该映像包含最低要求的程序包,并且没有 Shell 或程序包管理器。 -
Kubernetes 已将临时容器升级到测试版。临时容器是在与现有 pod 相同的命名空间中运行的暂时性容器。您可以用它们来观察 pods 和容器的状态,以便排查问题并进行调试。当
kubectl exec
因容器崩溃或容器映像不包含调试实用程序而不足时,这种容器对于交互式排查问题尤其有用。包含调试实用程序的示例容器是 Distroless 映像。有关更多信息,请参阅 Kubernetes 文档中的 Debugging with an ephemeral debug container (使用临时调试容器进行调试)。 -
Kubernetes 已将
HorizontalPodAutoscaler
autoscaling/v2
稳定 API 升级到正式版本。HorizontalPodAutoscaler
autoscaling/v2beta2
API 已弃用。其在1.26
中不可用。
有关完整的 Kubernetes 1.23
更改日志,请参阅https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.23.md#changelog-since-v1220
Kubernetes 1.22
Kubernetes 1.22
现已在 Amazon EKS 中推出。有关 Kubernetes 1.22
的更多信息,请参阅官方发布公告
BoundServiceAccountTokenVolume
1.22
中启用。此功能提高了服务账户令牌的安全性。它允许正在 Kubernetes 上运行的工作负载请求与受众、时间和密钥绑定的 JSON Web 令牌。服务账户令牌现在的有效期为 1 小时。在以前的 Kubernetes 版本中,它们没有有效期。这意味着依赖这些令牌的客户端必须在一小时内刷新令牌。以下 Kubernetes 客户端开发工具包
Go 版本
0.15.7
和更高版本Python 版本
12.0.0
和更高版本Java 版本
9.0.0
和更高版本JavaScript 版本
0.10.3
和更高版本Ruby
master
分支Haskell 版本
0.3.0.0
C# 版本
7.0.5
和更高版本
如果您的工作负载使用的是旧版本的客户端,则必须予以更新。为了使客户顺利迁移到更新的有时限的服务账户令牌,Kubernetes 版本 1.22
在默认一小时内向服务账户令牌添加延长的到期期限。对于 Amazon EKS 集群,延长到期期限为 90 天。Amazon EKS 集群的 Kubernetes API 服务器拒绝令牌超过 90 天的请求。我们建议您检查应用程序及其依赖项。请确保 Kubernetes 客户端开发工具包版本等于或高于之前列出的版本。有关如何识别使用过时令牌的 pods 的说明,请参阅 Kubernetes 服务账户。
-
Kubernetes
1.22
将删除许多不再可用的 API。在升级到 Amazon EKS 版本1.22
之前,您可能需要更改应用程序。更新集群前请严格按照 Kubernetes 版本 1.22 的先决条件 执行。 -
入口 API 版本
extensions/v1beta1
和networking.k8s.io/v1beta1
已在 Kubernetes1.22
中删除。如果您使用的是 Amazon Load Balancer Controller,您必须至少升级到版本 2.4.1
才能将 Amazon EKS 集群升级到 1.22
版本。此外,您必须修改入口清单,才能使用 apiVersion
networking.k8s.io/v1
。此选项在 Kubernetes 版本1.19
之后可用。有关入口 v1beta1
和v1
之间的更改的更多信息,请参阅 Kubernetes 文档。Amazon Load Balancer Controller 控制器样本清单 使用 v1
规格。 -
Amazon EKS 旧版 Windows 支持控制器使用已在 Kubernetes
1.22
中删除的admissionregistration.k8s.io/v1beta1
API。如果您运行的是 Windows 工作负载,您必须删除旧版 Windows 支持并启用 Windows 支持才能升级到 Amazon EKS 版本1.22
。 -
CertificateSigningRequest(CSR)
API 版本 certificates.k8s.io/v1beta1
已在 Kubernetes 版本1.22
中删除。您必须迁移清单和 API 客户端才能使用certificates.k8s.io/v1
CSR API。此 API 在版本1.19
之后可用。有关如何在 Amazon EKS 中使用 CSR 的说明,请参阅证书签名。 -
CustomResourceDefinition
API 版本apiextensions.k8s.io/v1beta1
已在 Kubernetes1.22
中删除。确保集群中的所有自定义资源定义都更新为v1
。需要 API 版本v1
自定义资源定义才能定义 Open APIv3
架构验证。有关更多信息,请参阅 Kubernetes 文档。 -
如果您使用的是 App Mesh,则必须至少升级到 App Mesh 控制器
v1.4.3
或更高版本才能升级到 Amazon EKS 版本1.22
。旧版本的 App Mesh 控制器使用v1beta1
CustomResourceDefinition
API 版本且不兼容 Kubernetes 版本1.22
和更高版本。 -
Amazon EKS 版本
1.22
在默认情况下启用EndpointSliceTerminatingCondition
功能,其中包括EndpointSlices
中处于终止状态的 pods。如果您在 Amazon Load Balancer Controller 中将enableEndpointSlices
设置为True
(默认为禁用),您必须至少升级到 Amazon Load Balancer Controller2.4.1+
版后才能升级到 Amazon EKS1.22
版。 -
从 Amazon EKS
1.22
版开始,kube-proxy
默认配置为公开 pod 之外的 Prometheus 指标。此行为更改解决了容器路线图问题 #657中提出的请求。 -
Amazon EKS 版本
1.22
的初次发布使用etcd
版本3.4
作为后端,不受etcd
版本3.5
中存在的数据损坏的可能性的影响。 -
从 Amazon EKS
1.22
开始,Amazon EKS 从核心控制面板代码中解耦特定于 Amazon 云的控制逻辑到树外Amazon Kubernetes 云控制器管理器 。这与上游 Kubernetes 推荐一致。通过解耦 Kubernetes 与底层云基础设施之间的互操作性逻辑, cloud-controller-manager
组件使云提供商能够以与主要 Kubernetes 项目相比不同的速度发布功能。这种变化是透明的,无需采取任何行动。但是,当启用时,名为cloud-controller-manager
的新日志流现在显示在ControllerManager
日志类型下。有关更多信息,请参阅 Amazon EKS 控制面板日志记录。 -
从 Amazon EKS
1.22
开始,Amazon EKS 将服务账户的 IAM 角色(IRSA)使用的默认 Amazon Security Token Service 端点更改为区域性端点(而不是全局端点),以减少延迟和提高可靠性。您可以选择将 IRSA 配置为在 配置服务账户的 Amazon Security Token Service 端点 中使用全局端点。
在 Kubernetes 1.22
Amazon EKS 集群中,现支持以下 Kubernetes 功能:
-
服务器端应用功能升级到 GA
- 服务器端应用功能帮助用户和控制器通过声明式配置管理其资源。它允许他们通过发送完全指定的目的以声明方式创建或修改对象。在几个版本中进入测试版后,服务器端应用功能现已正式发布。 -
使用不受支持的 API 的警告机制
– 使用不受支持的 API 会产生对 API 使用者可见的警告以及对集群管理员可见的指标。
有关完整的 Kubernetes 1.22
更改日志,请参阅https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.22.md#changelog-since-v1210
Kubernetes 1.21
Kubernetes 1.21
现已在 Amazon EKS 中推出。有关 Kubernetes 1.21
的更多信息,请参阅官方发布公告
BoundServiceAccountTokenVolume
1.21
中启用。此功能通过允许在 Kubernetes 上运行工作负载来提高服务账户令牌的安全性,以请求与受众、时间和密钥绑定的 JSON Web 令牌。服务账户令牌现在的有效期为 1 小时。在以前的 Kubernetes 版本中,它们没有有效期。这意味着依赖这些令牌的客户端必须在一小时内刷新令牌。以下 Kubernetes 客户端开发工具包
Go 版本
0.15.7
和更高版本Python 版本
12.0.0
和更高版本Java 版本
9.0.0
和更高版本JavaScript 版本
0.10.3
和更高版本Ruby
master
分支Haskell 版本
0.3.0.0
C# 版本
7.0.5
和更高版本
如果您的工作负载使用的是旧版本的客户端,则必须予以更新。为了使客户顺利迁移到更新的有时限的服务账户令牌,Kubernetes 版本 1.21
在默认一小时内向服务账户令牌添加延长的到期期限。对于 Amazon EKS 集群,延长到期期限为 90 天。Amazon EKS 集群的 Kubernetes API 服务器拒绝令牌超过 90 天的请求。我们建议您检查应用程序及其依赖项。请确保 Kubernetes 客户端开发工具包版本等于或高于之前列出的版本。有关如何识别使用过时令牌的 pods 的说明,请参阅 Kubernetes 服务账户。
-
pods、服务和节点上的双堆栈联网
支持( IPv4
和IPv6
地址)已达到测试版状态。但是,Amazon EKS 和 Amazon VPC CNI plugin for Kubernetes 目前不支持双堆栈联网。 -
Amazon EKS 优化版 Amazon Linux 2 AMI 现在包含一个引导启动标志,以启用
containerd
运行时作为 Docker 替代方案。此标志允许为在下一个 Kubernetes 版本中删除作为受支持运行时的 Docker做准备。有关更多信息,请参阅启用 containerd 运行时间引导标记。这可以通过 Github 上的容器路线图 进行跟踪。 -
托管节点组支持 Cluster Autoscaler 优先级扩展器。
Amazon EKS 版本
1.21
集群上新创建的托管节点组对基础自动扩缩组名称使用以下格式:eks-
managed-node-group-name
-uuid
这样就可以根据用户定义的优先级使用 Cluster Autoscaler 的优先级扩展器
功能。一个常见的使用案例是,将 Spot 节点组而不是按需节点组作为扩缩首选。此行为更改解决了 #1304 容器路线图问题 。
在 Amazon EKS 1.21
集群中,现支持以下 Kubernetes 功能:
-
CronJobs
(前称为 ScheduledJobs)现已升级到稳定状态。此项更改后,用户定期执行计划的操作,例如备份和报告生成。 -
不可改变的密钥和 ConfigMaps
现已升级到稳定状态。已向这些对象添加了一个不可改变的新字段以拒绝更改。此拒绝可保护集群免受会意外中断应用程序的更新。由于这些资源是不可改变的,因此 kubelet
不会关注或者轮询更改。这将减少kube-apiserver
负载并提高可扩展性和性能。 -
正常节点关机
功能现已升级到测试版状态。此更新允许 kubelet
知道节点关闭,并能够正常终止该节点的 pods。在此更新之前,当节点关闭时,它的 pods 没有遵循预期的终止生命周期。这导致了工作负载问题。现在,kubelet
可以通过systemd
检测即将发生的系统关闭,并通知正在运行的 pods,以便它们正常终止。 -
具有多个容器的容器组(pod)现在可以使用
kubectl.kubernetes.io/default-container
注释为kubectl
命令预先选择容器。 -
PodSecurityPolicy
正被逐步淘汰。根据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
的更多信息,请参阅官方发布公告
-
1.20
带来 Amazon EKS 创建的新的默认角色和用户。您可以在默认 Amazon EKS 创建的 Kubernetes 角色和用户中找到更多信息。请确保您使用的是支持的 cert-manager 版本。
在 Kubernetes 1.20
Amazon EKS 集群中,现支持以下 Kubernetes 功能:
-
API 优先级和公平性
功能已达到测试状态,并且在预设情况下是处于已启用状态。此功能允许 kube-apiserver
按优先级对传入请求进行分类。 -
RuntimeClass
功能已达到稳定状态。 RuntimeClass
资源提供了一种用于支持集群中多个运行时间的机制,并将有关该容器运行时的信息显示到控制层面。 -
进程 ID 限制
功能现已升级到正式发布版本。 -
kubectl debug
已达到测试版状态。 kubectl debug
直接支持来自kubectl
的常见调试工作流。 -
Docker 容器运行时已逐步停止。Kubernetes 社群已经就这一点撰写了一篇详细的博客文章
并提供了专门的常见问题页面 。Docker 生成的镜像可以继续使用,并且会一如既往地发挥功能。您可以安全地忽略 kubelet
启动日志中打印的dockershim
弃用警告消息。Amazon EKS 最终将迁移到containerd
,后者将作为 Amazon EKS 优化版 Amazon Linux 2 AMI 的运行时间。您可以参阅容器路线图问题,了解更多详细信息。 -
Pod Hostname as FQDN 功能已升级到测试版状态。此功能允许将 pod 的主机名设置为其完全限定域名(FQDN)。这样,您就可以将内核的主机名字段设置为 pod 的 FQDN。
-
client-go 凭证插件现在可以通过
KUBERNETES_EXEC_INFO
环境变量在当前集群信息中传递。此增强功能允许 Go 客户端使用密钥管理系统(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/
标签。仅当您想影响 Kubernetes 服务控制器或 Amazon Load Balancer Controller 放置 Elastic Load Balancer 的位置时,才需要此子网标签。有关在集群创建过程中传递给 Amazon EKS 的子网的要求的更多信息,请参阅 Amazon EKS VPC 和子网要求和注意事项。my-cluster
-
在更新为
1.19
的现有集群上,子网标签未修改。 -
Amazon Load Balancer Controller 版本以及
2.1.1
和更早版本需要
子网标签。在版本my-cluster
2.1.2
和更高版本中,您可以指定标签以优化子网发现,但这不是必需操作。有关 Amazon Load Balancer Controller 的更多信息,请参阅 安装 Amazon Load Balancer Controller 附加组件。有关使用负载均衡器时子网标签的更多信息,请参阅 Amazon EKS 上的应用程序负载均衡 和 Amazon EKS 上的网络负载均衡。
-
-
您不再需要为必须访问 Web 身份令牌文件以便与服务账户的 IAM 角色一起使用的无根容器提供安全上下文。有关更多信息,请参阅 GitHub 上的 服务账户的 IAM 角色 和预计服务账户卷中的文件权限处理建议
。 -
pod 身份 Webhook 已更新,以解决缺少启动探测器
的 GitHub 问题。Webhook 现在还支持控制令牌过期的注释。有关更多信息,请参阅 GitHub 拉取请求 。 -
CoreDNS 版本
1.8.0
是推荐用于 Amazon EKS1.19
集群的版本。预设情况下,此版本已安装在新的 Amazon EKS1.19
集群中。有关更多信息,请参阅更新 CoreDNS 自行管理的附加组件。 -
Amazon EKS 优化版 Amazon Linux 2 AMI 包括适用于 Kubernetes 版本
1.19
的 Linux 内核版本5.4
。有关更多信息,请参阅 GitHub 上的更改日志。有关更多信息,请参阅 。 -
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 exec 和 kubectl logs 。 |
在 Kubernetes 1.19
Amazon EKS 集群中,现支持以下 Kubernetes 功能:
-
ExtendedResourceToleration
准入控制器已启用。此准入控制器会自动向请求扩展资源(例如 GPU)的 pods 添加污点容忍度。这样,您无需手动添加容忍度。有关更多信息,请参阅 Kubernetes 文档中的 ExtendedResourceToleration。 -
由树内 Kubernetes 服务控制器预置的 Elastic Load Balancers(CLB 和 NLB)支持筛选作为实例目标而纳入的节点。这有助于防止大型集群中达到目标组限制。有关更多信息,请参阅相关 GitHub 问题
和 Kubernetes 文档中其他 ELB 注释 下的 service.beta.kubernetes.io/aws-load-balancer-target-node-labels
注释。 -
Pod 拓扑分布已达到稳定状态。您可以使用拓扑分布约束来控制 pods 在集群内故障域(如 Amazon Web Services 区域、可用区、节点和其他用户定义的拓扑域)间的分布方式。这有助于实现高可用性以及高效的资源利用率。有关更多信息,请参阅 Kubernetes 文档中的容器组(pod)拓扑分布约束
。 -
Ingress API 已达到正式发布版本。有关更多信息,请参阅 Kubernetes 文档中的入口
。 -
EndpointSlices
在默认情况下处于启用状态。EndpointSlices
是一个新的 API,它为端点 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
Amazon EKS Kubernetes 发布日历
只有月份和年份的发布日期均为大概日期,这些日期会在确切日期明确后进行更新。
Kubernetes 版本 | 上游版本 | Amazon EKS 版本 | Amazon EKS 支持终止 |
---|---|---|---|
1.25 |
2022 年 8 月 23 日 | 2023 年 2 月 22 日 | 2024 年 5 月 |
1.24 |
2022 年 5 月 3 日 | 2022 年 11 月 15 日 | 2024 年 1 月 |
1.23 |
2021 年 12 月 7 日 | 2022 年 8 月 11 日 | 2023 年 10 月 |
1.22 |
2021 年 8 月 4 日 | 2022 年 4 月 22 日 | 2023 年 6 月 4 日 |
1.21 |
2021 年 4 月 8 日 | 2021 年 7 月 19 日 | 2023 年 2 月 15 日 |
1.20 |
2020 年 12 月 8 日 | 2021 年 5 月 18 日 | 2022 年 11 月 1 日 |
1.19 |
2020 年 8 月 26 日 | 2021 年 2 月 16 日 | 2022 年 8 月 1 日 |
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 自动更新流程。有关更多信息,请参阅更新 Amazon EKS 集群 Kubernetes 版本。
问:我能否无限期地将控制面板留在某个 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 版本的实例。该节点组在控制台中集群的 Compute(计算)选项卡的 Node groups(节点组)部分中存在运行状况问题。最后,如果节点组具有可用版本更新,则控制台中节点组旁边会显示 Update now(立即更新)。有关更多信息,请参阅更新托管节点组。我们建议您的控制面板和节点上保持相同的 Kubernetes 版本。
问:自行管理的节点组是否会随集群控制层面版本一起自动更新?
答:否,自行管理的节点组包括您的账户中的 Amazon EC2 实例。当您或 Amazon EKS 代表您更新控制面板版本时,这些实例不会自动升级。对于自行管理的节点组,控制台中没有任何其需要更新的标示。您可以在集群的 Overview(概览)选项卡上的 Nodes(节点)列表中选择节点查看其上安装的 kubelet
版本,确定哪些节点需要更新。您必须手动更新节点。有关更多信息,请参阅自行管理节点的更新。
Kubernetes 项目最多测试两个次要版本的控制面板和节点之间的兼容性。例如,当 1.23
节点由 1.25
控制面板编排时,节点会继续运行。但是,不建议运行具有版本持续落后控制面板两个次要版本的节点的集群。有关更多信息,请参阅 Kubernetes 文档中的 Kubernetes 版本和版本倾斜支持政策
问:Fargate 上运行的 pods 是否通过自动集群控制面板版本升级而自动升级?
是的,Fargate pods 在责任共担模式的 Amazon EKS 侧上的 Amazon 拥有账户中的基础设施中运行。Amazon EKS 使用 Kubernetes 驱逐 API 尝试正常耗尽在 Fargate 上运行的 pods。有关更多信息,请参阅 Kubernetes 文档中的驱逐 APIdelete
pod
命令。我们强烈建议将 Fargate pods 作为复制控制器(如 Kubernetes 部署)的一部分运行。这是为了在删除后,自动重新安排 pod。有关更多信息,请参阅 Kubernetes 文档中的部署kubelet
版本,该版本与更新的集群控制面板版本相同。
如果您更新控制面板,则必须自行更新 Fargate 节点。要更新 Fargate 节点,请删除该节点表示的 Fargate pod,然后重新部署 pod。部署新的 pod 时使用 kubelet
版本,该版本与您的集群版本相同。