您当前的位置:首页 > 电脑百科 > 数据库 > 百科

Kubernetes 1.28发布,包含45项增强功能!

时间:2023-08-22 15:30:08  来源:dbaplus社群  作者:

Kube.NETes v1.28 正式发布了,这是 2023 年的第二个版本。该版本包含 45 项增强功能。其中,19 项进入 Alpha 阶段,14 项升级到 Beta 阶段,12 项升级到稳定版。

一、版本主题和徽标

Kubernetes v1.28 的主题是 Planternetes。

下面是 Kubernetes 1.28 的徽标。

每一次 Kubernetes 的版本发布,都代表着我们社区中成千上万人的共同努力与成果。参与此次发布的人员背景各异,有的是行业资深人士,有的是家长,还有的是学生或是开源领域的新手。我们汇集了各自的经验与专长,共同打造了这一具有全球影响力的产品。

这像一个花园,我们的发布像其生长中的植物一样,经历了各种变化、挑战和机遇。此次的主题就是为了纪念我们付出的精心照料、决心和努力,证明我们和谐共生,共同成长。

二、新功能(主要主题)

1.支持的控制平面和节点版本间的差异进行了调整

这次更新允许测试并扩展核心节点和控制平面组件间的支持版本差异,从之前的 n-2 版本扩展至 n-3 版本。这意味着,受支持的最早的小版本中的节点组件(如 kubelet 和 kube-proxy)可以与最新受支持的小版本的控制平面组件(如 kube-apiserver、kube-scheduler、kube-controller-manager、cloud-controller-manager)协同工作。

这对终端用户很有价值,因为控制平面升级比节点升级要快一些,而节点升级几乎总是要比运行中的工作负载升级时间更长。

Kubernetes 已经提供了年度支持期,用户可以随时升级到最新的补丁版本以修复安全问题,每年还可以连续进行 3 次小版本的升级,以便与最新支持的小版本保持同步。

但当前的问题是,节点与控制平面之间经过测试并支持的版本偏差限制在两个版本,这意味着三个版本的升级将需要两次更新节点,以保证保持在受支持的版本偏差范围内。

2.GA:从非正常节点关闭中恢复

如果节点意外关闭或最终处于不可恢复的状态(可能是由于硬件故障或操作系统反应迟钝),Kubernetes 允许你进行事后清理,并允许有状态的工作负载在不同的节点上重新启动。对于 Kubernetes v1.28,这是一项稳定的功能。

这意味着,当原始节点被关闭或遭遇如硬件故障或系统损坏的非可恢复状态时,状态性工作负载可以成功地切换到另一个节点。

Kubernetes v1.20 之前的版本缺乏对 linux 上节点关闭的处理,而 kubelet 集成了 systemd 并实现了优雅的节点关闭(beta 版,默认已启用)。不过,即使是有意关闭,也可能无法得到很好的处理,这可能是因为:

  • 节点运行 windows
  • 节点运行 Linux,但使用不同的启动程序(非 systemd)
  • 关机没有触发系统抑制锁机制
  • 节点级配置错误(如未为 shutdownGracePeriod 和 shutdownGracePeriodCriticalPods 设置适当的值)。

当节点关闭或发生故障,而 kubelet 又未检测到该节点关闭时,作为 StatefulSet 一部分的 Pod 将停留在关闭节点上的终止状态。如果停止的节点重新启动,该节点上的 kubelet 可以清理(DELETE)Kubernetes API 仍然认为与该节点绑定的 Pod。

但是,如果节点一直处于停止状态,或者 kubelet 在重启后无法启动,那么 Kubernetes 可能无法创建替代 Pod。当关闭节点上的 kubelet 无法删除旧的 Pod 时,相关的 StatefulSet 就无法创建新的 Pod(名称相同)。

