Kubernetes 1.15:可扩展性和持续改进

我们很高兴地宣布 Kubernetes 1.15 发布,这是我们 2019 年的第二个版本!Kubernetes 1.15 包含 25 项增强功能:其中 2 项进入稳定阶段,13 项进入 beta 阶段,10 项处于 alpha 阶段。本次发布的主要主题是

  • 持续改进
    • 项目可持续性不仅仅是关于功能。许多 SIG 一直在努力改进测试覆盖率,确保基础功能的可靠性,核心功能集的稳定性,并致力于成熟现有功能和清理积压工作。
  • 可扩展性
    • 社区一直呼吁持续支持可扩展性,因此本次发布周期包含更多围绕 CRD 和 API Machinery 的工作。本次发布周期的大多数增强功能都来自 SIG API Machinery 和相关领域。

让我们深入了解本次发布的关键特性

围绕 Kubernetes 核心 API 的可扩展性

CustomResourceDefinitions 新开发的主题是数据一致性和原生行为。用户在使用时应该感知不到是与 CustomResource 还是 Golang 原生资源进行交互。我们正在大步迈向 CRD 正式发布以及在未来版本中发布准入 Webhook 正式版。

朝着这个方向,我们重新思考了 CRD 中基于 OpenAPI 的验证 Schema,并从 1.15 开始,我们针对称为“结构化 Schema”的限制检查每个 Schema。这基本上强制要求 CustomResource 中每个字段的非多态和完整类型。将来我们将要求使用结构化 Schema,特别是对于下面列出的所有新特性,并将违规行为列在 NonStructural 条件中。非结构化 Schema 在 v1beta1 API 组中暂时仍然有效。但任何严肃的 CRD 应用都强烈建议在可预见的未来迁移到结构化 Schema。

关于如何使 Schema 结构化的详细信息将于本周晚些时候在 kubernetes.io 的博客文章中发布,并且当然在 Kubernetes 文档中也有说明。

beta:CustomResourceDefinition Webhook 转换

自 1.14 起,CustomResourceDefinitions 开始支持多个版本(beta 阶段)。在 Kubernetes 1.15 中,它们获得了即时在不同版本之间转换的能力,就像用户长期以来习惯于原生资源一样。CRD 的转换通过 webhooks 实现,由集群管理员部署在集群内部。此功能在 Kubernetes 1.15 中升级到 beta 阶段,将 CRD 的能力提升到了一个全新的水平,适用于严肃的 CRD 应用。

beta:CustomResourceDefinition OpenAPI 发布

kube-apiserver 长期以来一直在 /openapi/v2 提供原生类型的 OpenAPI spec,并且它们被许多组件使用,特别是 kubectl 客户端验证、kubectl explain 和基于 OpenAPI 的客户端生成器。

Kubernetes 1.15 将提供 CRD 的 OpenAPI 发布功能(beta 阶段),但仍然仅支持结构化 Schema。

beta:CustomResourceDefinitions 剪裁

剪裁是自动移除发送到 Kubernetes API 的对象中未知字段的功能。如果字段未在 OpenAPI 验证 Schema 中指定,则被认为是未知字段。这既是数据一致性特性,也与安全相关。它强制只有由 CRD 开发者指定的数据结构被持久化到 etcd。这是原生资源的行为,并且从 Kubernetes 1.15 开始,也将对 CRD 可用(beta 阶段)。

剪裁通过 CustomResourceDefinition 中的 spec.preserveUnknownFields: false 启用。未来 apiextensions.k8s.io/v1 版本的 CRD 将强制执行剪裁(可能提供一个退出选项,但需要明确指定)。

剪裁要求 CRD 开发者提供完整、结构化的验证 Schema,无论是顶层还是 CRD 的所有版本。

alpha:CustomResourceDefinition 默认值设置

CustomResourceDefinitions 新增了默认值设置支持。默认值使用 OpenAPI 验证 Schema 中的 default 关键字指定。默认值会设置为发送到 API 的对象中未指定字段,以及从 etcd 读取时。

在 Kubernetes 1.15 中,默认值设置将作为 alpha 功能提供给结构化 Schema。

beta:准入 Webhook 重新调用 & 改进

Mutating 和 validating 准入 Webhook 对于扩展 Kubernetes API 的项目来说变得越来越主流。到目前为止,Mutating Webhook 只能被调用一次,按字母顺序。先运行的 Webhook 无法对后续调用链中 Webhook 的输出做出反应。在 Kubernetes 1.15 中,这种情况将改变

Mutating Webhook 可以通过指定 reinvocationPolicy: IfNeeded 选择至少一次重新调用。如果后续的 mutating Webhook 修改了对象,先前的 Webhook 将获得第二次机会。

这要求 Webhook 具有幂等性行为,能够处理第二次调用。

目前不打算增加额外的调用轮次,因此 Webhook 作者仍需谨慎对待其实现的对被接纳对象的更改。最后,调用 validating Webhook 来验证所承诺的不变量是否得到满足。

