Kubernetes 1.16发布:自定义资源、大幅调整的指标,以及存储卷扩展


今天(当地时间9月18日),我们自豪地宣布Kubernetes 1.16正式发布,这也是我们在2019年之内推出的第三个版本!Kubernetes 1.16包含31项增强功能,其中8项增强功能已经可以稳定运行,另有8项增强功能处于beta测试阶段,15项处于alpha测试阶段。

核心主题

自定义资源

CRD一直被作为Kubernetes的可扩展机制得到广泛使用,但自1.7版本发布以来就一直处于beta测试阶段。本次Kubernetes 1.16的亮相,也标志着CRD迎来了自己的通用(GA)版本。

大幅调整的指标

Kubernetes此前一直在广泛采用一套全局指标注册表,用于注册需要公开的各项指标。通过这样一套指标注册表,各项指标能够以更透明的方式进行注册。之前,各类稳定性要求都禁止使用Kubernetes指标。

存储卷扩展

新版本当中还包含一系列与存储卷以及卷修改相关的增强功能。CSI规范中的存储卷大小调整支持正转向beta测试阶段,其允许用户对任意CSI规范下的存储卷插件进行大小调整。

其它增强功能

自定义资源迎来通用版本

CRD已经成为Kubernetes生态系统中的重要基础。作为对ThirdPartyResources原型方案的重新设计成果,CRD终于通过apiextensions.k8s.io/v1在1.16版本中步入通用阶段,且整合了大量Kubernetes发展过程中积累到的API相关演变经验。在推出通用版本时,我们的首要关注重点就是API客户端的数据一致性。

当大家升级到GA API时,会很快注意到以往的几个可选条目被升级为必要及/或默认选项。事实证明,结构模式、修剪未知字段、验证以及保护*.k8s.io组对于保障API正常使用确实非常重要,而现在我们更不能容忍意外状况的发生。转为默认选项,是API演进的另一大重要组成部分,默认情况下CRD.v1支持将直接启用。这一切,再配合CRD转换机制,足以构建起能够经受住时间考验的稳定API,正如原生Kubernetes资源能够在不破坏向下兼容性实现变更一样。

当然,CRD API的更新之路还远没有结束。我们对于任意子资源、API组迁移以及提升序列化协议效率等功能已经有了一定的改进思路,但这些变更应该会以可选形式提供,并与GA API中已经存在的内容互相补充。总之,一切以运营的便利性为目标!

更多关于自定义资源的细节信息,请参阅Kubernetes说明文档

利用Windows增强开启新的大门

Beta:增强Windows容器的工作负载标识选项

Active Directory Group Managed Service Account(简称GMSA)支持即将完成beta测试阶段,而且将不推荐用户使用alpha版本阶段支持的某些注释。GMSA是一种特定类型的Active Directory账户,其允许Windows容器通过网络传输身份标识并与其它资源进行通信。Windows容器现在可以完成身份验证并访问外部资源。此外,GMSA还提供自动密码管理、经过简化的服务主体名称(SPN)管理,以及将管理委派给多服务器上其他管理员等功能。

在alpha测试阶段,我们加入了对RunAsUserName的支持。这是一条字符串,用于指定Windows中的容器标识(或者用户名)以运行该容器的入口点,其同时也是securityContext(WindowsSecurityContextOptions)中新添加的windowsOptions组件的一部分。

Alpha:利用kubeadm改进设置与节点添加体验

新版本引入了kubeadm的alpha支持,这意味着Kubernetes用户能够轻松向现有集群当中添加(以及重置)Windows工作节点,操作方式与Linux节点完全相同。用户可以利用kubeadm准备Windows节点并加入集群。在操作完成之后,该节点将处于Ready状态并能够随时运行Windows容器。此外,我们还提供一组Windows专用脚本,旨在配合节点添加的其它资源与CNI安装需求。

Alpha:引入对容器存储接口(CSI)的支持

为树外提供程序引入CSI插件支持,这意味着Kubernetes集群中的Windows节点能够利用持久存储功能运行基于Windows的工作负载。这显著扩展了Windows工作负载的存储选项范围,使用户能够在FlexVolume与树内存储插件之外获得新的选择。这一功能通过主机操作系统代理实现,该代理能够代理容器在Windows节点上执行高权限操作。

引入端点切片

