本文已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不正确。

Kubernetes v1.27:轻松氛围

宣布发布 Kubernetes v1.27,这是 2023 年的第一个版本!

此版本包含 60 项增强功能。其中 18 项增强功能进入 Alpha 阶段,29 项升级为 Beta 阶段,13 项升级为稳定阶段。

Kubernetes v1.27:轻松氛围

Kubernetes v1.27 的主题是轻松氛围

这有点傻,但此版本中发生了一些重要的转变,激发了这个主题。在典型的 Kubernetes 发布周期中,功能需要满足几个截止日期才能继续包含在内。如果某个功能错过任何这些截止日期,则可以进行异常处理。处理这些异常是发布的非常正常的一部分。但是 v1.27 是任何人都能记住的第一个在增强功能冻结后没有收到任何异常请求的版本。即使随着发布的进行,情况也比我们任何人都习惯的要平静得多。

这次我们能够享受更平静的发布有一个具体的原因,那就是人们在幕后为改进我们管理发布的方式所做的所有工作。这就是这个主题所庆祝的,人们投入工作使社区变得更好。

特别感谢 Britnee Laverack 创建了徽标。Britnee 还为 Kubernetes 1.24:观星者 设计了徽标。

新功能(主要主题)

冻结 k8s.gcr.io 镜像注册表

将旧的镜像注册表 k8s.gcr.io 替换为 registry.k8s.io,该注册表已普遍可用数月。Kubernetes 项目创建并运行 registry.k8s.io 镜像注册表,该注册表完全由社区控制。这意味着旧注册表 k8s.gcr.io 将被冻结,Kubernetes 和相关子项目的进一步镜像将不会发布到旧注册表。

此更改对贡献者意味着什么?

  • 如果您是子项目的维护者,则需要更新您的清单和 Helm 图表以使用新注册表。有关更多信息,请查看 此项目

此更改对最终用户意味着什么?

  • Kubernetes v1.27 版本将不会发布到 k8s.gcr.io 注册表。

  • v1.24v1.25v1.26 的补丁版本在四月之后将不再发布到旧注册表。

  • 从 v1.25 开始,默认镜像注册表已设置为 registry.k8s.io。此值在 kubeadm 和 kubelet 中是可覆盖的,但将其设置为 k8s.gcr.io 将会在四月之后的新版本中失败,因为它们不会出现在旧注册表中。

  • 如果您想提高集群的可靠性并消除对社区拥有的注册表的依赖,或者您在外部流量受限的网络中运行 Kubernetes,则应考虑托管本地镜像注册表镜像。一些云供应商可能会为此提供托管解决方案。

SeccompDefault 升级为稳定版

要使用 seccomp 配置文件默认设置,您必须在每个要使用它的节点上启用 --seccomp-default 命令行标志来运行 kubelet。如果启用,kubelet 将默认使用 RuntimeDefault seccomp 配置文件,该配置文件由容器运行时定义,而不是使用 Unconfined(禁用 seccomp)模式。默认配置文件旨在提供一组强大的安全默认设置,同时保留工作负载的功能。默认配置文件在容器运行时及其发布版本之间可能有所不同。

您可以在相关的 Kubernetes 增强提案 (KEP) 中找到有关可能的升级和降级策略的详细信息:默认启用 seccomp

Jobs 的可变调度指令升级为 GA

此功能在 v1.22 中引入,最初为 Beta 级别,现在已稳定。在大多数情况下,并行作业会希望 Pod 在约束条件下运行,例如全部在同一区域中,或者全部在 GPU 型号 x 或 y 上,而不是两者混合。suspend 字段是实现这些语义的第一步。suspend 允许自定义队列控制器决定何时应启动作业。但是,一旦取消暂停作业,自定义队列控制器就无法影响作业的 Pod 实际落地位置。

此功能允许在作业启动之前更新作业的调度指令,这使自定义队列控制器能够影响 Pod 的放置,同时将实际的 Pod 到节点分配卸载到 kube-scheduler。这仅适用于之前从未取消暂停的已暂停作业。可以在作业的 Pod 模板中更新的字段是节点亲和性、节点选择器、容忍度、标签、注释和 调度门控。在 KEP 中找到更多详细信息:允许更新作业的调度指令

DownwardAPIHugePages 升级为稳定版

