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

我们很高兴地宣布 Kubernetes 1.15 的发布,这是我们 2019 年的第二个版本!Kubernetes 1.15 包含 25 项增强功能:2 项进入稳定版,13 项进入 Beta 版,10 项进入 Alpha 版。此版本的主要主题是

  • 持续改进
    • 项目可持续性不仅仅关乎功能。许多 SIG 一直在努力改进测试覆盖率,确保基础保持可靠,核心功能集的稳定,并致力于使现有功能成熟并清理积压的工作。
  • 可扩展性
    • 社区一直在要求继续支持可扩展性,因此这个周期围绕 CRD 和 API 机制进行了更多工作。此周期中的大多数增强功能都来自 SIG API 机制和相关领域。

让我们深入了解此版本的关键功能

围绕核心 Kubernetes API 的可扩展性

围绕 CustomResourceDefinitions 的新开发主题是数据一致性和原生行为。用户不应注意到交互是与 CustomResource 还是与 Golang 原生资源进行的。我们正在朝着 CRD 的 GA 版本以及在接下来的版本之一中 GA 的准入 Webhook 迈出重要一步。

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

有关什么使模式结构化的详细信息将在本周晚些时候在 kubernetes.io 上发布的一篇博客文章中发布,当然,它在Kubernetes 文档中也有说明

Beta 版:CustomResourceDefinition Webhook 转换

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

Beta 版:CustomResourceDefinition OpenAPI 发布

原生类型的 OpenAPI 规范长期以来由 kube-apiserver 在 /openapi/v2 上提供,并且已被许多组件使用,特别是 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 重新调用和改进

对于扩展 Kubernetes API 的项目,可变的和验证的准入 Webhook 越来越主流。到目前为止,可变的 Webhook 仅被调用一次,按字母顺序排列。较早运行的 Webhook 无法对链中稍后调用的 Webhook 的输出做出反应。在 Kubernetes 1.15 中,这种情况将会改变

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

这要求 Webhook 具有类似于幂等的行为,可以应对第二次调用。

不打算添加另一轮调用,因此 Webhook 作者仍然必须小心他们实现的已接受对象的更改。最后,调用验证 Webhook 以验证承诺的不变量是否已实现。

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

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

SIG 集群生命周期在此周期中的一个主要重点是努力使 Kubernetes 的安装、升级和配置更加健壮(请参阅我们的上一个社区更新)。裸机工具和生产就绪的用户案例(例如高可用性用例)的错误修复已在 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 存储继续努力将树内卷插件迁移到容器存储接口 (CSI)。SIG 存储致力于使 CSI 具有与树内功能相同的功能,包括调整大小、内联卷等功能。SIG 存储在 CSI 中引入了新的 Alpha 功能,该功能在 Kubernetes 存储子系统中尚不存在,例如卷克隆。

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

其他值得注意的功能更新

  • Kubernetes Core 中对 Go 模块的支持
  • 继续准备云提供商提取和代码组织。云提供商代码已移至kubernetes/legacy-cloud-providers,以便以后更容易删除和外部使用。
  • Kubectl get 和 describe 现在可以与扩展一起使用
  • 节点现在支持第三方监控插件
  • 用于调度插件的新调度框架现在是 Alpha 版
  • 旨在在容器中为不同的用例触发 Hook 命令的 ExecutionHook API 现在是 Alpha 版。
  • 继续弃用 extensions/v1beta1、apps/v1beta1 和 apps/v1beta2 API;这些扩展将在 1.16 中停用!

有关值得注意的功能和修复的完整列表,请查看发行说明

可用性

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 将资源利用率提高 20-50%,降低 IT 基础设施成本,并将部署时间从数小时缩短到 10-15 分钟。
  • 蒙特利尔市正在使用 Kubernetes 将部署时间从数月缩短到数小时,并在 8 台机器上运行 200 个应用程序组件,由 5 人操作 Kubernetes 集群。
  • SLAMTEC 正在使用 Kubernetes 以及其他 CNCF 项目实现18 个月以上的 100% 正常运行时间,从而节省 50% 的故障排除和调试时间,以及 30% 的 CI/CD 工作时间。
  • ThredUP 将关键服务的部署时间平均缩短了约 50%,并将部署的交付周期缩短到 20 分钟以内。

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

生态系统更新

KubeCon

全球最大的 Kubernetes 聚会 KubeCon + CloudNativeCon 即将来到 上海 (与开源峰会同期举办),时间为 2019 年 6 月 24 日至 26 日,以及 圣地亚哥,时间为 11 月 18 日至 21 日。这些会议将包括技术讲座、案例研究、开发者深度探讨、沙龙等等! 立即注册

网络研讨会

在太平洋夏令时间 7 月 23 日上午 10 点加入 Kubernetes 1.15 发布团队的成员,了解此版本的主要功能。在此注册

参与其中

参与 Kubernetes 最简单的方法是加入众多与您兴趣相关的特别兴趣小组 (SIG) 之一。有什么想向 Kubernetes 社区广播的内容吗?在我们的每周社区会议以及以下渠道分享您的声音。感谢您持续的反馈和支持。