Kubernetes 1.16:自定义资源,大修指标和卷扩展

作者: Kubernetes 1.16发布团队

我们很高兴宣布Kubernetes 1.16的交付,这是我们的2019年第三版! Kubernetes 1.16包含31个增强功能:8个增强功能已变为稳定状态,8个增强了beta版本和15个增强了alpha版本。

主要主题

定制资源

CRD被广泛用作Kubernetes的可扩展性机制,并且自1.7版本以来一直在beta中可用。 1.16版本标志着CRD向通用(GA)的升级。

大修指标

Kubernetes以前广泛使用了全局指标注册表来注册要公开的指标。通过实施度量标准注册表,可以以更透明的方式注册度量标准。以前,Kubernetes指标已从任何类型的稳定性要求中排除。

音量扩展

此发行版中有很多与卷和卷修改有关的增强功能。 CSI规范中的卷大小调整支持正在迁移至Beta版,该版本允许调整任何CSI规范卷插件的大小。

Kubernetes API的重大更改

随着Kubernetes API的发展,我们已经将一些API资源推广到 稳定,其他人已重组为不同的组。我们不赞成使用较旧的资源版本,并根据 API版本政策.

一个例子是 Deployment resource. This was introduced under the extensions/v1beta1 group in 1.6 and as the project changed has been promoted to extensions/v1beta2, apps/v1beta2 and finally promoted to 稳定 and moved to apps/v1 in 1.9.

重要的是要注意,在此版本发布之前,项目一直没有停止提供任何不推荐使用的资源的任何先前版本。

这意味着尚未与Kubernetes API进行交互的人们 需要 移至任何不推荐使用的API对象的新版本。

In 1.16 if you submit a Deployment to the API server and specify extensions/v1beta1 as the API group it will be rejected with:

error: unable to recognize "deployment": no matches for kind "Deployment" in version "extensions/v1beta1"

在此版本中,我们在Kubernetes API的成熟度方面迈出了非常重要的一步,并且不再提供不推荐使用的API。我们之前的帖子 1.16中已删除的不赞成使用的API:这是您需要知道的 告诉您更多信息,包括受影响的资源。

其他增强功能

自定义资源达到一般可用性

CRD已成为扩展Kubernetes生态系统的基础。作为对ThirdPartyResources原型的彻底重新设计,它们最终以apiextensions.k8s.io/v1在1.16中达到了GA,因为已经集成了Kubernetes中API演进的来之不易的课程。当我们过渡到GA时,重点是API客户端的数据一致性。

升级到GA API时,您会注意到一些以前可选的防护栏已经成为必需和/或默认行为。结构模式,修剪未知字段,验证和保护* .k8s.io组之类的内容对于确保API的寿命很重要,现在更容易导致意外丢失。默认设置是API演变的另一个重要部分,默认情况下,对CRD.v1的支持将处于启用状态。这些与CRD转换机制的结合足以构建随时间演变的稳定的API,就像原生Kubernetes资源在不破坏向后兼容性的前提下一样。

CRD API的更新不会在这里结束。我们对任意子资源,API组迁移以及也许更有效的序列化协议等功能都有一些想法,但是从此处进行的更改预计将是可选的,并且与GA API中已存在的内容本质上是互补的。快乐的运营商写作!

可以找到有关如何使用自定义资源的详细信息 在Kubernetes文档中.

Windows增强功能打开大门

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

Active Directory组托管服务帐户(GMSA)支持即将升级到Beta,并且不推荐使用alpha支持引入的某些注释。 GMSA是Active Directory帐户的一种特定类型,它使Windows容器能够在网络上携带身份并与其他资源进行通信。 Windows容器现在可以通过身份验证访问外部资源。此外,GMSA还提供自动密码管理,简化的服务主体名称(SPN)管理以及将管理委派给跨多台服务器的其他管理员的功能。