存储方面也有问题。如果有 Pod 使用的卷,现有的 VolumeAttachments 不会与原始节点(现已关闭)分离,因此这些 Pod 使用的 PersistentVolumes 无法连接到其他健康的节点。因此,在受影响的 StatefulSet 上运行的应用程序可能无法正常运行。

如果原来关闭的节点恢复运行,那么它们的 Pod 将被其 kubelet 删除,新的 Pod 可以在不同的运行节点上创建。如果原始节点没有启动(这在不可变的基础设施设计中很常见),这些 Pod 将永远停留在关闭节点上的 “终止” 状态。

有关如何在非顺利节点关闭后触发清理的详细信息,请阅读:

https://kubernetes.io/docs/concepts/architecture/nodes/#non-graceful-node-shutdown

3.改进 CustomResourceDefinition 验证规则

通用表达式语言(CEL)可用于验证自定义资源。其主要目标是允许大多数验证用例,而这些用例曾经可能需要你作为自定义资源定义(CRD)的作者来设计和实现 webhook。取而代之的是,作为一个 beta 功能,你可以将验证表达式直接添加到 CRD 的模式中。

直接支持复杂验证对于 CRD 来说是必要的。尽管接纳 webhooks 支持 CRD 验证,但它们使 CRD 的开发和操作变得相对复杂。

在 1.28 中,添加了两个可选字段 reason 和 fieldPath,用户可以指定失败的原因和字段路径。

更多信息,请阅读:

https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation-rules

4.ValidatingAdmissionPolicies 升级到测试版

用于入场控制的通用表达式语言是对 Kubernetes API 服务器请求的可定制、进程内验证,可替代验证入场 webhooks。

为入场控制的通用表达式语言提供了一种定制化的、内置的请求验证方法,这是对验证入场 webhooks 的一个替代方案。

该功能建立在 1.25 版升级到测试版的 CRD 验证规则功能的基础上,但侧重于验证入场控制的策略执行功能。

这将降低执行可定制策略的基础架构障碍,并提供有助于社区建立和遵守 Kubernetes 及其扩展的最佳实践的原语。

要使用 ValidatingAdmissionPolicies,你需要启用集群控制平面中的 admissionregistration.k8s.io/v1beta1 API 组和ValidatingAdmissionPolicy 功能门。

5.接纳 webhook 的匹配条件

Kubernetes v1.27 版允许你为入场 webhooks 指定匹配条件,这让你可以缩小 Kubernetes 在入场时进行远程 HTTP 调用的范围。ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 的 matchCondition 字段是一个 CEL 表达式,其值必须为 “true”,接纳请求才会发送到 Webhook。

在 Kubernetes v1.28 中,该字段被移至 beta 版,并且默认启用。

要了解更多信息,请参阅:

https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-matchconditions

6.Beta 版支持在 Linux 上启用交换空间

这将以可控、可预测的方式为节点添加交换支持,以便 Kubernetes 用户可以执行测试并提供数据,继续在交换基础上构建集群功能。

交换有两种不同类型的用户,他们可能会重叠:

  • 节点管理员,他们可能希望交换能用于节点级性能调整和稳定性 / 减少嘈杂邻居问题。
  • 应用开发人员,他们编写的应用程序将从使用交换内存中受益。

7.混合版本代理(alpha)

当一个集群拥有多个混合版本的 API 服务器时(例如在升级/降级期间,或运行时配置发生变化和部署发生时),并非每个 apiserver 都能为每个版本的每个资源提供服务。

对于 Kubernetes v1.28,可以在 API 服务器的聚合层中启用混合版本代理。混合版本代理会查找本地 API 服务器无法识别、但控制平面内的另一个 API 服务器能够支持的请求。找到合适的对等程序后,聚合层会将请求代理到兼容的 API 服务器;从客户端的角度来看,这是透明的。

在集群上执行升级或降级时,控制平面内的 API 服务器可能会在一段时间内处于不同的版本;当这种情况发生时,API 服务器的不同子集能够为不同的内置资源集提供服务(不同的组、版本和资源都是可能的)。这种新的 alpha 功能可以帮助你向客户端隐藏这种偏差。

