Kubernetes 1.11于
周三发布。 我们将继续我们的传统,并基于
CHANGELOG-1.11的数据以及众多问题,提出要求和设计建议来讨论最重大的变化。 K8s 1.11中有什么新功能?
网路
让我们从网络开始,因为Kubernetes 1.11的发布标志着先前版本中提出的两项重要创新的官方稳定化
(即向通用可用性状态的转变) 。 首先是基于
IPVS (IP虚拟服务器)的群集内服务的
负载平衡 。 这次
机会来自
华为 ,去年春天,
华为向社区展示了其使用IPVS而非iptables改善50多种服务的负载平衡的工作成果。 逻辑上
解释了这一选择:“如果iptables是为防火墙创建的,并且基于内核中的规则列表,则IPVS是为负载平衡而设计的,并且基于内核中的哈希表。 另外,IPVS支持比iptables更高级的负载平衡算法,以及许多其他有用的功能(例如状态检查,重试等)。”
来自华为的扩展Kubernetes的幻灯片, 以在KubeCon Europe 2017 上支持50,000服务演示它带来了什么? “更好的网络带宽,更少的软件延迟
[谈论将新端点添加到服务所需的时间- 大约 佩雷夫 并为群集中的负载平衡器提供更好的可伸缩性。” 用于kube-proxy的IPVS模式的Alpha版本出现在
Kubernetes 1.8中,并且在当前版本1.11之前已经稳定下来:尽管默认情况下仍未启用,但它已经正式准备好服务于生产集群中的流量。
第二个成熟的功能是
CoreDNS作为 Kubernetes集群使用
的DNS服务器 。 我们在
另一篇评论中详细介绍了该解决方案,简而言之,它是一台灵活且易于扩展的DNS服务器,最初基于
Caddy Web服务器,后来成为
SkyDNS的后继
产品 (顺便说一下,kube-dns本身就是基于该服务器,用 Go编写,专注于云(云原生)应用程序的世界。 另一个值得注意的CoreDNS是事实,它似乎是系统中唯一的可执行文件和唯一的进程。 现在,这不仅是Kubernetes集群的另一个DNS选项,还是kubeadm的默认选项。 在Kubernetes中使用CoreDNS的说明可
在此处 (以及
此处的Cluster Federation)中获得。
Kubernetes网络“世界”的其他更新包括:
- 在NetworkPolicies中,现在可以使用
namespaceSelector
和podSelector
在其他命名namespaceSelector
指定特定的podSelector
; - 服务现在可以在不同接口(在
--nodeport-addresses
指定) 上的相同主机端口上--nodeport-addresses
; - 修复了一个错误,该错误导致使用
--node-ip
时--node-ip
停止报告ExternalDNS
, InternalDNS
和ExternalIP
。
仓储设施
Kubernetes 1.9中引入了防止删除任何绑定到PVC的吊舱和PV(
PersistentVolumeClaims
)使用的PVC(
PersistentVolumeClaims
)
的保护
功能 ,后来
(在K8s 1.10中)称为
StorageProtection的功能被宣布为稳定。
重新启动炉床后调整卷(PV)大小的功能已转换为beta状态,并且在alpha版本中,
可以实时调整卷大小 ,即 无需重启炉膛。
为了支持AWS EBS和GCE PD,增加了连接到主机的最大可能卷数的限制,并且在插件AWS EBS,Azure Disk,GCE PD和Ceph RBD中
实现了对块原始设备的动态预配置卷的支持。 对于AWS EBS卷
,还
添加了以
ReadOnly
模式使用pod的
功能 。
此外,Kubernetes 1.11引入了一个alpha版本,该版本
支持根据节点类型对卷
进行动态限制,以及对外部存储驱动程序CSI(
容器存储接口 -出现在
Kubernetes 1.9中 )的块卷的API支持。 此外,CSI与新的
Kubelet插件注册
引擎 实现了集成。
集群节点
Kubernetes 1.11发行版的前5大主要更改还包括
过渡 到Kubelet动态配置的beta版本的状态,该状态首次出现在
K8s 1.8中,并且需要进行多项更改(您可以在
原始的 Dynamic Kubelet Configuration票证中进行跟踪)。 此功能允许在活动的工作群集上推出新的
Kubelet配置(与以前的情况相反,当
Kubelet的设置通过命令行标志传递时)。 要使用它,必须设置
--dynamic-config-dir
选项(当
Kubelet启动时)。
cri-tools项目已宣布稳定。 它为系统管理员提供了工具,使您可以分析和调试生产中节点的操作,而不管使用的容器运行时如何。 带有它的软件包(
crictl
)现在与其余的
kubeadm实用程序一起提供(DEB和RPM格式)。
在最近的一篇关于容器与Kubernetes集成的文章中 ,我们替代了“传统的” Docker,从而详细介绍了crictl
的用途和功能。
项目文档中使用crictl
示例Linux上对
Sysctls
实验
支持 已转换为beta状态(默认情况下使用
Sysctls
功能标记启用)。
PodSecurityPolicy
和
Pod
对象具有用于指定/控制
PodSecurityPolicy
特殊字段。
同样,在
ResourceQuota
可以指定一个优先级类(在这种情况下,配额仅适用于具有该类的
ContainersReady
-有关详细信息,请参阅
设计建议 ),并且
ContainersReady
条件已
添加到
ContainersReady
的状态。
权利与担保
K8s 1.9中引入的
ClusterRole Aggregation功能使您可以向现有(包括自动创建的)角色添加
权限 ,该功能被声明为稳定,无需进行任何更改。 还为cluster-
ClusterRole
(
ClusterRole
)
添加了一个单独的角色-它代替系统(
cluster-admin )使用。
朝着集群内部正在发生的事情(以及原因)透明的方向进行了许多工作。 特别是,审核日志中的RBAC信息现在
包含 事件的附加注释 :
authorization.k8s.io/decision
allow
或forbid
;authorization.k8s.io/reason
易于理解的决策原因。
同样在审核日志中,以注释
podsecuritypolicy.admission.k8s.io/admit-policy
和
podsecuritypolicy.admission.k8s.io/validate-policy
的形式
添加了有关从
PodSecurityPolicy
访问的信息(允许使用什么策略?)。
控制台实用程序
Kubernetes CLI工具中提出了许多改进(尽管不那么重要,但很有用!)。
- 新的
kubectl wait
命令 kubectl wait
删除指定资源或达到特定条件的时刻。 - 新的
kubectl api-resources
命令可查看资源:

- 对
kubectl cp
自动完成支持。 - base64decode函数已在
base64decode
Go模板中提供,其名称说明base64decode
。 - 在
kubectl patch
增加了对--dry-run
标志的kubectl patch
。 --match-server-version
标志--match-server-version
成为全局标志kubectl version
也将其考虑在内。kubectl config view --minify
现在考虑了全局context
标志。kubectl apply --prune
资源支持添加到kubectl apply --prune
CronJob
。
其他变化
- 调度程序( kube-scheduler ) 学习了如何在
DaemonSet
(alpha版本)中计划pod。 - 可以为炉床(alpha版本)中的容器指定特定的系统用户组(
RunAsGroup
)。 - 能够 删除
CustomResources
孤儿( 删除孤儿 )。 - Windows上对炉床和容器的Kubernetes API支持的改进-为炉床,容器和具有日志,安全性上下文
run_as_user
,本地常量卷和Azure驱动器的fstype的文件系统添加了指标。 - Azure 添加了对标准SKU负载平衡器和公共IP的支持。
相容性
- etcd的受支持版本为3.2.18(Kubernetes 1.10为3.1.12)。
- Docker的验证版本-从1.11.2到1.13.1和17.03.x(自K8s 1.10发行以来未更改)。
- Go版本为1.10.2(而不是1.9.3),最低支持为1.9.1。
- CNI版本是0.6.0。
- CSI版本为0.3.0(而不是0.2.0)。
聚苯乙烯
另请参阅我们的博客: