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 的 GA 版本以及未来版本中准入 Webhook 的 GA。

在此方向上,我们重新思考了 CRD 中基于 OpenAPI 的验证模式,从 1.15 开始,我们根据一个名为“结构化模式”的限制检查每个模式。这基本上强制 CustomResource 中每个字段的非多态和完整类型。我们将来将要求结构化模式,特别是对于下面列出的所有新功能,并在 `NonStructural` 条件中列出违规。非结构化模式暂时在 v1beta1 API 组中继续工作。但所有重要的 CRD 应用程序都应在可预见的将来迁移到结构化模式。

关于构成结构化模式的详细信息将于本周晚些时候在 kubernetes.io 的博客文章中发布,当然,它也在 Kubernetes 文档中有所记录

Beta:CustomResourceDefinition Webhook 转换

自 1.14 以来,CustomResourceDefinitions 以 Beta 形式支持多个版本。在 Kubernetes 1.15 中,它们获得了在不同版本之间即时转换的能力,就像用户长期以来习惯的原生资源一样。CRD 的转换通过 Webhook 实现,由集群管理员部署在集群内部。此功能在 Kubernetes 1.15 中升级为 Beta 版,将 CRD 提升到全新的水平,适用于重要的 CRD 应用程序。

Beta:CustomResourceDefinition OpenAPI 发布

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

CRD 的 OpenAPI 发布将在 Kubernetes 1.15 中作为 Beta 版提供,但仍然仅适用于结构化模式。

Beta:CustomResourceDefinitions 剪枝

剪枝是自动移除发送到 Kubernetes API 的对象中未知字段的功能。如果字段未在 OpenAPI 验证模式中指定,则该字段是未知的。这既是数据一致性功能,也与安全性相关。它强制只有 CRD 开发者指定的数据结构才能持久化到 etcd。这是原生资源的行为,也将适用于 CRD,从 Kubernetes 1.15 开始作为 Beta 版提供。

剪枝通过 CustomResourceDefinition 中的 `spec.preserveUnknownFields: false` 激活。未来的 apiextensions.k8s.io/v1 版本的 CRD 将强制执行剪枝(可能需要但明确必须选择退出)。

剪枝要求 CRD 开发者提供完整、结构化的验证模式,可以是顶层模式,也可以是 CRD 所有版本的模式。

Alpha:CustomResourceDefinition 默认值

CustomResourceDefinitions 获得默认值支持。默认值使用 OpenAPI 验证模式中的 `default` 关键字指定。默认值会在发送到 API 的对象中未指定字段时设置,以及从 etcd 读取时设置。

默认值将在 Kubernetes 1.15 中作为结构化模式的 Alpha 版提供。

Beta:准入 Webhook 重复调用和改进

修改和验证准入 Webhook 越来越成为扩展 Kubernetes API 的项目的主流。到目前为止,修改 Webhook 只会被按字母顺序调用一次。较早运行的 Webhook 无法对链中较晚调用的 Webhook 的输出作出反应。在 Kubernetes 1.15 中,情况将发生变化。

修改 Webhook 可以通过指定 `reinvocationPolicy: IfNeeded` 来选择至少一次重复调用。如果后面的修改 Webhook 修改了对象,则较早的 Webhook 将获得第二次机会。

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

不计划增加另一轮调用,因此 Webhook 作者仍需谨慎对待他们对被准入对象所做的更改。最后,调用验证 Webhook 以验证承诺的不变性是否已实现。

准入 Webhook 还有更多小的更改,特别是 `objectSelector` 用于将具有特定标签的对象从准入中排除,以及 Webhook 服务器的任意端口(不仅限于 443)。

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

使 Kubernetes 安装、升级和配置更加健壮一直是 SIG Cluster Lifecycle 本周期的主要重点(请参阅我们上次的社区更新)。针对 1.15,裸金属工具和生产就绪的用户案例(例如高可用性用例)的 Bug 修复已获得优先权。

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

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

kubeadm 配置文件 API 在 1.15 中从 v1beta1 迁移到 v1beta2。

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

kubeadm official logo

CSI 的持续改进

在 Kubernetes v1.15 中,SIG Storage 继续致力于将树内卷插件迁移到容器存储接口 (CSI)。SIG Storage 致力于使 CSI 的功能与树内功能保持一致,包括调整大小、内联卷等功能。SIG Storage 在 CSI 中引入了 Kubernetes 存储子系统中尚不存在的新 Alpha 功能,例如卷克隆。

卷克隆允许用户在配置新卷时将另一个 PVC 指定为“DataSource”。如果底层存储系统支持此功能并在其 CSI 驱动程序中实现“CLONE_VOLUME”功能,则新卷将成为源卷的克隆。

其他值得注意的功能更新

查看发行说明以获取值得注意的功能和修复的完整列表。

可用性

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

功能博客系列

如果您有兴趣深入探索这些功能,请本周和下周回来查看我们的 Kubernetes 日系列,届时我们将重点介绍以下功能的详细演练:

  • CRD 的未来:结构化模式
  • 为 Kubernetes 引入卷克隆 Alpha
  • Kubeadm 中的自动化高可用性

发布团队

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

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

项目速度

CNCF 继续完善 DevStats,这是一个雄心勃勃的项目,旨在可视化项目中众多贡献。 K8s DevStats 展示了主要公司贡献者的贡献细分,以及一系列令人印象深刻的预配置报告,涵盖从个人贡献者到拉取请求生命周期时间的所有内容。在过去的一年中,平均每月有 379 家不同的公司和超过 2,715 名个人为 Kubernetes 做出贡献。 查看 DevStats,了解 Kubernetes 项目和社区的整体发展速度。

用户亮点

成熟的全球组织正在大规模使用生产中的 Kubernetes。社区最近发布的成功案例包括:

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

生态系统更新

KubeCon

全球最大的 Kubernetes 盛会 KubeCon + CloudNativeCon 将于 2019 年 6 月 24-26 日在上海(与开源峰会同期举行)和 11 月 18-21 日在圣地亚哥举行。这些会议将包括技术会议、案例研究、开发者深度探讨、沙龙等内容!立即注册

网络研讨会

欢迎 Kubernetes 1.15 发布团队的成员于太平洋时间 7 月 23 日上午 10 点参加会议,了解此版本中的主要功能。在此注册

参与其中

参与 Kubernetes 最简单的方式是加入与您兴趣相符的众多特殊兴趣小组 (SIG) 之一。有什么想向 Kubernetes 社区宣布的吗?在我们的每周社区会议上,并通过以下渠道分享您的声音。感谢您一直以来的反馈和支持。