添加对RunAsUserName作为alpha版本的支持。 RunAsUserName是一个字符串,用于指定Windows中用于运行容器入口点的Windows身份(或用户名),并且是securityContext(WindowsSecurityContextOptions)新引入的windowsOptions组件的一部分。

Alpha:使用kubeadm改善设置和节点加入体验

引入了对kubeadm的alpha支持,从而使Kubernetes用户可以像对Linux节点一样,轻松地将Windows Worker节点加入(并重置)现有的集群。用户可以利用kubeadm准备Windows节点并将其添加到群集。操作完成后,该节点将处于“就绪”状态并能够运行Windows容器。此外,我们还将提供一组特定于Windows的脚本,以在将节点加入群集之前安装先决条件和CNI。

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

为树外提供程序引入CSI插件支持,从而使Kubernetes群集中的Windows节点能够为基于Windows的工作负载利用持久存储功能。这极大地扩展了Windows工作负载的存储选项,并添加到包含FlexVolume和树内存储插件的列表中。此功能是通过主机OS代理实现的,该代理可以代表容器在Windows节点上执行特权操作。

端点切片介绍

Kubernetes 1.16的发行版包含了一个令人兴奋的新alpha功能:EndpointSlice API。该API提供了可扩展和可扩展的替代方案, 终点 资源,可以追溯到Kubernetes的第一个版本。在幕后,端点在Kubernetes内部的网络路由中扮演着重要角色。在这些资源中跟踪每个服务端点-kube-proxy使用它们来生成代理规则,该规则允许Pod在Kubernetes中轻松地彼此通信,许多入口控制器使用它们将HTTP流量直接路由到Pod。

提供更大的可扩展性

EndpointSlices的主要目标是为Kubernetes Services带来更大的可伸缩性。使用现有的Endpoints API,单个实例必须包括代表所有与服务匹配的Pod的网络端点。随着服务开始扩展到成千上万个Pod,相应的Endpoints资源变得非常大。仅以这种规模在服务中添加或删除一个端点可能会非常昂贵。随着Endpoints实例的更新,需要向监视Endpoints的每一段代码发送完整的资源副本。在集群中的每个节点上运行kube-proxy时,需要将副本发送到每个单个节点。在小规模上,这不是问题,但是随着集群的扩大,它变得越来越明显。

端点到端点切片

使用EndpointSlices,服务的网络终结点可以拆分为多个实例,从而大大减少了大规模更新所需的数据量。默认情况下,每个EndpointSlice限制为100个端点。

例如,假设一个群集,其中10,000个服务端点分布在5,000个节点上。一次Pod更新将导致大约5GB的Endpoints API传输(足以填满DVD)。考虑到端点在部署上滚动更新等事件期间更改的频率有多高,这一点变得越来越重要。使用EndpointSlices进行相同的更新将更加高效,因为每个更新仅包含Service端点总数的一小部分。不必将大型Endpoints对象传输到每个节点,而只需传输已更改的小型EndpointSlice。在此示例中,EndpointSlices将使传输的数据减少大约100倍。

终点端点切片
资源数量120k / 100 = 200
存储的网络端点数1 * 20k = 20k200 * 100 = 20k
每个资源的大小20k * const =〜2.0 MB100 *常量=〜10 kB
观看事件数据传输〜2.0MB * 5k = 10GB〜10kB * 5k = 50MB

提供更大的可扩展性

EndpointSlices的第二个目标是提供一种在各种使用案例中高度可扩展且有用的资源。 EndpointSlices的主要新增功能之一涉及新的拓扑属性。默认情况下,它将填充整个Kubernetes中使用的现有拓扑标签,这些标签指示诸如区域和区域之类的属性。当然,也可以为该字段填充自定义标签,以用于更专业的用例。

EndpointSlices还为地址类型提供了更大的灵活性。每个都包含一个地址列表。多个地址的最初用例是支持同时具有IPv4和IPv6地址的双栈端点。例如,这是一个简单的EndpointSlice,显示了如何表示:

