Redian新闻
>
今年第一个版本 Kubernetes 1.27,发布啦!

今年第一个版本 Kubernetes 1.27,发布啦!

公众号新闻


Kubernetes v1.27 版本发布了,这是 2023 年的首个版本!

本次发布包含 60 项增强功能。其中 18 项增强功能处于 Alpha 阶段,29 项升级到 Beta 阶段,13 项升级到稳定阶段。

#01

版本主题与徽标

Kubernetes v1.27 的主题是轻松愉悦。

这有点儿可笑,但在这个版本中确实发生了一些重要的变化,这些变化激发了主题的灵感。在典型的 Kubernetes 发布周期中,有几个截止日期,特性需要在这些截止日期前完成,才能继续包含在版本中。

如果某个特性错过了这些截止日期,它们可以通过异常处理流程。处理这些异常是发布过程中非常正常的一部分。但 v1.27 是我们记忆中的第一次,在增强功能冻结后没有收到任何异常请求的版本。即使随着发布的推进,事情仍然比我们习惯的要平静得多。

我们这次能够享受到一个更加平静的发布,有一个具体的原因,那就是大家在幕后付出了很多努力来改进我们管理发布的方式。这个主题正是为了庆祝这一点,人们付出努力,为社区创造更好的环境。

特别感谢 Britnee Laverack 设计了这个 Logo。Britnee 还为 Kubernetes 1.24:Stargazer 设计了 Logo。

#02

核心主题

结 k8s.gcr.io 镜像仓库

用 registry.k8s.io 替换旧的镜像仓库 k8s.gcr.io,几个月前 registry.k8s.io 已经普遍可用了。Kubernetes 项目创建并运行 registry.k8s.io 镜像仓库,该仓库完全由社区控制。这意味着旧的仓库 k8s.gcr.io 将被冻结,Kubernetes 及其相关子项目的更多镜像将不再发布到旧仓库。

这项变更对贡献者意味着什么?

  • 如果你是一个子项目的维护者,你需要更新你的清单和 Helm 图表以使用新的仓库。有关更多信息,请查看:https://github.com/kubernetes-sigs/community-images

这项变更对终端用户意味着什么?

  • Kubernetes v1.27 版本将不会发布到 k8s.gcr.io 仓库。
  • 在 4 月之后,v1.24、v1.25 和 v1.26 的补丁版本将不再发布到旧仓库。
  • 从 v1.25 开始,默认的镜像仓库已设置为 registry.k8s.io。这个值在 kubeadm 和 kubelet 中是可覆盖的,但将其设置为 k8s.gcr.io 将在 4 月之后的新版本中失败,因为它们不会出现在旧仓库中。
  • 如果你希望提高集群的可靠性,消除对社区拥有的仓库的依赖,或者在限制外部流量的网络中运行 Kubernetes,你应该考虑托管本地镜像仓库镜像。一些云供应商可能会为此提供托管解决方案。

SeccompDefault 升级为稳定版

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

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

https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2413-seccomp-by-default

Job 可变调度指令升级为 GA

这在 v1.22 中引入,开始时为 beta 级别,现在已稳定。在大多数情况下,并行作业需要在约束条件下运行 Pod,例如在同一区域内的所有 Pod,或者所有 Pod 都在 GPU 模型 x 或 y 上运行,但不是两者的混合。suspend 字段是实现这些语义的第一步。suspend 允许自定义队列控制器决定 Job 何时开始。然而,一旦 Job 解除挂起,自定义队列控制器对 Job 的 Pod 实际降落位置没有影响。

此功能允许在 Job 开始前更新调度指令,这使得自定义队列控制器能够在将实际的 pod-to-node 分配卸载到 kube-scheduler 的同时,影响 Pod 的放置。这仅允许对从未解除挂起过的挂起 Job 进行。可以更新的 Job 的 Pod 模板中的字段包括 node affinity、node selector、tolerations、labels、annotations 和 scheduling gates。

在 KEP 中查看更多详细信息:

https://github.com/kubernetes/enhancements/tree/master/keps/sig-scheduling/2926-job-mutable-scheduling-directives

DownwardAPIHugePages 升级为稳定版