8.控制平面组件的源代码重组

Kubernetes 的贡献者们已经开始重组 kube-apiserver 的代码,以建立一个新的暂存仓库,该仓库消耗 k/apiserver,但拥有更大的、精心挑选的 kube-apiserver 功能子集,从而使其可以重用。

这是一个循序渐进的重组过程;最终会有一个新的 Git 仓库,其通用功能将从 Kubernetes 的 API 服务器中抽象出来。

9.支持将 CDI 注入容器(alpha)

CDI 提供了将复杂设备注入容器的标准化方式(即逻辑上需要注入不止一个 /dev 节点才能工作的设备)。这一新特性使插件开发人员能够利用 1.27 版中添加到 CRI 的 CDIDevices 字段,将 CDI 设备直接传递给启用了 CDI 的运行时(如 contAInerd 和 crio-o 的最新版本)。

10.Sidecar 容器的 API 感知(alpha)

Kubernetes 1.28 为 init 容器引入了一个 alpha restartPolicy 字段,并用它来指示 init 容器何时也是 Sidecar 容器。它将按照定义的顺序与其他 init 容器一起启动,并设定 restartPolicy 为 Always。kubelet 会在启动 Pod 的主容器前仅等待 Sidecar init 容器启动。

启动完成的条件是启动探针成功(或未定义启动探针)且 postStart 处理程序已完成。该条件用 ContainerStatus 类型的字段 Started 表示。

对于 init 容器,可以省略重启策略字段,或将其设置为 Always。省略该字段意味着你想要一个真正的 init 容器,在应用启动前完成。

Sidecar 容器不会阻止 Pod 的完成:如果所有常规容器都已完成,该 Pod 中的 Sidecar 容器也将终止。

对于 Sidecar 容器,重启行为比 init 容器更复杂。在重启策略设置为 Never 的 Pod 中,在 Pod 启动过程中失败的 Sidecar 容器不会被重启,整个 Pod 将被视为失败。如果 Pod 的 restartPolicy 是 Always 或 OnFailure,则会重试启动失败的 Sidecar 容器。

一旦 Sidecar 容器启动(进程正在运行、postStart 成功且任何配置的启动探针都已通过),然后出现故障,即使 Pod 的整体重启策略为 Never 或 OnFailure,Sidecar 容器也会重新启动。此外,即使在 Pod 终止期间,也会重启(在失败或正常退出时)Sidecar 容器。

要了解更多信息,请阅读:

https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#api-for-sidecar-containers

11.自动、追溯性地为默认的 StorageClass 赋值现已稳定

如果没有提供值,Kubernetes 会自动为 PersistentVolumeClaim (PVC) 设置一个 StorageClassName。对于那些没有定义 storageClassName 的现有 PVC,控制平面也会自动设置一个 StorageClass。Kubernetes 以前的版本也有这种行为;Kubernetes v1.28 则是自动的,并且始终处于激活状态;该功能已升级到稳定版(一般可用性)。

要了解更多信息,请阅读:

https://kubernetes.io/docs/concepts/storage/storage-classes/

12.Job 的 Pod 替换策略(alpha)

Kubernetes 1.28 为作业 API 添加了一个新字段,允许你指定是希望控制平面在之前的 Pod 开始终止时立即创建新 Pod(现有行为),还是仅在现有 Pod 完全终止时才创建新 Pod(新的可选行为)。

许多常见的机器学习框架(如 Tensorflow 和 JAX)都要求每个索引有唯一的 Pod。在旧的行为中,如果属于索引 Job 的 Pod 进入终止状态(由于抢占、驱逐或其他外部因素),会创建一个替换 Pod,但由于与尚未关闭的旧 Pod 冲突,替换 Pod 会立即无法启动。

