我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
亚马逊 EKS 现在支持 Kubernetes 版本 1.26
简介
Kubernetes v1.26 亮点
这篇文章介绍了 Kubernetes 版本 1.26 中一些值得注意的移除、弃用和增强功能。首先,不容错过新闻以及重定向到2023年3月20日开始的
注意 Kubernetes 版本 1.26 中的所有弃用和删除内容。以下是最显著的变化列表。
升级的先决条件
在亚马逊 EKS 中升级到 Kubernetes v1.26 之前,您需要完成一些重要任务。以下部分概述了升级前必须解决的两项关键更改。
- 虚拟私有云 (VPC) 容器网络接口 (CNI) 插件 。您 必须 将
VPC CNI 插件 版本升级到 1.12 或更高版本。VPC CNI 的早期版本会导致 CNI 崩溃,因为它依赖于 CRI v1Alpha2API,该版本已从 Kubernetes v1.26 中删除。有关在集群中升级 VPC CNI 的分步说明,请参阅使用适用于 Kubernetes 的亚马逊 VPC CNI 插件 Amazon EK S 插件。 - 容器运行时。 您 必须 升级到
容器版本 1.6.0 或更高版本。Kubernetes v1.26 取消了对 CRI v1alpha2 的支持,这会导致 kubelet 在容器运行时不支持 CRI v1 时无法注册节点。这会影响 Kubernetes 1.26 不支持的容器次要版本 1.5 及以下版本。同样,其他仅支持 v1alpha2 的容器运行时也必须更新。如果您使用的是 Amazon EKS 优化的 AMI ,请检查它使用的是哪个版本的容器。请注意,自定义 AMI 中包含的容器版本可能会有所不同,某些旧版本可能与 Kubernetes v1.26 不兼容。为了确保兼容性,请升级到最新的 Amazon EKS 优化版 AMI,其中包括容器版本 1.6.19,以避免任何兼容性问题。
注意: 在 EKS 1.26 中,kubelet 中的 亚马逊云科技 特定逻辑已被禁用。如果您在 1.26 之前使用了 EKS 优化的 AMI,则 kubelet 被配置为使用树内云提供商。这是通过将 --cloudprovider=aws 标志传递给 kubelet 的额外参数来配置的
。这触发了 kubelet 调用 EC2 Desc ribeInstance API,后者返回了该实例
的 privatedNsName。 从 1.26 开始,kubelet 默认配置为使用
如果您使用自定义 AMI 和/或使用包含自定义域后缀(例如 example.com)的 DHCP 选项集配置 VPC,这可能会导致问题。除非你将 --cloud-provider=external 或--cloud-provider=
“”。 --hostname-override=$private_dns_name 标志传递给 kubelet 的额外参数,否则 kubelet 将使用操作系统的主机名作为节点名称,例如 i-0c9e
5eff964fb6eea.example.com 或 ip-192-168-52.example.com。具有此类名称的节点将无法在集群中注册,因为
最新版本的 EKS 优化版 AMI v20230501 已更新,加入了--hostname-override 标志。
如果您的节点在升级到 1.26 后在加入集群时遇到问题,请验证您使用的是 v20230501 或更高版本。如
已停用的 API 版本和功能
如今,当发布新版本的 Kubernetes 时,应用程序编程接口 (API) 版本被删除的情况并不少见。发生这种情况时,在
-
apiserver.k8s.io/v1beta1 API 版本 。 在 1.26 中删除的 API 版本中有 flowcontrol.apiserver.k8s.io/v1beta1 API,它在 v1.23 中被标记为已过时。这个 API 版本与 Kubernetes 的 API 优先级和公平性功能有关。如果你使用的是 flowSchema 的 v1beta1 API 版本 和 control.apiserver.k8s.io/v1beta2 API 版本。如果你没有修改 API 优先级和公平性的默认设置,那么你可能不会受到删除的影响,也不需要采取任何进一步的措施。如果您不确定是否正在使用已停用的版本,请运行以下命令:PriorityLevelConfiguration 资源,请更新你的 Kubernetes 清单和 API 客户端,改用更新的 flow
- 自动扩展/v 2beta2 API 版本。 在 Kubernetes v1.26 中删除的 API 版本中包括自动扩展/v2beta2 API,它在 v1.23 中被标记为已过时。如果您当前使用的是 Hori
zontalP odautoScaler 的自动缩放/v2beta2 API 版本,请更新您的应用程序以改用自动缩放/v2API 版本。如果您不确定是否正在使用已停用的版本,请运行以下命令:
- 动态 kubelet 配置。 出于稳定性和安全考虑,
在 v1.26 中 删除了 动态 kubelet 配置。以前,此配置允许你通过 Kubernetes API 推出新的 kubelet 配置,方法是指定一个包含 kubelet 应为每个节点使用的配置数据的配置映射。我们建议使用像 Puppet、Chef 或 Ansible 这样的配置管理工具,或者使用 —config 将配置传递给 kubelet 来切换到静态 kubelet 配置。要了解更多信息,请参阅通过配置文件设置 Kubelet 参数。 - Bottlerocket cgroupsv1 向 cgroupsv2 迁移 。
Bottlerocket 将在版本 1.26 中从 cgroupsv1 迁移到 cgroupsv2。 此更改将影响在亚马逊 EKS 集群中使用 Bottlerocket AMI 的用户 ,因为当前的 cgroupsv1 实现将不再是默认选项。取而代之的是,Bottlerocket将使用新的cgroupsv2 cgroupsv2,该版本旨在通过增强对内存、中央处理器 (CPU)、I/O 和网络的控制来解决以前在Linux资源管理方面的限制。这种改进可以更有效地实现资源分配的自动化,并可以更安全地限制 I/O 使用量和其他资源密集型活动。在此方面,Bottlerocket提供了自动更新Bottlerocket实例的工具,以及用于直接控制更新的API。要了解更多信息,请参阅BottleRocket 文档中的 更新方法 。 - klog 日志标志 。v1.26 中删除了许多 klog 日志库将
日志记录扩展到事件流上的 klog 标志,以简化日志配置和维护,包括删除 —logtostderr。我们建议更新您的配置文件和脚本以使用其他日志选项。有关已移除的标志的完整列表,请参阅移除的 klog 标志 。
在 Kubernetes 项目的背景下,弃用某个功能或标志意味着它将被逐步淘汰,并最终在未来的版本中被删除,而且 Kubernetes 版本 1.26 中有很多弃用情况。有关完整列表,请参阅 Kubernetes v
毕业花絮
此版本中有许多很酷的功能即将进入稳定状态,这让我们的技术社区非常兴奋。用他们自己的话说,以下是最受欢迎的标题。
作业跟踪(没有滞留的豆荚)已成为 GA
-
#3207 这太棒了,因为当你运行大量作业时,从历史上看,在删除 pod 之后,你会丢失有关任务完成的信息。删除 Pod 很重要,因为它们会消耗节点上的资源(即使未运行),并且会给 API 服务器增加更多负载以进行秘密监视。 - 此更新允许你删除 Pod,而不会丢失有关作业的数据。这对于使用
亚马逊云科技 Fargate 运行任务的客户来说尤其重要。如果他们在任务完成后不删除 Pod,那么 亚马逊云科技 Fargate 节点不会被移除。这意味着他们仍在为未使用的计算付费。建议使用垃圾回收功能 , 但从历史上看,这意味着他们无法查询已删除的 Pod 的任务状态。 - 要了解更多信息,请参阅
支持大规模并行批处理工作负载的 作业跟踪已正式上 线。
GA 对 Kubelet 凭证提供商的支持
-
#2133 这有助于简化对各种容器注册表的身份验证,并避免将机密存储为 Kubernetes 资源。这为向注册表进行身份验证时提供了更大的灵活性,并允许在 Kubernetes 资源管理和节点/注册表/安全管理之间进行所有权分离。 - 要了解更多信息,请参阅
GA 对 Kubelet 凭据提供者的支持 。
CPUManager 上线了
- CPU 管理器让工作负载可以更好地控制其 CPU 和性能要求。这对于可以根据可用性在 CPU 之间调度或移动工作负载的多插槽服务器非常重要。某些工作负载需要严格控制其 CPU 调度,以避免缓存丢失,或者使用主内存获得更高的带宽,并与 NUMA 调度在同一条总线上。
- 如果在执行期间不将图像渲染等高性能计算 (HPC) 工作负载重新调度到不同的 CPU,则可以更快地运行。
- 要了解更多信息,请参阅
CPUManager 上线。
在 type=LoadBalancer 的服务中支持混合协议
-
#1435 此功能允许创建具有不同端口定义和不同协议的负载平衡器服务。使用 亚马逊云科技 负载均衡器控制器 , 您可以创建暴露传输控制协议 (TCP) 和 用户数据报协议 (UDP) 的服务,前提是这两个端口不同。创建暴露相同端口和协议的服务,例如通过 TCP 和 UDP 打开端口 53 的域名系统 (DNS),目前不起作用。 - 要了解更多信息,请参阅
混合协议实验室 。
服务内部流量政策
-
#2086 允许对服务流量进行节点本地和拓扑感知路由。过去,路由到服务的内部流量是随机分配到所有端点的。使用服务内部流量策略,您可以创建始终将流量定向到在同一节点上运行的服务实例的服务。通过将流量保留在节点/可用区 (AZ) 的本地,您可以在提高性能的同时降低跨可用区的网络成本。 - 要了解更多信息,请参阅
服务内部流量政策 。
这绝不是在 Kubernetes v1.26 中升级为稳定版的最酷功能的详尽列表。有关完整列表,请参阅 “升级
Kubernetes 提示和技巧
我们的技术社区还有其他一些提示和技巧,可以帮助更轻松地升级到 Kubernetes v1.26。
提取所有 kubelet 设置
- kubelet 配置可以分布在多个文件中。这是一次提取所有 kubelet 设置的便捷方法。
- 代理命令启动代理服务器并在后台运行它。后续命令将 shell 变量设置为正在重新配置的节点的名称,然后使用 curl 使用在端口 8001 上运行的代理服务器从 Kubernetes API 服务器获取该节点的 kubelet 配置。然后,输出通过管道传送到 jq,jq 通过设置种类和 APiVersion 来修改配置。然后,更新后的配置可用于更新指定节点的 kubelet 配置。
支持终止
结论
在这篇文章中,我介绍了 Kubernetes 版本 1.26 中的主要变化,亚马逊云科技 社区重点介绍了一些令人兴奋的可用功能。请务必查看
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。