Kubernetes 1.11:主要创新概述


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中,现在可以使用namespaceSelectorpodSelector在其他命名namespaceSelector 指定特定的podSelector
  • 服务现在可以在不同接口(在--nodeport-addresses指定) 上的相同主机端口上--nodeport-addresses
  • 修复了一个错误,该错误导致使用--node-ip--node-ip停止报告ExternalDNSInternalDNSExternalIP

仓储设施


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功能标记启用)。 PodSecurityPolicyPod对象具有用于指定/控制PodSecurityPolicy特殊字段。

同样,在ResourceQuota可以指定一个优先级类(在这种情况下,配额仅适用于具有该类的ContainersReady -有关详细信息,请参阅设计建议 ),并且ContainersReady条件已添加ContainersReady的状态。

权利与担保


K8s 1.9中引入的ClusterRole Aggregation功能使您可以向现有(包括自动创建的)角色添加权限 ,该功能被声明为稳定,无需进行任何更改。 还为cluster- ClusterRoleClusterRole添加了一个单独的角色-它代替系统( cluster-admin )使用。

朝着集群内部正在发生的事情(以及原因)透明的方向进行了许多工作。 特别是,审核日志中的RBAC信息现在包含 事件的附加注释

  • authorization.k8s.io/decision allowforbid
  • authorization.k8s.io/reason易于理解的决策原因。

同样在审核日志中,以注释podsecuritypolicy.admission.k8s.io/admit-policypodsecuritypolicy.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)。

聚苯乙烯


另请参阅我们的博客:

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


All Articles