在 Kubernetes v1.20 中,为使 requests.hugepages-<pagesize>limits.hugepages-<pagesize> 与 cpu、内存和临时存储等其他资源保持一致,将对它们的 Downward API 的支持添加。此功能在此版本中升级为稳定版。您可以在 KEP 中找到更多详细信息:Downward API HugePages

Pod 调度就绪状态进入 Beta 阶段

创建后,Pod 可以进行调度。Kubernetes 调度程序会尽职尽责地查找放置所有待处理 Pod 的节点。但是,在实际情况下,某些 Pod 可能会长时间处于缺少必要资源状态。这些 Pod 实际上会以不必要的方式搅动调度程序(以及下游集成商,例如 Cluster Autoscaler)。

通过指定/删除 Pod 的 .spec.schedulingGates,您可以控制何时将 Pod 视为可以进行调度。

schedulingGates 字段包含一个字符串列表,每个字符串字面量都被视为一个条件,必须满足该条件才能将 Pod 视为可调度。此字段只能在创建 Pod 时初始化(由客户端初始化,或在准入期间进行修改)。创建后,可以按任意顺序删除每个 schedulingGate,但不允许添加新的调度门控。

通过 Kubernetes API 访问节点日志

此功能允许集群管理员通过查询服务日志来调试节点上运行的服务的问题。要使用此功能,请确保在该节点上启用了 NodeLogQuery 功能门控,并且 kubelet 配置选项 enableSystemLogHandlerenableSystemLogQuery 都设置为 true。在 Linux 上,我们假设服务日志通过 journald 可用。在 Windows 上,我们假设服务日志在应用程序日志提供程序中可用。您还可以分别从 Linux 和 Windows 上的 /var/log/C:\var\log 目录中获取日志。

集群管理员可以在其集群的所有节点或其中一部分节点上试用此 alpha 功能。

ReadWriteOncePod PersistentVolume 访问模式进入 Beta 阶段

Kubernetes v1.22PersistentVolumes (PV) 和 PersistentVolumeClaims (PVC) 引入了一种新的访问模式 ReadWriteOncePod。此访问模式允许您将卷访问限制为集群中的单个 Pod,从而确保一次只有一个 Pod 可以写入该卷。这对于需要对存储进行单写访问的有状态工作负载特别有用。

ReadWriteOncePod Beta 添加了对使用 ReadWriteOncePod PVC 的 Pod 的 调度程序抢占的支持。调度程序抢占允许更高优先级的 Pod 抢占更低优先级的 Pod。例如,当调度具有 ReadWriteOncePod PVC 的 Pod (A) 时,如果发现另一个 Pod (B) 使用相同的 PVC,并且 Pod (A) 具有更高的优先级,则调度程序将返回 Unschedulable 状态并尝试抢占 Pod (B)。有关更多背景信息,请参见 KEP:ReadWriteOncePod PersistentVolume AccessMode

在滚动升级后遵守 PodTopologySpread

matchLabelKeys 是用于选择将在其上计算分布的 Pod 的 Pod 标签键列表。这些键用于从 Pod 标签中查找值。这些键值标签与 labelSelector 进行 AND 运算,以选择现有 Pod 组,将在该组上计算传入 Pod 的分布。Pod 标签中不存在的键将被忽略。空列表或 null 列表表示仅与 labelSelector 匹配。

使用 matchLabelKeys,用户无需在不同的修订版本之间更新 pod.spec。控制器/操作员只需为不同修订版本的同一 label 键设置不同的值即可。调度程序将根据 matchLabelKeys 自动采用这些值。例如,如果用户使用 Deployment,则可以使用以 pod-template-hash 为键的标签,Deployment 控制器会自动添加该标签,以区分单个 Deployment 中的不同修订版本。

使用挂载更快地进行 SELinux 卷重新标记

在此版本中,SELinux 标签如何应用于 Pod 使用的卷正在升级到 Beta 版。此功能通过使用正确的 SELinux 标签挂载卷来加快容器启动速度,而不是递归地更改卷上的每个文件。支持 SELinux 的 Linux 内核允许使用 -o context= 挂载选项在整个卷上设置 SELinux 标签。这样,所有文件都将在恒定时间内分配给定的标签,而无需递归遍历整个卷。

context 挂载选项不能应用于已挂载的卷的绑定挂载或重新挂载。对于 CSI 存储,CSI 驱动程序会进行卷的首次挂载,因此必须由 CSI 驱动程序实际应用此挂载选项。我们在 CSIDriver 对象中添加了一个新的字段 SELinuxMount,以便驱动程序可以声明它们是否支持 -o context 挂载选项。

