Kubernetes v1.29: 曼陀罗
作者: Kubernetes v1.29 发布团队[1]
编辑: Carol Valencia, Kristin Martin, Abigail McCarthy, James Quigley
宣布发布 Kubernetes v1.29: 曼陀罗 (宇宙) 版本,这是 2023 年的最后一个版本!
与之前的发布类似,Kubernetes v1.29 版本引入了新的稳定版(Stable)、测试版(Beta)和预览版(Alpha)功能。持续提供卓越的版本发布,凸显了我们的开发周期的强大和来自社区的活跃支持。
此版本包含 49 个增强功能。其中,11 个功能已经升级为稳定版,19 个功能进入测试版,还有 19 个功能升级为预览版。
发布主题和标识
Kubernetes v1.29: 曼陀罗 (宇宙) ✨🌌
加入我们与 Kubernetes v1.29 一起展开宇宙之旅吧!
此次发布受到了曼陀罗这一美丽艺术形式的启发,曼陀罗象征着完美的宇宙。我们由大约 40 名发布团队成员组成的紧密结合的宇宙,得到了数百名社区贡献者的支持,他们不知疲倦地为全球数百万人带来喜悦。
曼陀罗主题反映了我们社区的相互关联,这是由热情的爱好者和专家共同编织的生机勃勃的图景。每个贡献者都是至关重要的一部分,为项目增添了独特的能量,就像曼陀罗艺术中多样的图案一样。Kubernetes 靠合作蓬勃发展,回应了曼陀罗创作中的和谐。
这个标识,由Mario Jason Braganza[2](基于曼陀罗艺术,感谢Fibrel Ojalá[3]提供)制作,象征着 Kubernetes 项目及其所有人构成的小宇宙。
在曼陀罗的转化象征精神中,Kubernetes v1.29 庆祝了我们项目的发展。像 Kubernetes 宇宙中的星星一样,每个贡献者、用户和支持者都照亮了前行之路。我们共同创造了一个可能性的宇宙——一次次的发布。
在 Kubernetes v1.29 中升级为稳定版的改进
以下是一些在 v1.29 版本中已经升级为稳定版的改进。
ReadWriteOncePod 持久化卷访问模式 (SIG Storage)
在 Kubernetes 中,卷访问模式[4]是定义持久化存储如何被使用的方式。这些访问模式是持久化卷(PersistentVolumes,PVs)和持久化卷声明(PersistentVolumeClaims,PVCs)规范的一部分。在使用存储时,有不同的方法来建模存储的使用方式。例如,像网络文件共享这样的存储系统可以有许多用户同时读写数据。在其他情况下,也许每个人都可以读取数据,但不能写入。对于高度敏感的数据,也许只允许一个用户读取和写入数据,其他人不能。
在 v1.22 之前,Kubernetes 为 PVs 和 PVCs 提供了三种访问模式:
ReadWriteOnce – 一个节点可将卷挂载为读写 ReadOnlyMany – 多个节点可将卷挂载为只读 ReadWriteMany – 多个节点可将卷挂载为读写
ReadWriteOnce 访问模式限制了卷只能被单个节点访问,这意味着同一节点上的多个 Pod 可以从该卷读取和写入。对于某些应用程序来说,这可能是一个重大问题,特别是如果它们需要至多一个写入者来保证数据的安全性。
为了解决这个问题,在 v1.22 中引入了第四种访问模式 ReadWriteOncePod 作为 Alpha 功能,用于 CSI 卷。如果创建一个使用 ReadWriteOncePod 访问模式的 PVC 的 Pod,Kubernetes 会确保该 Pod 是整个集群中唯一能够读取该 PVC 或向其写入的 Pod。在 v1.29 中,此功能已经正式发布(Generally Available,GA)。
CSI 驱动程序的节点卷扩展密钥支持(SIG Storage)
在 Kubernetes 中,卷扩展操作可能涉及节点上卷的扩展,这涉及文件系统的调整大小。某些 CSI 驱动程序在节点扩展期间需要密钥,例如用于访问 SAN 网络的凭据,以满足以下用例:
当 PersistentVolume 表示加密块存储(例如使用 LUKS)时,你可能需要提供密码短语才能扩展设备。 为了进行各种验证,CSI 驱动程序在节点扩展时需要具有与后端存储系统通信的凭据。
为了满足这个要求,在 Kubernetes v1.25 中引入了 CSI 节点扩展密钥功能。这允许 CSI 驱动程序在 NodeExpandVolumeRequest 中发送一个可选的密钥字段,以便可以使用底层存储系统执行节点卷扩展操作。在 Kubernetes v1.29 中,此功能已经正式发布。
KMS v2 静态加密功能正式发布(SIG Auth)
在保护 Kubernetes 集群时,首先要考虑的是对持久化的 API 数据进行加密。KMS 提供了一个接口,供提供程序利用外部密钥服务中存储的密钥进行加密。随着 Kubernetes v1.29 的发布,KMS v2 成为稳定功能,带来了性能、密钥轮换、健康检查和状态以及可观察性方面的许多改进。这些增强功能为用户提供了可靠的解决方案,可以对其 Kubernetes 集群中的所有资源进行加密。你可以在KEP-3299[5]中了解更多信息。
建议使用 KMS v2。默认情况下,KMS v1 功能门已禁用。你需要选择继续使用它。
在 Kubernetes v1.29 中升级为测试版的改进
以下是在 v1.29 发布后升级为测试版的一些改进。
SchedulerQueueingHints
调度程序的吞吐量是我们永恒的挑战。这个 QueueingHint 功能为重新排队的效率优化带来了新的可能性,这可以显著减少无用的调度重试。
将节点生命周期与污点管理分离(SIG Scheduling)
正如标题所描述的,这是将基于污点的 Pod 驱逐执行的 TaintManager 与 NodeLifecycleController 解耦,并将它们变为两个独立的控制器:NodeLifecycleController 用于向不健康的节点添加污点,TaintManager 用于在具有 NoExecute 效果的节点上执行 Pod 删除。
清理旧版基于密钥的 ServiceAccount 令牌(SIG Auth)
Kubernetes 切换到使用更安全的服务帐户令牌,这些令牌具有时间限制,并且由 1.22 绑定到特定的 Pod。在 1.24 中停止自动生成旧版基于密钥的服务帐户令牌。然后在 1.27 中开始将仍在使用的剩余自动生成的基于密钥的令牌标记为其最后使用日期。
在 v1.29 中,为了减少潜在的攻击面,LegacyServiceAccountTokenCleanUp 功能将标记长时间未使用的旧版自动生成的基于密钥的令牌为无效(默认为 1 年),并在标记为无效后较长时间内未尝试使用时自动删除它们(默认为额外的 1 年)。KEP-2799[6]
新的 alpha 功能
使用 matchLabelKeys 定义 Pod 亲和性或反亲和性(SIG Scheduling)
将在 PodAffinity/PodAntiAffinity 中引入一项增强功能,作为 alpha 版本。它将提高滚动更新期间计算的准确性。
kube-proxy 的 nftables 后端(SIG Network)
Linux 上默认的 kube-proxy 实现目前基于 iptables。这是 Linux 内核中多年来(从 2001 年 2.4 内核开始)首选的数据包过滤和处理系统。然而,iptables 存在无法解决的问题,导致了后继者 nftables 的开发。iptables 的开发工作大多已经停止,新功能和性能改进主要集中在 nftables 中。
该功能在 kube-proxy 中添加了一个基于 nftables 的新后端,因为一些 Linux 发行版已经开始弃用和删除 iptables,并且 nftables 声称解决了 iptables 的主要性能问题。
用于管理服务的 IP 地址范围的 API(SIG Network)
服务是一种抽象方式,用于暴露运行在一组 Pod 上的应用程序。服务可以具有集群范围的虚拟 IP 地址,该地址是从 kube-apiserver 标志中预定义的 CIDR 中分配的。然而,用户可能希望在不必重新启动 kube-apiserver 的情况下添加、删除或调整为服务分配的现有 IP 范围。
该功能实现了一种新的分配逻辑,使用了两个新的 API 对象:ServiceCIDR 和 IPAddress,允许用户通过创建新的 ServiceCIDR 动态增加可用的服务 IP 数量。这有助于解决 IP 用尽或 IP 重新编号等问题。
为 containerd/kubelet/CRI 添加支持,以支持每个运行时类别进行镜像拉取(SIG Windows)
Kubernetes v1.29 添加了根据使用它们的 Pod 的 RuntimeClass 拉取容器镜像的支持。该功能在 v1.29 中默认关闭,使用名为 RuntimeClassInImageCriApi 的功能门进行控制。
容器镜像可以是清单或索引。当正在拉取的镜像是索引时(镜像索引具有按平台排序的镜像清单列表),容器运行时中的平台匹配逻辑用于从索引中拉取适当的镜像清单。默认情况下,平台匹配逻辑选择与执行镜像拉取的主机相匹配的清单。这对于基于虚拟机的容器来说可能是有限制的,用户可能拉取一个镜像,意图将其作为基于虚拟机的容器运行,例如 Windows Hyper-V 容器。
每个运行时类别的镜像拉取功能增加了根据指定的运行时类别拉取不同镜像的支持。这通过将镜像引用为(imageID,runtimeClass)的元组来实现,而不仅仅是 imageName 或 imageID。容器运行时可以选择添加对此功能的支持。如果他们不这样做,将保留 Kubernetes v1.29 之前存在的 kubelet 的默认行为。
Windows Pod 的原地更新资源(SIG Windows)
作为 alpha 功能,Kubernetes Pod 对于其资源是可变的,允许用户在不需要重新启动 Pod 的情况下更改 Pod 的期望资源请求和限制。从 v1.29 开始,此功能现在支持 Windows 容器。
Kubernetes v1.29 的升级、弃用和移除
升级到稳定版
以下是所有升级到稳定版(也称为普遍可用性)的功能列表。有关包括新功能和从 alpha 到 beta 的升级的完整更新列表,请参阅发布说明[7]。
此版本共有 11 个增强功能升级到稳定版:
从 KCCM 的服务控制器中删除临时节点谓词 为动态和静态分配保留节点端口范围 API 服务器请求的优先级和公平性 KMS v2 改进 支持从 Kubernetes API 中进行分页 LIST 查询 ReadWriteOncePod 持久卷访问模式 Kubernetes 组件健康的 SLI CRD 验证表达式语言 在 CSI 持久卷源中引入 nodeExpandSecret 在 Job 状态中跟踪 Ready Pods Kubelet 资源指标端点
弃用和移除
移除与云提供商的 in-tree 集成(SIG Cloud Provider)
Kubernetes v1.29 默认不使用内建的云提供商集成。如果你之前依赖于与 Azure、GCE 或 vSphere 的 in-tree 云提供商集成,你可以选择:
启用等效的外部云控制器管理器集成(推荐) 通过将关联的功能门设置为 false,重新启用旧版集成。需要更改的功能门是 DisableCloudProviders 和 DisableKubeletCloudCredentialProviders
启用外部云控制器管理器意味着你必须在集群的控制平面中运行一个合适的云控制器管理器;还需要为 kubelet(在每个相关节点上)和控制平面(kube-apiserver 和 kube-controller-manager)设置命令行参数--cloud-provider=external。
有关如何启用和运行外部云控制器管理器的详细信息,请阅读云控制器管理器管理[8]和迁移复制的控制平面以使用云控制器管理器[9]。
如果你需要旧版 in-tree 提供商的云控制器管理器,请参阅以下链接:
AWS 云提供商[10] Azure 云提供商[11] GCE 云提供商[12] OpenStack 云提供商[13] vSphere 云提供商[14]
有关详细信息,请参阅KEP-2395[15]。
删除 v1beta2 流量控制 API 组
在 Kubernetes v1.29 中,不再提供 FlowSchema 和 PriorityLevelConfiguration 的已弃用流量控制 API 版本 flowcontrol.apiserver.k8s.io/v1beta2。
如果你的清单或客户端软件使用了已弃用的 beta API 组,请在升级到 v1.29 之前进行更改。有关详细信息和建议,请参阅已弃用 API 迁移指南[16]。
废弃 Node 的 status.nodeInfo.kubeProxyVersion 字段
Node 对象的.status.kubeProxyVersion 字段现已被废弃,并且 Kubernetes 项目计划在未来的版本中删除该字段。已废弃的字段不准确,并且历史上由 kubelet 管理-实际上 kubelet 不知道 kube-proxy 的版本,甚至不知道 kube-proxy 是否在运行。
如果你在客户端软件中使用了此字段,请停止使用-该信息不可靠,并且该字段现已被废弃。
旧版 Linux 软件包存储库
请注意,2023 年 8 月,传统软件包存储库(apt.kubernetes.io 和 yum.kubernetes.io)已正式废弃,并且 Kubernetes 项目宣布了 Debian 和 RPM 软件包的社区拥有的软件包存储库的普遍可用性,可在https://pkgs.k8s.io上获取。
这些旧版存储库已在 2023 年 9 月冻结,并将在 2024 年 1 月完全消失。如果你目前依赖于它们,你必须进行迁移。
此弃用与 v1.29 版本的发布没有直接关系。有关更多详细信息,包括这些变更对你的影响以及如果受影响应该怎么做,请阅读旧版软件包存储库弃用公告[17]。
发布说明
请查看我们的发布说明[18],了解 Kubernetes v1.29 版本的详细信息。
下载
Kubernetes v1.29 可以在GitHub[19]上下载。要开始使用 Kubernetes,请查看这些互动教程[20]或使用minikube[21]在本地运行 Kubernetes 集群。你还可以使用kubeadm[22]轻松安装 v1.29。
发布团队
Kubernetes 的实现离不开社区的支持、承诺和辛勤工作。每个发布团队都由专注于共同构建 Kubernetes 版本的社区志愿者组成。这需要社区各个角落的人才,从代码本身到文档和项目管理。
我们要感谢整个发布团队[23]为我们的社区付出的辛勤努力。特别感谢我们的发布负责人Priyanka Saggu[24],在成功的发布周期中给予我们支持和指导,确保我们能够以最佳方式贡献,并挑战我们改进发布流程。
项目速度
CNCF K8s DevStats 项目汇总了与 Kubernetes 及其各个子项目的速度相关的许多有趣数据。这包括从个人贡献到参与的公司数量,展示了推动这个生态系统发展所做的努力的深度和广度。
在为期 14 周[25](2023 年 9 月 6 日至 12 月 13 日)的 v1.29 发布周期中,我们收到了来自888 家公司[26]和1422 名个人[27]的贡献。
生态系统更新
KubeCon + CloudNativeCon Europe 2024 将于 2024 年 3 月 19 日至 22 日在法国巴黎举行!你可以在活动网站[28]上找到有关会议和注册的更多信息。
即将举行的发布网络研讨会
请于 2023 年 12 月 15 日星期五上午 11 点(东部时间下午 2 点)加入 Kubernetes v1.29 发布团队成员,了解此版本的主要功能以及废弃和移除的内容,以便为升级进行计划。有关更多信息和注册,请访问 CNCF 在线项目网站上的活动页面[29]。
参与其中
加入与你的兴趣相吻合的众多特别兴趣小组[30](SIGs)是参与 Kubernetes 的最简单方式。你有想要向 Kubernetes 社区传达的信息吗?在我们的每周社区会议[31]上分享你的声音,并通过以下渠道进行交流。感谢你持续的反馈和支持。
在 Twitter 上关注我们的最新动态@Kubernetesio[32] 在讨论区[33]加入社区讨论 在Slack[34]上加入社区 在Stack Overflow[35]上提出问题(或回答问题) 分享你的 Kubernetes故事[36] 在博客[37]上了解有关 Kubernetes 的更多信息 详细了解Kubernetes 发布团队[38]的情况
参考资料
Kubernetes v1.29 发布团队: https://github.com/kubernetes/sig-release/blob/master/releases/release-1.29/release-team.md
[2]Mario Jason Braganza: https://janusworx.com/
[3]Fibrel Ojalá: https://pixabay.com/users/fibrel-3502541/
[4]访问模式: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
[5]KEP-3299: https://kep.k8s.io/3299
[6]KEP-2799: https://kep.k8s.io/2799
[7]发布说明: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.29.md
[8]云控制器管理器管理: https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/
[9]迁移复制的控制平面以使用云控制器管理器: https://kubernetes.io/docs/tasks/administer-cluster/controller-manager-leader-migration/
[10]AWS 云提供商: https://github.com/kubernetes/cloud-provider-aws
[11]Azure 云提供商: https://github.com/kubernetes-sigs/cloud-provider-azure
[12]GCE 云提供商: https://github.com/kubernetes/cloud-provider-gcp
[13]OpenStack 云提供商: https://github.com/kubernetes/cloud-provider-openstack
[14]vSphere 云提供商: https://github.com/kubernetes/cloud-provider-vsphere
[15]KEP-2395: https://kep.k8s.io/2395
[16]已弃用 API 迁移指南: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-29
[17]旧版软件包存储库弃用公告: https://kubernetes.io/blog/2023/08/31/legacy-package-repository-deprecation/
[18]发布说明: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.29.md
[19]GitHub: https://github.com/kubernetes/kubernetes/releases/tag/v1.29.0
[20]互动教程: https://kubernetes.io/docs/tutorials
[21]minikube: https://minikube.sigs.k8s.io/
[22]kubeadm: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm
[23]发布团队: https://github.com/kubernetes/sig-release/blob/master/releases/release-1.29/release-team.md
[24]Priyanka Saggu: https://github.com/Priyankasaggu11929
[25]为期 14 周: https://github.com/kubernetes/sig-release/tree/master/releases/release-1.29
[26]888 家公司: https://k8s.devstats.cncf.io/d/9/companies-table?orgId=1&var-period_name=v1.28.0%20-%20now&var-metric=contributions
[27]1422 名个人: https://k8s.devstats.cncf.io/d/66/developer-activity-counts-by-companies?orgId=1&var-period_name=v1.28.0%20-%20now&var-metric=contributions&var-repogroup_name=Kubernetes&var-repo_name=kubernetes%2Fkubernetes&var-country_name=All&var-companies=All
[28]活动网站: https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/
[29]活动页面: https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-live-webinar-kubernetes-129-release/
[30]特别兴趣小组: https://github.com/kubernetes/community/blob/master/sig-list.md
[31]社区会议: https://github.com/kubernetes/community/tree/master/communication
[32]@Kubernetesio: https://twitter.com/kubernetesio
[33]讨论区: https://discuss.kubernetes.io/
[34]Slack: http://slack.k8s.io/
[35]Stack Overflow: http://stackoverflow.com/questions/tagged/kubernetes
[36]故事: https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform
[37]博客: https://kubernetes.io/blog/
[38]Kubernetes 发布团队: https://github.com/kubernetes/sig-release/tree/master/release-team
点击【阅读原文】阅读网站原文。
CNCF概况(幻灯片)
扫描二维码联系我们!
CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请关注CNCF微信公众号。