准入 Webhook 还有更多小的改动,特别是 objectSelector 用于将带有特定标签的对象排除在准入之外,以及 Webhook 服务器支持任意端口(不仅仅是 443)。

集群生命周期稳定性与可用性改进

使 Kubernetes 安装、升级和配置更加稳健的工作是 SIG Cluster Lifecycle 在本次发布周期的一个主要重点(参见我们最近的社区更新)。针对裸金属工具和生产就绪用户场景(例如高可用性用例)的 Bug 修复在 1.15 中被优先处理。

kubeadm,作为集群生命周期的构建模块,持续获得引导高效生产集群所需的功能和稳定性改进。kubeadm 已将高可用性 (HA) 能力提升至 beta 阶段,允许用户使用熟悉的 kubeadm initkubeadm join 命令配置和部署 HA 控制平面。已专门创建了一套全新的测试套件,以确保这些功能将长期保持稳定。

在 1.15 中,证书管理变得更加稳健,kubeadm 现在可以在证书过期前无缝轮换所有证书(在升级时)。查看kubeadm 文档了解如何管理证书的更多信息。

kubeadm 配置文件 API 在 1.15 中从 v1beta1 升级到 v1beta2。

最后,让我们庆祝 kubeadm 现在有了自己的标志

kubeadm official logo

持续改进 CSI

在 Kubernetes v1.15 中,SIG Storage 继续致力于使树内卷插件能够迁移到 Container Storage Interface (CSI)。SIG Storage 努力使 CSI 在功能上与树内功能达到对等,包括大小调整、内联卷等功能。SIG Storage 在 CSI 中引入了 Kubernetes 存储子系统中尚不存在的新的 alpha 功能,例如卷克隆。

卷克隆使用户能够在供应新卷时将另一个 PVC 指定为“DataSource”。如果底层存储系统支持此功能并在其 CSI 驱动程序中实现了“CLONE_VOLUME”能力,那么新卷将成为源卷的克隆。

其他值得关注的特性更新

查看发布说明,获取完整列表的值得关注的特性和修复。

可用性

Kubernetes 1.15 可从 GitHub 下载。要开始使用 Kubernetes,请查看这些交互式教程。您也可以使用 kubeadm 轻松安装 1.15。

特性博客系列

如果您有兴趣更深入地探索这些特性,请在本周和下周回顾我们的“Kubernetes 之日”系列,我们将重点介绍以下特性的详细演练

  • CRD 的未来:结构化 Schema
  • 介绍 Kubernetes 的卷克隆 Alpha 功能
  • Kubeadm 中的自动化高可用性

发布团队

本次发布是数百位贡献了技术和非技术内容的个人共同努力的成果。特别感谢由 Pivotal Software 高级技术项目经理 Claire Laurence 领导的发布团队。发布团队的 38 位成员协调了发布的许多方面,从文档到测试、验证和功能完善度。

随着 Kubernetes 社区的发展,我们的发布流程充分展示了开源软件开发中的出色协作。Kubernetes 继续以惊人的速度获得新用户。这种增长创造了一个积极的反馈循环,更多的贡献者提交代码,从而形成一个更有活力的生态系统。迄今为止,Kubernetes 拥有超过 32,000 名独立贡献者和一个超过 66,000 人的活跃社区。

项目速度

CNCF 继续完善 DevStats,这是一个旨在可视化项目众多贡献的雄心勃勃的项目。K8s DevStats 展示了主要公司贡献者的贡献明细,以及一系列令人印象深刻的预设报告,涵盖从独立贡献者到 Pull Request 生命周期时间等方方面面。过去一年中,平均每月有 379 家不同的公司和超过 2,715 名个人贡献者参与 Kubernetes。要了解更多关于 Kubernetes 项目和社区的总体速度,请查看 DevStats

用户亮点

成熟的全球性组织正在大规模地在生产环境中使用 Kubernetes。社区近期发布的用户案例包括:

Kubernetes 对您的团队有帮助吗?与社区分享您的故事

生态系统更新

KubeCon

全球最大的 Kubernetes 盛会 KubeCon + CloudNativeCon 将于 2019 年 6 月 24 日至 26 日在上海(与 Open Source Summit 同期举行)举行,并于 11 月 18 日至 21 日在圣迭戈举行。这些大会将包含技术会议、案例研究、开发者深度解析、沙龙等更多精彩内容!立即注册吧!

网络研讨会

加入 Kubernetes 1.15 发布团队成员,于太平洋时间 7 月 23 日上午 10 点了解本次发布的主要特性。请在此注册

参与其中

参与 Kubernetes 最简单的方法是加入与您的兴趣相符的众多特别兴趣小组 (SIG)。有什么想传达给 Kubernetes 社区的信息吗?在我们的每周社区会议上以及通过以下渠道分享您的声音。感谢您的持续反馈和支持。