在 Kubernetes v1.20 中,向下 API 增加了对 requests.hugepages-<pagesize> 和 limits.hugepages-<pagesize> 的支持,使之与 CPU、内存和临时存储等其他资源保持一致。此功能在此版本中升级为稳定版。

你可以在 KEP 中查看更多详细信息:

https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2053-downward-api-hugepages

Pod Scheduling Readiness 升级为 beta 版

在创建后,Pod 就可以进行调度了。Kubernetes 调度器尽职尽责地查找节点以放置所有待定的 Pod。然而,在现实世界中,一些 Pod 可能长时间处于缺少关键资源的状态。这些 Pod 实际上以不必要的方式使调度器(以及下游集成器,如集群自动扩缩)不断变化。

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

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

通过 Kubernetes API 访问节点日志

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

集群管理员可以在其集群的所有节点或其中一部分节点上尝试这个 alpha 特性。

ReadWriteOncePod 持久卷访问模式升级为 beta

Kubernetes v1.22 为 PersistentVolumes(PVs)和 PersistentVolumeClaims(PVCs)引入了一种新的访问模式 ReadWriteOncePod。此访问模式使你能够将卷访问限制在群集中的单个 Pod 上,确保一次只有一个 Pod 可以写入卷。对于需要单写入器访问存储的有状态工作负载,这可能特别有用。

ReadWriteOncePod beta 版为使用 ReadWriteOncePod PVC 的 Pod 添加了调度器抢占支持。调度器抢占允许更高优先级的 Pod 抢占较低优先级的 Pod。例如,当一个具有 ReadWriteOncePod PVC 的 Pod(A)被调度时,如果发现另一个 Pod(B)使用相同的 PVC 且 Pod(A)具有更高的优先级,则调度器将返回一个不可调度状态并尝试抢占 Pod(B)。

有关更多背景信息,请参阅 KEP:

https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/2485-read-write-once-pod-pv-access-mode

滚动升级后遵循 PodTopologySpread 设置

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

使用 matchLabelKeys,用户无需在不同版本之间更新 pod.spec。控制器/操作员只需要为不同的版本为相同的标签键设置不同的值。调度器将根据 matchLabelKeys 自动确定值。例如,如果用户使用 Deployment,他们可以使用 Deployment 控制器自动添加的带有 pod-template-hash 键的标签,在单个 Deployment 中区分不同的版本。

使用挂载加快 SELinux 卷重新标记速度

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

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

如果 Kubernetes 知道 Pod 的 SELinux 标签,并且负责 Pod 卷的 CSI 驱动程序宣布 SELinuxMount: true,并且该卷具有访问模式 ReadWriteOncePod,那么它将要求 CSI 驱动程序使用挂载选项 context= 挂载卷,并告知容器运行时不要重新标记卷的内容(因为所有文件已经具有正确的标签)。

从KEP获取有关此内容的更多信息:

https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1710-selinux-relabeling

强大的 VolumeManager 重建升级为 beta

这是一个卷管理器重构,允许 kubelet 在启动过程中为现有卷的挂载方式提供更多信息。总的来说,这使得卷清理更加可靠。如果在节点上启用 NewVolumeManagerReconstruction 功能门,你将在 kubelet 启动过程中获得更强大的已挂载卷发现功能。

在 Kubernetes v1.25 之前,kubelet 在启动过程中发现已挂载卷时使用了不同的默认行为。如果禁用此功能门(默认启用),则选择旧版发现行为。

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

可变 Pod 调度指令升级为 beta

这允许在调度准备就绪门阻止的 Pod 上进行更受限制的节点亲和性/选择器突变。它提供了在允许调度 Pod 之前突变 Pod 调度指令的能力,并使外部资源控制器能够影响 Pod 放置,同时将实际的 Pod 到节点分配卸载给 kube-scheduler。

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

#03

Kubernetes v1.27 中的功能升级和弃用

升级到稳定版

