Kubernetes 1.17:关键创新概述

昨天,12月9日,Kubernetes 下一个发行版-1.17。 根据我们博客的传统,我们谈论新版本中最重要的变化。



用于准备此材料的信息取自正式公告, Kubernetes增强跟踪表 CHANGELOG-1.17和相关问题,拉取请求以及Kubernetes增强建议(KEP)。 那么有什么新消息?

基于拓扑的路由


长期以来,Kubernetes社区一直在等待此功能- 拓扑感知的服务路由 。 如果KEP于2018年10月基于它,并且正式增强版是2年前,那么通常的问题(像这样甚至要早几年...

总体思路归结为为位于Kubernetes中的服务提供实现“本地”路由的能力。 在这种情况下,“位置”表示“相同的拓扑级别” (topology level) ,可能是:

  • 服务的同一节点,
  • 同一服务器机架
  • 同一地区
  • 相同的云提供商
  • ...

使用此功能的示例:

  • 在具有多个可用区(multi-AZ)的云安装中节省流量-请参阅有关来自一个区域但AWS中不同AZ的流量示例的最新插图
  • 性能延迟更少/吞吐量更高;
  • 在每个分片中具有本地节点信息的分片服务;
  • 将流利的(或类似物)与收集日志的应用程序放在一个节点上;
  • ...

这种“了解”拓扑的路由也称为网络亲和力-类似于节点亲和力pod亲和力/反亲和力最近推出的拓扑感知卷调度 (和卷预配 )。 Kubernetes中ServiceTopology的当前实现级别是Alpha版本。

有关如何安排功能以及如何使用该功能的详细信息,请从一位作者那里阅读本文

IPv4 / IPv6双栈支持


K8s 1.16中首次引入了另一个网络功能,即同时支持两个IP堆栈,这记录了巨大的进步。 特别是,新版本带来了以下更改:

  • kube-proxy 实现了在两种模式(IPv4和IPv6)中同时运行可能性;
  • Pod.Status.PodIPs已经出现了对向下API的支持(与此同时, /etc/hosts现在需要为/etc/hosts添加IPv6地址);
  • 支持KIND (Kubernetes IN Docker)和kubeadm中的两个堆栈;
  • 更新了e2e测试。


种类IPV4 / IPv6双栈插图

CSI进展


最初在K8s 1.12中引入的对基于CSI的存储库的拓扑支持 已声明为稳定

CSI迁移 卷插件计划-CSI迁移 -已达到Beta。 为了将现有的树内插件转移到Kubernetes最终用户未注意到的现代接口(CSI,树外)中,此功能至关重要。 集群管理员激活CSI迁移就足够了,之后,现有的有状态资源和工作负载仍将“正常工作”……但是使用当前的CSI驱动程序,而不是Kubernetes内核中包含的过时的驱动程序。

目前,AWS EBS驱动程序( kubernetes.io/aws-ebs )和GCE PD( kubernetes.io/gce-pd )的迁移状态为Beta状态。 其他存储库的预测如下:



我们在本文中谈到了K8的“传统”存储支持是如何进入CSI的。 从CSI迁移到Beta状态的过渡专门用于该项目博客上的单独出版物

此外,在CSI上下文中,另一个重要功能达到了Kubernetes 1.17版本的beta版本(即默认包含)的状态,该功能起源于K8s 1.12中的(alpha实现)- 创建快照并从中恢复 。 在Beta版本发布期间,Kubernetes Volume Snapshot中所做的更改包括:

  • 将Sidecar CSI外部快照器拆分为两个控制器,
  • 在卷快照的内容中添加了删除机密作为注释,
  • 一个新的终结器,可防止在剩余连接时删除快照API对象。

在1.17版发行时,三个CSI驱动程序支持该功能:GCE永久磁盘CSI驱动程序,Portworx CSI驱动程序和NetApp Trident CSI驱动程序。 您可以在博客文章中了解有关其实现和使用的更多信息。

云提供商标签


根据使用的云提供商 ,自动分配给创建的节点和卷的标签在Kubernetes中已经存在很长时间了-从K8s 1.2 (2016年4月!)开始发布。 考虑到它们已经使用了这么长时间,开发人员认为是时候宣布该功能稳定(GA)了。

因此,它们都被相应地重命名(通过拓扑):

  • node.kubernetes.io/instance-type
  • failure-domain.beta.kubernetes.io/zone topology.kubernetes.io/zone failure-domain.beta.kubernetes.io/zone
  • failure-domain.beta.kubernetes.io/region topology.kubernetes.io/region failure-domain.beta.kubernetes.io/region

...,但仍可使用其旧名称(为了向后兼容)。 但是,鼓励所有管理员切换到当前标签。 相关的 K8s 文档已更新。

结构化输出kubeadm


以alpha格式,首次显示kubeadm实用程序的结构化输出 。 支持的格式:JSON,YAML,Go-template。

实施此功能的动机(根据KEP )如下:

尽管Kubernetes可以手动部署,但此操作的事实上的标准(如果不是法律上的标准)是使用kubeadm。 诸如Terraform之类的流行系统管理工具依靠kubeadm进行Kubernetes部署。 计划对Cluster API进行的改进包括一个可组合的软件包,用于使用kubeadm和cloud-init引导Kubernetes。

如果没有结构化的输出,即使乍看之下最无害的更改也可能破坏Terraform,Cluster API和其他使用kubeadm结果的软件。

在不久的将来,将出现以下kubeadm命令的支持(以结构化输出的形式):

  • alpha certs
  • config images list
  • init
  • token create
  • token list
  • upgrade plan
  • version

kubeadm init -o json命令的JSON响应的插图:

 { "node0": "192.168.20.51:443", "caCrt": "sha256:1f40ff4bd1b854fb4a5cf5d2f38267a5ce5f89e34d34b0f62bf335d74eef91a3", "token": { "id": "5ndzuu.ngie1sxkgielfpb1", "ttl": "23h", "expires": "2019-05-08T18:58:07Z", "usages": [ "authentication", "signing" ], "description": "The default bootstrap token generated by 'kubeadm init'.", "extraGroups": [ "system:bootstrappers:kubeadm:default-node-token" ] }, "raw": "Rm9yIHRoZSBhY3R1YWwgb3V0cHV0IG9mIHRoZSAia3ViZWFkbSBpbml0IiBjb21tYW5kLCBwbGVhc2Ugc2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FrdXR6LzdhNjg2ZGU1N2JmNDMzZjkyZjcxYjZmYjc3ZDRkOWJhI2ZpbGUta3ViZWFkbS1pbml0LW91dHB1dC1sb2c=" } 

稳定其他创新


总的来说,Kubernetes 1.17的发布是在“ 稳定 ”的座右铭下举行的。 事实证明,其中的许多功能(总数为14 )获得了GA状态。 其中:


其他变化


当然,Kubernetes 1.17中的创新的完整列表不限于上面列出的那些。 以下是其中的一些(有关更完整的列表,请参见CHANGELOG ):

  • 先前版本中提供的WindowsRunAsUserName的beta版本已增长为beta版本;
  • EndpointSlice API(也来自K8s 1.16)进行了类似的更改,但是到目前为止,默认情况下尚未激活此用于提高Endpoint API性能/可伸缩性的解决方案;
  • 现在,不仅可以在kube-system命名空间中创建对集群操作至关重要的kube-system 有关详细信息,请参阅“ 限制优先级使用”的文档)
  • kubelet的新选项--- --reserved-cpus允许您显式定义为系统保留的CPU列表;
  • 对于kubectl logs ,将显示一个新标志-前缀,将pod的名称和源容器添加到日志的每一行;
  • label.Selector 添加了 RequiresExactMatch ;
  • 现在 ,kube-dns中的所有容器以较少的特权运行
  • hyperkube被分配到一个单独的GitHub存储库,并且将不再包含在Kubernetes版本中;
  • 显着提高了非UDP端口的kube-proxy 性能

依赖关系更改:

  • kubeadm中的CoreDNS版本-1.6.5;
  • crictl版本已更新至v1.16.1;
  • CSI 1.2.0;
  • 等等3.4.3;
  • Docker的最新测试版本已升级到03/19。
  • 构建Kubernetes 1.17所需的最低Go版本为1.13.4。

聚苯乙烯


另请参阅我们的博客:

Source: https://habr.com/ru/post/zh-CN476998/


All Articles