在前一个 Pod 完全终止之前出现一个替代 Pod,也会给资源稀缺或预算紧张的集群带来问题。这些资源可能很难获得,因此只有在现有 Pod 终止后,Pod 才能找到节点。如果启用了群集自动分级器,提前创建替代 Pod 可能会产生不希望的扩展。

要了解更多信息,请阅读:

https://kubernetes.io/docs/concepts/workloads/controllers/job/#delayed-creation-of-replacement-pods

13.每个索引的 Job 重试后退限制(alpha)

此功能扩展了 Job API,支持索引任务,在索引 Job 中,重试限制是按索引计算的,Job 可以在部分索引失败的情况下继续执行。

目前,索引 Job 的索引共享一个延迟限制。当作业达到这个共享的延迟限制时,作业控制器会将整个作业标记为失败,并清理资源,包括尚未运行完成的索引。

因此,现有的实现并没有涵盖这种情况,即工作负载真正地令人尴尬地并行:每个索引都完全独立于其他索引。

例如,如果索引 Job 被用作一套长期运行的集成测试的基础,那么每次测试运行只能发现一个测试失败。

更多信息,请阅读:

https://kubernetes.io/docs/concepts/workloads/controllers/job/#handling-pod-and-container-failures

14.没有 cAdvisor 的 CRI 容器和 Pod 统计信息

这包括两项相关工作(修改 kubelet 的 /metrics/cadvisor 端点和改进替换摘要 API)。

消费者主要使用两个 API 来收集有关正在运行的容器和 Pod 的统计数据:summary API 和 /metrics/cadvisor。Kubelet 负责实现 summary API,cAdvisor 负责实现 /metrics/cadvisor。

这增强了 CRI 实现,使其能够满足 Kubernetes 的所有统计需求。从高层次来看,这有两个部分:

  • 它增强了 CRI API,为其提供了足够的指标,以便直接从 CRI 补充摘要 API 中的 Pod 和容器字段。
  • 增强 CRI 实现,以广播所需的指标,从而满足 /metrics/cadvisor 端点中 Pod 和容器字段的要求。

三、Kubernetes v1.28 中的功能升级和弃用

1.升级到稳定版

该版本共包含 12 项升级到稳定版的增强功能:

  • kubectl 事件
  • 追溯默认 StorageClass 分配
  • 非正常关闭节点
  • 支持第三方设备监控插件
  • 获取自用户属性的 Auth API
  • 代理终止端点
  • 扩展 DNS 配置
  • 清理 IPTables 链所有权
  • 最小化 iptables-restore 输入大小
  • 将 kubelet pod 资源端点升级为 GA
  • 扩展 podresources API 以报告可分配资源
  • 将 EndpointSlice Reconciler 移入暂存阶段

2.停用和删除

1)删除:

  • 移除针对 GCE PD 的 CSI 迁移

2)停用:

  • Ceph RBD 内部插件
  • Ceph FS 内部插件

下载链接:

https://Github.com/kubernetes/kubernetes/releases/tag/v1.28.0

作者丨Kubernetes v1.28 Release Team

编译丨分布式实验室(ID:DistributedLab)

来源丨https://kubernetes.io/blog/2023/08/15/kubernetes-v1-28-release/

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn



