正式发布Kubernetes 1.15版本,这也是我们在2019年发布的第二个版本!Kubernetes 1.15包含25项增强功能,其中2项为稳定版、13项为beta测试版,另有10项为alpha测试版。本次版本的主题为:
持续性改进。项目的可持续性水平并不仅仅取决于功能。因此,我们通过多项SIG致力于提升测试覆盖率、确保各基础要素的稳定性、改善核心功能集的稳定水平,并努力在完善现有功能的同时处理尚未解决的积压性问题。
可扩展性。社区一直在要求我们进一步提升可扩展性水平,因此本次版本中包含更多与CRD以及API Machinery相关的开发成本。本次升级周期中的大多数增强功能来自SIG API Machinery及其相关领域。
下面让我们深入探讨1.15版本的主要功能。
关于核心Kubernetes API的可扩展性
与CustomResourceDefinitions紧密相关的数据一致性与原生行为无疑是本轮开发工作中的关注重点。我们希望帮助用户顺畅完成交互,而无需考虑具体使用CustomResource抑或是Golang原生资源。通过一系列重大步骤,我们正努力在下一版本周期中发布CRD与admission webhook的通用版本。
以此为指导,我们重新审视了CRD当中基于OpenAPI的验证模式。而且从1.15版本开始,我们将基于所谓“结构模式”对每一种模式进行限制性检查。具体来讲,我们将强制要求CustomResource中的各个字段皆符合非多态及完整性要求。未来,我们将要求所有结构模式——特别是以下列出的各项新功能——皆以NonStructural状态的形式列出。非结构模式将在v1beta1 API组当中暂时继续起效,但在可预见的未来,我们将要求一切严肃的CRD应用皆迁移至新的结构模式。
更多关于结构模式的细节信息,请参阅我们将在本周晚些时候发布在kubernetes.io网站上的博文。当然,大家也可以点击此处[1]参考Kuberntes说明文档。
beta:CustomResourceDefinition Webhook转换
自1.14版本开始,CustomResourceDefinitions已经能够支持多个beta形式的版本。而在Kubernetes 1.15当中,其能够进一步在不同版本之间实现即时转换,且具体方式与用户所熟悉的原生资源一样。CRD的转换通过集群管理员部署在集群之内的webhook实现。此项功能已经在Kubernetes 1.15版本中被提升为beta版,这意味着CRD将在各类严肃CRD应用当中得到进一步推广。
beta:CustomResourceDefinition OpenAPI发布
长久以来,OpenAPI中的原生类型范式一直通过/openapi/v2交付,很多组件都在使用这些范式,特别是在kubectl实施意见验证、kubectl解释以及基于OpenAPI的客户端生成器当中。
用于CRD的OpenAPI发布机制将在Kubernetes 1.15版本中以beta测试形式亮相,但目前仅适用于结构模式。
beta:CustomResourceDefinitions删减
删减功能,是指对发送至Kubernetes API的对象当中的未知字段进行移除的操作。如果未在OpenAPI验证模式当中指定字段,则该字段即被视为未知。这项功能既关乎数据一致性,又与安全相关联。其强制要求将CRD开发者所指定的数据结构永久保存至etcd当中。这是一种原生资源行为,并将从Kubernetes 1.15版本的beta测试版开始适用于CRD。
删减可通过CustomResourceDefinition中的spec.preserveUnknownFields: false被激活。未来即将发布的CRD apiextensions.k8s.io/v1变种将强制执行删减操作(但允许用户明确关闭此项功能)。
删减还要求CRD开发者提供完整的结构验证模式,包括顶级以及其它一切CRD版本。
alpha:CustomResourceDefinition默认设置
CustomResourceDefinitions获得了默认设置支持能力。所谓默认设置,是指在OpenAPI验证模式当中利用default关键字指定的选项。对于被发送至API的对象,默认设置将在系统从etcd读取这些对象时为未指定的字段提供默认选项。
默认设置在Kubernetes 1.15版本中以alpha测试形式支持结构模式。
beta:Admission Webhook重新定位与改进
对于需要对Kubernetes API进行扩展的项目而言,对admission webhook的变异与验证正成为一种愈发主流的处理方式。截至目前,webhook变异只需要以字母排序方式进行一次调用。这意味着较早运行的webhook无法根据稍后调用的webhook的输出结果做出反应。在Kubernetes 1.15版本当中,这一情况将有所改善:
用户可以通过指定reinvocationPolicy: IfNeeded确保webhook变异至少进行一次重新调用。如果后续的webhook变异对对象做出修改,那么较早的webhook将能够对变更做出反应。
这就要求webhook具有类似于idem-potent的行为,从而应对二次调用。
目前我们还没有计划添加更多调用轮,因此webhook编写者仍然需要谨慎地思考已提交对象是否发生了变更。最后,webhook验证将通过调用验证承诺不变量是否仍然不变。
我们还对admission webhook做出了一点小小调整,特别是objectSelector 将排除某些来自admission(即webhook服务器的任意端口,而不只是端口443)且包含特定标签的对象。
集群生命周期的稳定性与可用性改进
对Kubernetes的安装、升级与配置流程进行强化,一直是SIG集群生命周期在本轮升级周期中的关注重点。我们针对裸机工具与生产就绪用户故事进行了bug修复,例如在1.15版本当中为高可用性用例提供更高优先级。
kubeadm为集群生命周期的基本构建块,其将继续获得有效引导生产集群所必需的功能与稳定性提升。Kubeadm已经进入beta测试阶段,实现了高可用性提升,允许用户利用已经非常熟悉的kubeadm init与kubeadm join命令对高可用性控制面板进行配置与部署。我们还专门设计出一款全新测试套件,用以确保这些功能随时间推移而始终保持稳定。
证书管理在1.15版本中也将变得更加强大,kubeadm现在可以在证书(升级时)到期之前对其进行无缝轮换。大家可以点击此处[2]查看kubeadm文档以了解与证书管理相关的细节信息。
在1.15版本当中,kubeadm配置文件API也将由v1beta1升级为v1beta2。
最后,让我们庆祝kubeadm终于拥有了自己的徽标!
CSI的持续改进
在Kubernetes 1.15版本当中,SIG存储将继续致力于将树内存储卷插件迁移至容器存储接口(简称CSI)。SIG存储亦努力将CSI与树内结构之间的功能对应起来,包括大小调整以及内联存储卷等功能。SIG存储还引入了一些原本Kuebernetes存储子系统中所不存在的全新alpha功能,例如存储卷克隆。
存储卷克隆允许用户在配置新存储卷时,将另一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 APIs;这些扩展将在1.16版本中被彻底淘汰!
最后,大家可以点击此处[3]获取此次更新与修复的完整列表。
发布时间
Kubernetes 1.15目前已经可在GitHub上直接下载[4]。要开始使用Kubernetes,我们建议您点击此处[5]参阅交互式教程。您也可以利用kubeadm命令轻松安装最新的1.15版本。
相关链接:
https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#specifying-a-structural-schema
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-alpha/
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.15.md#kubernetes-v115-release-notes
https://github.com/kubernetes/kubernetes/releases/tag/v1.15.0
https://kubernetes.io/docs/tutorials/
原文链接:https://kubernetes.io/blog/2019/06/19/kubernetes-1-15-release-announcement/