Kubernetes 1.16版本还包含一项令人兴奋的全新alpha功能:端点切片(Endpoint Slices)。这些切片实际上就是一种指向端点资源的可扩展替代方案。在幕后,这些资源为Kubernetes的网络路由提供重要支持。每个网络端点都在这些资源之内受到追踪,而kube-proxy则利用这些端点生成代理规则,从而允许各Pod在Kubernetes之内轻松实现相互通信。

提供更强大的可扩展性

端点切片的一大关键目标,在于为Kubernetes服务提供更强大的可扩展性。对于现有端点资源,单一资源必须包含用于表示与某项服务相关联的全部Pod的网络端点。但如果该服务扩展至成千上万Pod,那么对应的端点资源也将无比庞大。在这种情况下,对该服务中的某一商战进行添加或删除,都会带来可观的操作成本。随着每一次端点资源的更新,代码中与该端点相关的部分都需要获取一份关于该资源的完整副本。现在,由于集群内的各个节点上都运行有kube-proxy,因此只需要面向各个节点发送副本即可。这项调整在小规模使用场景下影响不大,但在大规模集群中却会带来极为显著的影响。

举个简单的例子,假设我们拥有一套包含5000个节点与一个1 MB端点对象的集群,每一次更新都将带来大约5 GB的数据传输量(相当于一张DVD光盘)。考虑到部署期间滚动更新等事件的频繁出现,这无疑是一笔巨大的资源浪费。

利用端点切片,服务的网络端点可以被拆分为多种资源,从而显著降低大规模更新所需要传输的数据总量。在默认情况下,每个端点切片最多包含100个端点。

例如,假设我们拥有一套包含2万个网络端点,且分布在5000个节点上的集群。利用端点切片对单一端点进行更新,将带来更高的执行效率,因为每个端点只代表着网络端点总数中的一小部分。相较于以往将大端点对象传输至各个节点的方式,现在我们只需要传输已经变更的小型端点切片。实际效果就是,现在更新操作的数据传输量仅相当于以往的约二百分之一。
B1.jpeg

端点切片的第二大主要作用,是提供一种在各类用例之内都具有高度可扩展性与实用性的资源。端点切片的还带来了新的拓扑属性。在默认情况下,其将填充Kubernetes中当前使用的拓扑标签,用以指示region与zone等属性。当然,这一字段也可以填充进其它自定义标签并配合更为专业的用例。

端点切片还实现了更强大的地址类型灵活性。每个端点切片都包含一份地址列表,多地址初始用例即可支持同时具有 IPv4与IPv6地址的双栈端点。

Kubernetes说明文档对端点切片做出了详尽阐述。此作为Kubernetes 1.16版本中的alpha功能,端点切片在默认情况下并未启用,但大家可以参阅说明文档了解如何在集群中将其开启。

其它重要功能更新:
  • Topology Manager,一款新型Kubelet组件,旨在协调资源分配决策,从而提供优化效果更好的资源分配能力。
  • IPv4/IPv6双栈可以将IPv4与IPv6地址分配给各Pod与服务。
  • 面向云控制器管理器迁移提供更多扩展选项
  • 继续弃用extensions/v1beta1、apps/v1beta1以及apps/v1beta2 API。这些扩展已经在1.16中被淘汰!


发布时间

Kubernetes 1.16目前已经可以从GitHub上下载。要快速上手Kubernetes,请参阅我们的交互式教程。大家也可以利用kubeadm轻松安装1.16版本。

发布团队

此次发行版源自数百名技术与非技术贡献者的共同努力。在这里,我们要特别感谢微软公司首席项目经理Lachlan Everson所领导的发布团队。团队中的32名成员协调了发布工作中的各项具体事务,包括文档、测试、验证以及功能完整性等等。

随着Kubernetes社区的不断发展,我们的发布过程也代表着开源软件开发协作领域的又一惊人成功。Kubernetes仍在不断获得新用户,快速成长本身则创造出积极折反馈周期,吸引更多贡献者提交代码,最终建立起强大且极具活力的社区群体。截至目前,Kubernetes拥有超过32000名个人贡献者,社区成员总量则超过66000人。

发布吉祥物

Kubernetes 1.16版本的发布徽章,灵感源自阿波罗16号的任务徽章。它代表着发布团队与社区付出的辛勤努力,也是对我们在整个发布周期之内分享挑战与乐趣的肯定及鼓励。这里,感谢微软公司的Ronan Flynn-Curran创作出这件华丽的作品。
mascot.png

原文链接:Kubernetes 1.16: Custom Resources, Overhauled Metrics, and Volume Extensions

0 个评论

要回复文章请先登录注册