Tags:Kubernetes   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  Search: Kubernetes  点击:(6)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  Search: Kubernetes  点击:(12)  评论:(0)  加入收藏
聊聊 Kubernetes 网络模型综合指南
这篇详细的博文探讨了 Kubernetes 网络的复杂性,提供了关于如何在容器化环境中确保高效和安全通信的见解。译自Navigating the Network: A Comprehensive Guide to Kubernete...【详细内容】
2024-02-19  Search: Kubernetes  点击:(37)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01  Search: Kubernetes  点击:(154)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  Search: Kubernetes  点击:(50)  评论:(0)  加入收藏
Kubernetes Informer基本原理,你明白了吗?
本文分析 k8s controller 中 informer 启动的基本流程不论是 k8s 自身组件,还是自己编写 controller,都需要通过 apiserver 监听 etcd 事件来完成自己的控制循环逻辑。如何高...【详细内容】
2024-01-30  Search: Kubernetes  点击:(37)  评论:(0)  加入收藏
Kubernetes 100个常用命令!
这篇文章是关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令,这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于:• 集...【详细内容】
2024-01-03  Search: Kubernetes  点击:(76)  评论:(0)  加入收藏
一文读懂Kubernetes部署策略
在这篇文章中,我们将深入研究 Kubernetes 部署概念和一些常见策略,了解每种策略的优缺点。合适的部署策略使我们能够在发布应用程序时最大限度地减少停机时间、增强客户体验并...【详细内容】
2024-01-03  Search: Kubernetes  点击:(59)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  Search: Kubernetes  点击:(114)  评论:(0)  加入收藏
如何基于Kubernetes运行Nacos高可用集群
Nacos(Namings and Configuration Management)是阿里巴巴开源的一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台。以下是Nacos的一些主要功能和特点: 服务发现...【详细内容】
2023-12-18  Search: Kubernetes  点击:(69)  评论:(0)  加入收藏
▌简易百科推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  京东云开发者    Tags:向量数据库   点击:(4)  评论:(0)  加入收藏
原来 SQL 函数是可以内联的!
介绍在某些情况下,SQL 函数(即指定LANGUAGE SQL)会将其函数体内联到调用它的查询中,而不是直接调用。这可以带来显著的性能提升,因为函数体可以暴露给调用查询的规划器,从而规划器...【详细内容】
2024-04-03  红石PG  微信公众号  Tags:SQL 函数   点击:(3)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28    51CTO  Tags:NoSQL   点击:(13)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  dbaplus社群    Tags:数据库连接池   点击:(12)  评论:(0)  加入收藏
八个常见的数据可视化错误以及如何避免它们
在当今以数据驱动为主导的世界里,清晰且具有洞察力的数据可视化至关重要。然而,在创建数据可视化时很容易犯错误,这可能导致对数据的错误解读。本文将探讨一些常见的糟糕数据可...【详细内容】
2024-03-26  DeepHub IMBA  微信公众号  Tags:数据可视化   点击:(6)  评论:(0)  加入收藏
到底有没有必要分库分表,如何考量的
关于是否需要进行分库分表,可以根据以下考量因素来决定: 数据量和负载:如果数据量巨大且负载压力较大,单一库单一表可能无法满足性能需求,考虑分库分表。 数据增长:预估数据增长...【详细内容】
2024-03-20  码上遇见你  微信公众号  Tags:分库分表   点击:(13)  评论:(0)  加入收藏
在 SQL 中写了 in 和 not in,技术总监说要炒了我……
WHY?IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢?1、效率低项目中遇到这么个情况:t1表 和 t2表 都是150w条数据,600M的样子,都不算大。但是这样一句查询 ↓select *...【详细内容】
2024-03-18  dbaplus社群    Tags:SQL   点击:(5)  评论:(0)  加入收藏
应对慢SQL的致胜法宝:7大实例剖析+优化原则
大促备战,最大的隐患项之一就是慢SQL,对于服务平稳运行带来的破坏性最大,也是日常工作中经常带来整个应用抖动的最大隐患,在日常开发中如何避免出现慢SQL,出现了慢SQL应该按照什...【详细内容】
2024-03-14  京东云开发者    Tags:慢SQL   点击:(4)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12    InfoQ  Tags:数据库   点击:(26)  评论:(0)  加入收藏
SQL优化的七个方法,你会哪个?
一、插入数据优化 普通插入:在平时我们执行insert语句的时候,可能都是一条一条数据插入进去的,就像下面这样。INSERT INTO `department` VALUES(1, '研发部(RD)', &#39...【详细内容】
2024-03-07  程序员恰恰  微信公众号  Tags:SQL优化   点击:(19)  评论:(0)  加入收藏
站内最新
站内热门
站内头条