此版本包括共计 9 个升级为稳定版的增强功能:

  • 默认容器注解,供 kubectl 使用
  • CronJob 中的时区支持
  • 公开表示 Pod 模型的资源请求和限制的指标
  • 服务器端未知字段验证
  • 节点拓扑管理器
  • 在 Pod.Spec.Container.{Liveness,Readiness,Startup} Probe 中添加 gRPC 探测
  • 为探测添加可配置的宽限期
  • OpenAPI v3
  • 继续使用受支持的 Go 版本

弃用和移除

此版本进行了一些移除操作:

  • 从 CSIStorageCapacity 中移除 storage.k8s.io/v1beta1
  • 移除对已弃用 seccomp 注解的支持
  • 移除 --master-service-namespace 命令行参数
  • 移除 ControllerManagerLeaderMigration 功能门(feature gate)
  • 移除 --enable-taint-manager 命令行参数
  • 移除 --pod-eviction-timeout 命令行参数
  • 移除 CSI 迁移功能门
  • 移除 CSIInlineVolume 功能门
  • 移除 EphemeralContainers 功能门
  • 移除 LocalStorageCapacityIsolation 功能门
  • 移除 NetworkPolicyEndPort 功能门
  • 移除 StatefulSetMinReadySeconds 功能门
  • 移除 IdentifyPodOS 功能门
  • 移除 DaemonSetUpdateSurge 功能门

#04

其他说明

发布说明

Kubernetes v1.27 发布的完整详细信息请看:

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.27.md

可用性

Kubernetes v1.27 可在 GitHub 上下载:

https://github.com/kubernetes/kubernetes/releases/tag/v1.27.0

你可以使用 minikube、kind 等工具运行本地 Kubernetes 集群。你还可以使用 kubeadm 轻松安装 v1.27。

- END -

链接:https://kubernetes.io/blog/2023/04/11/kubernetes-v1-27-release/

(版权归原作者所有,侵删)



微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Kubernetes Operator 最佳实践免费下载:技术人必看企业级Kubernetes战略方针如何逐步安装 Kubernetes(k8s)指标服务器 | Linux 中国揭秘 ChatGPT 背后的技术栈:OpenAI 如何将 Kubernetes 扩展到了 7500 个节点3个管理多 Kubernetes 集群实用工具破茧成蝶 - Serverless Kubernetes 的思考与征程(二)详解使用Dex实现Kubernetes身份验证RRC detection、CornerNet、M2Det、FOCS…你都掌握了吗?一文总结目标检测必备经典模型(三)小花猫,愣头愣脑周末厨房丨【印度Kulcha发面饼】Kulcha/Onion KulchaKubernetes 1.27发布,冻结了原有的镜像注册中心并提供Pod资源就地更新功能谷歌云推出配置管理仪表板,简化 Kubernetes 集群管理豪斯曼:《诗歌外编》: 第十首:喔,从今以后,在我的胸口学会云计算&Kunbernetes,这就够了如何使用Kubernetes实现应用程序的弹性伸缩为Kubernetes集群部署一个ChatGPT机器人「sealos」完成2000万元的天使轮和天使+轮融资,旨在打造以kubernetes为内核的云操作系统|早起看早期图解 Kubernetes Pod 是如何获取 IP 地址?Kubernetes 调查报告:配置不当可能导致安全问题豆瓣评分8.9!300页Kubernetes学习手册,全是核心知识!Kubernetes 上 Java 应用的最佳实践使用 Kubespray 安装 Kubernetes 集群 | Linux 中国一朵花儿的情人节从修复 Kubernetes 集群中,我学到了什么Kubernetes 如何保障容器可用性?一文介绍探针的使用No. 122 上海老风味之五十七 腌笃鲜(视频)钢琴协奏曲最美乐章(更新中)Kubernetes 中 Ceph、LINSTOR、Mayastor 和 Vitastor 存储性能对比硬核!Kubernetes 网络排错“狂飙”级指南,运维请收好一款利器 ,持续分析 Kubernetes 中服务的性能15 个 Kubernetes 最佳实践排障有用 | Docker 容器和 Kubernetes 退出码中文指南Medium的Kubernetes基础设施用 Tekton 在 Kubernetes 中编写你的第一条 CI/CD 流水线 | Linux 中国21道题帮你轻松拿捏 Kubernetes 面试
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。