apiVersion: discovery.k8s.io/v1alpha
kind: EndpointSlice
metadata:
  name: example-abc
  labels:
    kubernetes.io/service-name: example
addressType: IP
ports:
  - name: http
    protocol: TCP
    port: 80
endpoints:
  - addresses:
    - "10.1.2.3"
    - "2001:db8::1234:5678"
    topology:
      kubernetes.io/hostname: node-1
      topology.kubernetes.io/zone: us-west2-a

有关端点切片的更多信息

EndpointSlices是Kubernetes 1.16中的Alpha功能,默认情况下未启用。默认情况下,将继续启用Endpoints API,但我们正在努力将最大的Endpoints使用者转移到新的EndpointSlice API。值得注意的是,Kubernetes 1.16中的kube-proxy包括对EndpointSlices的alpha支持。

Kubernetes官方文档包含有关EndpointSlices以及如何在集群中启用它们的更多信息。还有一个 精彩的KubeCon演讲 提供了更多有关开发此API的基本原理的背景知识。

重要功能更新

  • 拓扑经理,一个新的Kubelet组件,旨在协调资源分配决策以提供优化的资源分配。
  • IPv4 / IPv6双协议栈 允许将IPv4和IPv6地址分配给Pod和Services。
  • 扩展名 云控制器管理器迁移。

可用性

Kubernetes 1.16可用于 在GitHub上下载。要开始使用Kubernetes,请查看以下内容 互动教程。您也可以使用以下命令轻松安装1.16 库贝姆.

发布团队

在数百名贡献了技术和非技术内容的个人的努力下,此版本才得以实现。特别感谢 发布团队 由Microsoft首席程序经理Lachlan Evenson领导。发布团队中的32个人协调了发布的各个方面,从文档到测试,验证和功能完整性。

随着Kubernetes社区的发展,我们的发布过程很好地展示了开源软件开发中的协作。 Kubernetes继续快速地获得新用户。这种增长创造了一个积极的反馈周期,更多的贡献者提交了代码,从而创建了一个更加活跃的生态系统。 Kubernetes已经结束了 32,000个人贡献者 迄今为止,已有超过66,000人的活跃社区。

释放吉祥物

Kubernetes 1.16版本的波峰大致是受Apollo 16任务波峰启发的。它代表发布团队和社区的辛勤工作,是我们在整个发布周期中作为团队共享的挑战和欢乐时光的颂歌。非常感谢Microsoft的Ronan Flynn-Curran创造了这一宏伟的作品。

Kubernetes 1.16发布吉祥物

Kubernetes更新

项目速度

CNCF继续完善DevStats,这是一个雄心勃勃的项目,旨在可视化项目中做出的无数贡献。 K8s DevStats 阐述了主要公司贡献者的贡献细目,以及令人印象深刻的一组预先配置的报告,涵盖了从单个贡献者到请求生命周期的所有内容。在过去的一年, 1,147家不同公司和3,149多名个人 每月为Kubernetes做贡献。 查看DevStats 了解有关Kubernetes项目和社区整体速度的更多信息。

生态系统

KubeCon + CloudNativeCon

Cloud Native Computing Foundation的旗舰会议将于2019年11月18日至21日聚集来自加利福尼亚州圣地亚哥的领先开源和云原生社区的采用者和技术人员。加入Kubernetes,Prometheus,Envoy,CoreDNS,容器,Fluentd,OpenTracing,gRPC,CNI Jaeger,Notary,TUF,Vitess,NATS,Linkerd,Helm,Rook,Harbor,etcd,Open Policy Agent,CRI-O和TiKV,随着社区聚集了四天,以进一步推动云原生计算的教育和进步。 立即注册!

网络研讨会

在2019年10月22日加入Kubernetes 1.16版本团队的成员,以了解此版本的主要功能。寄存器 这里.

参与其中

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