昨天,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 ):
- 先前版本中提供的Windows版
RunAsUserName
的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。
聚苯乙烯
另请参阅我们的博客: