2019年9月18日,Kubernetes本年度的第三次发布携31项改进如期而至,在此次发布中,主要包含了31项改善,8项功能升至稳定版本GA,8项功能升级至Beta版,另外引入15项功能至Alpha版。
主题
- CRD: 作为扩展Kubernetes资源类型的有效方式,CRD从1.7版可用(Beta版)之后,在1.16版中达到了稳定阶段,升至GA版。
- 指标注册: Kubernetes之前就可以通过使用全局性的指标注册的方式来实现扩展性,在这个版本中得到了进一步的改善,指标能够以一种更为透明的方式进行注册。
- 卷扩展: 在这个版本中发布了几处与卷和卷变更有关的功能增强,在CSI specs中,卷的大小变更支持(Volume resizing support)升至Beta版,使得任何CSI规格的卷插件的大小都是可以调整的。
功能增强
自定义资源升至GA稳定版
CRD作为Kubernetes生态系系统中的基础扩展方式,起源与TPR(ThirdPartyResources)原型,而最终以apiextensions.k8s.io/v1的方式在1.16升至GA版,但是与CRD API相关的更新不会就此终止,一些相关的想法和优化仍在继续。
Windows相关的功能增强
Windows容器工作负载识别选项增强
Active Directory的GMSA支持(Group Managed Service Account support)升至Beta版,某些Alpha阶段引入的注解被废弃。GMSA是特定类型的Active Directory账户,使用这些账户使得Windows容器能够跨网络进行身份识别,从而和其他资源进行沟通。Windows容器现在已可以通过外部资源获取认证。GMSA提供了密码管理、服务SPN(service principal name )管理,以及跨服务器将管理权限委托于其他管理者的能力。
增加了RunAsUserName的支持并升至Alpha版,RunAsUserName是Windows容器中一个标识Windows身份或者用户名的字符串,是windowsOptions组件的组成部分。
使用kubeadmin增强集群创建&节点加入体验改善
虽然kubeadm已经是GA版,但是windows容器对于kubeadm的支持目前刚刚引入,处于Alpha版。这项功能的引入使得Windows节点也可以项Linux节点那样,节点的加入或者重置变得更加简单。用户可以利用kubeadm的功能向集群添加Windows节点,而当操作完成,此Windows节点将会处于Ready状态,从而在此节点上运行windows容器成为可能。自然,为了实现这些,提供了一系列windows特定的脚本用于完成安装的先决条件和准备,从而使得windows节点加入集群成为可能。
引入了容器存储接口CSI支持
使用外部模块的方式引入CSI,使得Kubernetes集群中的Windows节点也能够利用基于Windows工作负载的持久化存储能力,极大地扩展了Windows工作负载的存储支持。这项能力是通过能够代表容器进行操作的Windows的宿主操作系统代理来完成的,
引入端点切片(Endpoint Slices)
在刚刚发布的1.16中引入了一项新的Alpha版的特性:Endpoint Slices。Kubernetes的端点资源(Endpoints resources)在集群的网络路由中起到重要作用,这项新的特性为端点资源提供了一种可扩展、可伸缩的机制。在这种机制之下,每个网络端点的信息都会被追踪,而kube-proxy则能使用这些信息生成代理规则,从而使得在集群之内的Pod能够进行沟通。
提供更好的伸缩性
- 第一个主要目标:引入端点切片(Endpoint Slices)的重要目标之一是使得Kubernetes服务具有更好的伸缩性。当服务横向扩展至数千个Pod时,相应的端点资源会变得非常之大,仅仅添加或者删除一个端点资源就会成为一件非常耗费资源的事情。随着端点资源的更新,所有监视的部分都需要一份资源的信息拷贝,通过kube-proxy,信息被传送至每一个节点。当规模较小的情况下,一切都不会成为问题,但是随着规模的逐渐扩大,问题将会非常明显地出现。
以一个具有5000个节点和1百万个端点对象的集群为例,任何更新都会导致接近5GB的信息传递,而5GB的信息已经能够塞满一张DVD了。你可以想象在部署时随着滚动升级的实施,随着变化频度的增加,问题将会变得多么难以解决。
而使用端点切片的方式,服务的网络端点会被切分成多个资源,当规模扩大时这会显著地降低更新所需的数据。缺省情况之下,每个端点切片会被限制在100个端点.
以一个具有5000节点和20000个网络端点的集群为例来进行说明,使用端点切片将会极大地提高了传输的效率,因为只有变化的很小的一部分信息会被传输,网络的效应使得数据更新量减少200倍。具体计算如下图所示,可以看到,传输的数据从10GB降至50MB,数据更新量减少接近200倍。
Endpoints | Endpoint Slices | |
---|---|---|
资源数量 | 1 | 20k/100 = 200 |
存储的网络端点的数量 | 1*20k = 20k | 200 * 100 = 20k |
每个资源的大小 | 20k * 常量(100) = 2.0MB | 100 * 常量(100) \ 10KB |
传输的监控事件数据 | 2.0MB * 5k = 10GB | 10KB * 5000 = 50MB |
- 第二个主要目标:端点切片的另外一个重要目的是为了提供一种在多种使用场景下高度可扩展并且容易使用的资源。端点切片很重要的一个特点是引入了拓扑属性,缺省的情况下,它会与能够标示区域等信息的拓扑标签进行关联,当然可以与定制化的标签进行关联。终端切片也包含更加灵活的地址类型,通过双栈协议保证了无论是IPv4还是IPv6都能得到支持。
当然作为在1.16中刚引入的Alpha版功能,端点切片自然不会成为缺省设定,但是作为一项重要的特性,后续的发展是可以预期的。
值得关注的更新
- 拓扑管理器: 引入了一个新的Kubelet组件,其目的在于协调资源分配决策以提供更加优化的资源分配方式。
- IPv4/IPv6 双栈协议提供了对Pod和Service的IPv4与IPv6地址的支持。
- 继续废弃extensions/v1beta1、apps/v1beta1以及apps/v1beta2 相关的APIs,在1.16中弃用这些相关的API。
- 对于Cloud Controller Manager Migration的扩展
发布团队
这次发布包含了数百名技术和非技术相关的贡献者的内容更新,微软的Principal Program经理Lachlan Evenson领导了32名成员组成的发布团队从文档到测试、验证与特性完善等多个方面进行协作,完成了这次的发布。这次发布特意对Lachlan Evenson标示了感谢。
截止到目前位置,Kubernetes已有超过32000人的贡献者,而社区的活跃的成员达到66000人(关于32000的individual contributors,指的应该不是github上kubernetes项目的contributor,2019/9/19的结果显示contributor为2279人)。
Release Mascot
Kubernetes 1.16发布徽章受到了Apollo 16任务徽章的一些影响,据称它代表了很多意义,表达了很多感谢的心情。Apollo 16的徽章是这样的,所以称为loosely inspired,大概是使用Apollo 16做的模版吧。
Kubernetes 1.16部署示例
- https://liumiaocn.blog.csdn.net/article/details/101034161
参考内容
https://kubernetes.io/blog/2019/09/18/kubernetes-1-16-release-announcement/
转载:https://blog.csdn.net/liumiaocn/article/details/101018307