如果 Kubernetes 知道 Pod 的 SELinux 标签并且负责 Pod 卷的 CSI 驱动程序声明 SELinuxMount: true并且卷的访问模式为 ReadWriteOncePod,则它将要求 CSI 驱动程序使用挂载选项 context= 挂载卷并且它将告知容器运行时不要重新标记卷的内容(因为所有文件都已经具有正确的标签)。从 KEP 获取有关此的更多信息:使用挂载加速 SELinux 卷重新标记

健壮的 VolumeManager 重构进入 Beta 阶段

这是一个卷管理器重构,允许 kubelet 在 kubelet 启动期间填充有关现有卷如何挂载的额外信息。总的来说,这使得卷清理更加健壮。如果在节点上启用 NewVolumeManagerReconstruction 功能门,您将在 kubelet 启动期间获得增强的已挂载卷发现能力。

在 Kubernetes v1.25 之前,kubelet 在 kubelet 启动期间使用不同的默认行为来发现已挂载的卷。如果禁用此功能门(默认情况下启用),则选择旧的发现行为。

在 Kubernetes v1.25 和 v1.26 中,此行为切换是 SELinuxMountReadWriteOncePod 功能门的一部分。

可变 Pod 调度指令进入 Beta 阶段

这允许使用更受约束的节点亲和性/选择器来改变被调度就绪门阻塞的 Pod。它能够在允许调度之前更改 Pod 的调度指令,并使外部资源控制器能够在将实际的 Pod 到节点分配卸载到 kube-scheduler 的同时,影响 Pod 的放置。

这为 Kubernetes 添加调度功能的新模式打开了大门。具体来说,构建轻量级调度器来实现 kube-scheduler 不支持的功能,同时依赖现有的 kube-scheduler 来支持所有上游功能并处理 Pod 到节点的绑定。如果自定义功能不需要实现调度插件,则应首选此模式,因为实现调度插件需要重新构建和维护自定义的 kube-scheduler 二进制文件。

Kubernetes v1.27 中的功能毕业和弃用

毕业到稳定版

此版本总共包括 9 项增强功能升级为稳定版

弃用和删除

此版本进行了一些删除

发行说明

Kubernetes v1.27 版本的完整详细信息可在我们的发行说明中找到。

可用性

Kubernetes v1.27 可在 GitHub 上下载。要开始使用 Kubernetes,您可以使用 minikubekind 等运行本地 Kubernetes 集群。您还可以使用 kubeadm 轻松安装 v1.27。

发布团队

只有社区的支持、承诺和辛勤工作,Kubernetes 才能实现。每个发布团队都由敬业的社区志愿者组成,他们共同构建构成您依赖的 Kubernetes 版本的许多部分。这需要我们社区各个角落的具有专业技能的人员,从代码本身到文档和项目管理。

特别感谢我们的发布负责人 Xander Grzywinski,他指导我们完成了平稳而成功的发布周期,并感谢所有发布团队成员互相支持,并为社区辛勤工作以推出 v1.27 版本。

生态系统更新

  • KubeCon + CloudNativeCon Europe 2023 将于 2023 年 4 月 17 日至 21 日在荷兰阿姆斯特丹举行!您可以在活动网站上找到有关会议和注册的更多信息。
  • cdCon + GitOpsCon 将于 2023 年 5 月 8 日和 9 日在加拿大温哥华举行!有关会议和注册的更多信息,请访问活动网站

项目速度

CNCF K8s DevStats 项目汇总了许多与 Kubernetes 和各种子项目的速度相关的有趣数据点。这包括从个人贡献到贡献的公司数量的所有内容,并且说明了为发展该生态系统所付出的努力的深度和广度。

在 v1.27 发布周期中,持续了 14 周(1 月 9 日至 4 月 11 日),我们看到了来自1020 家公司1603 位个人的贡献。

即将发布的版本网络研讨会

加入 Kubernetes v1.27 发布团队成员于 2023 年 4 月 14 日星期五太平洋时间上午 10 点,了解此版本的主要功能,以及有助于规划升级的弃用和删除。有关更多信息和注册,请访问 CNCF 在线程序站点上的活动页面

参与其中

参与 Kubernetes 的最简单方法是加入与您的兴趣相符的众多特殊兴趣小组 (SIG) 之一。

有什么想向 Kubernetes 社区广播的吗?在我们的每周社区会议上以及通过以下渠道分享您的声音