Jet 译 分布式实验室
今天,我们正式发布Kubernetes 1.15版本,这也是我们在2019年发布的第二个版本!Kubernetes 1.15包含25项增强功能,其中2项为稳定版、13项为beta测试版,另有10项为alpha测试版。本次版本的主题为:
持续性改进。项目的可持续性水平并不仅仅取决于功能。因此,我们通过多项SIG致力于提升测试覆盖率、确保各基础要素的稳定性、改善核心功能集的稳定水平,并努力在完善现有功能的同时处理尚未解决的积压性问题。
可扩展性。社区一直在要求我们进一步提升可扩展性水平,因此本次版本中包含更多与CRD以及API Machinery相关的开发成本。本次升级周期中的大多数增强功能来自SIG API Machinery及其相关领域。
下面让我们深入探讨1.15版本的主要功能。
关于核心Kubernetes API的可扩展性
以此为指导,我们重新审视了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)且包含特定标签的对象。
集群生命周期的稳定性与可用性改进
kubeadm为集群生命周期的基本构建块,其将继续获得有效引导生产集群所必需的功能与稳定性提升。Kubeadm已经进入beta测试阶段,实现了高可用性提升,允许用户利用已经非常熟悉的kubeadm init与kubeadm join命令对高可用性控制面板进行配置与部署。我们还专门设计出一款全新测试套件,用以确保这些功能随时间推移而始终保持稳定。
证书管理在1.15版本中也将变得更加强大,kubeadm现在可以在证书(升级时)到期之前对其进行无缝轮换。大家可以点击此处[2]查看kubeadm文档以了解与证书管理相关的细节信息。
在1.15版本当中,kubeadm配置文件API也将由v1beta1升级为v1beta2。
最后,让我们庆祝kubeadm终于拥有了自己的徽标!
CSI的持续改进
存储卷克隆允许用户在配置新存储卷时,将另一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版本中被彻底淘汰!
发布时间
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/