美国时间 3 月 25 日,Kubernetes v1.18 正式发布,这是 2020 年的第一个新版本。

Kubernetes v1.18 包含 38 个增强功能:其中 15 个增强功能已趋于稳定,11 个 beta,12 个进入 alpha

根据博客介绍,Kubernetes v1.18 是一个“完美”的版本。为了改善用户体验, 开发团队围绕 beta 和稳定功能改进进行了大量工作,同时也不忘开发更多新功能进一步丰富用户体验。

在这个版本中,我们可以发现进入 alpha、beta 和稳定的增强功能数量非常平均,这表明了社区在提高 Kubernetes 可靠性以及继续扩展现有功能方面所做的巨大努力。

Major Themes

Kubernetes 拓扑管理器进入 beta

在 1.18 版本中,可让 Service 实现就近转发,而不是所有 Endpoints 等概率转发的 Kubernetes 拓扑管理器已经正式进入 beta。

在引入拓扑管理器之前,CPU 和设备管理器通常会做出彼此独立的资源分配决策,这可能会出现分配不合理的情况,进而导致关键应用程序因网络延时增加而出现性能下降。现在,拓扑管理器支持 CPU 和设备(如 SR-IOV VFs)之间的 NUMA 对齐,使工作负载能在专门针对低延迟进行了优化的环境中运行。

Serverside Apply 二度 beta

早在 1.16 版本中,Server-side Apply 就已经升级为 beta,当开发人员 kubectl apply 时,它可以确保不同组件更安全、更可靠地同时更改同一资源,避免因不同个体之间互相篡改字段导致集群出故障。

在 1.18 版本中,这一功能再次进入 beta,这次它可以跟踪和管理所有新 Kubernetes 对象的字段更改,方便开发者知道什么更改了资源以及何时发生了更改,方便更好地管控。

用 IngressClass 扩展 Ingress 并使用 IngressClass 替换过时注释

在 Kubernetes v1.18 中,Ingress 有两个重要补充:一个新的 pathType 字段和一个新的 IngressClass 资源

其中,pathType 字段允许指定匹配路径的方式,除了默认的 ImplementationSpecific 类型之外,还有新的 Exact 路径类型和 Prefix 路径类型。

IngressClass 资源则用于描述 Kubernetes 集群中的 Ingress 类型。通过使用一个新的 IngressClassName 字段,Ingress 可以指定与它们相关联的类。当前上述新资源和字段已替换 kubernetes.io/ingress.class 注释。

SIG-CLI 引入 kubectl 调试

在相当长的一段时间内,SIG-CLI 一直在争论是否需要调试实用程序。随着短生命周期容器(ephemeral containers)的发展,在 1.18 版本中,开发者现在可以通过使用构建在 kubectl exec 上的工具实现这一想法

新版本引入 kubectl debug(alpha),它允许开发人员轻松地在集群中调试 Pod。同时,该命令也允许创建一个短生命周期容器,它在要检查的 Pod 旁运行,还可以附到控制台进行交互式故障排除。

引入 Windows CSI 支持(alpha)

随着 Kubernetes v1.18 的发布,Windows CSI 代理的 alpha 版本也即将发布。CSI 代理允许非特权(预先批准的)容器在 Windows 上执行特权存储操作。现在,用 CSI 代理在 Windows 中支持 CSI 驱动程序已经可行。

其他更新点

以下特性已步入稳定

  • 基于污点的驱逐
  • kubectl diff
  • CSI 块存储支持
  • API Server dry run
  • 在 CSI call 中传递 Pod 信息
  • 支持 Out-of-Tree vSphere 云提供商
  • 支持针对 Windows 工作负载的 GMSA
  • 跳过 non-attachable CSI 的 attach
  • PVC 克隆
  • 将 kubectl 软件包代码移至暂存
  • Windows 的 RunAsUserName
  • 适用于服务和端点的 AppProtocol
  • 扩展 Hugepage 功能
  • 客户端签名重构,以标准化选项和上下文处理
  • 节点本地 DNS 缓存

其他主要变化

  • #752 EndpointSlice API:新的 Endpoint API,以最终替代当前的 core/v1 Endpoints API;
  • #1020 将 kubectl 软件包代码移至暂存:最终目标是将 kubectl 拆分到一个单独的存储库中;
  • #1513 CertificateSigningRequest API:alpha 发布目标 v1.4,beta 版本目标 v1.6,稳定发布目标 v1.19;
  • #1539 扩展 Hugepage 功能:相关增强功能包括隔离 Hugepage 容器和支持多种大小的 Hugepage;
  • #1601 客户端签名重构,以标准化选项和上下文处理:向客户端界面添加上下文和缺失的选项。

发布 logo

此次,开发团队也发布了一个新版本 release logo,它以 CERN 的大型强子对撞机(LHC)为主题。

LHC 是世界上最大、功能最强大的粒子加速器,它是世界各地科学家合作的结果,旨在促进科学的发展。与之类似,Kubernetes 作为一个备受瞩目的开源项目,聚集了来自数百个组织的数千名贡献者——所有人都朝着全方面改进云计算这个相同的目标努力!

该 logo 名为“A Quarky”,意在提醒每位开源贡献者和开发者,非常规的想法也可以带来巨大变化,对开放性保持开放态度将有助于我们进行创新

小结

Kubernetes 是当前最大的开源软件项目之一,从数字上看,Kubernetes v1.18 共计收到 3412 次 commits,相较 Kubernetes v1.17 的 3289 次有所提升。如果用 NLP(自然语言处理)对这些 commits 的关键信息进行统计,可以发现 deprecationsmetricsnode kubectl 是这个版本的主要关注点。