Kubernetes 1.12:主要创新概述



今天是9月27日,这意味着在工作时间(根据美国时区),我们可以期待Kubernetes的下一个发布-1.12(但是,其正式发布有时会延迟)。 总的来说,是时候继续光荣的传统并讲述最重要的变化了,我们将根据项目的公共信息来进行这些更改: Kubernetes功能跟踪表 CHANGELOG-1.12 ,众多问题,请求和设计建议。 那么K8s 1.12有什么新功能?

仓储设施


如果您在与Kubernetes 1.12发行相关的所有问题中比其他任何事物都提到更多的事情,那么可能是我们已经在前一天写过Container Storage Interface(CSI) 。 因此,让我们从更改存储支持开始。

这样 CSI插件 将保持 beta状态,并有望在下一个Kubernetes版本(1.13)中保持稳定。 CSI支持有哪些新功能?

今年2月,有关CSI 概念本身的拓扑概念的工作 开始了。 简而言之,拓扑是有关群集分段的信息(例如,对于本地安装,按“机架”,对于云环境,按“区域”和“区域”),业务流程系统需要了解和考虑这些信息。 怎么了 存储提供商分配的卷不一定在整个群集中都可以平等访问,因此,拓扑知识对于有效地计划资源和做出配置决策是必需的。

CSI(6月1日在规范中采用)中出现的拓扑结果是它们在Kubernetes 1.12中的支持:


但这并没有以CSI相关的更新结束。 Kubernetes 1.12发行版中的另一个重要创新是支持 CSI 快照 (处于alpha状态时)。 这样的卷快照出现在K8s 1.8发行版中 。 决定将包括控制器和配置程序(两个单独的二进制文件)在内的主要实现转移到外部存储库中 。 从那时起,添加了对GCE PD,AWS EBS,OpenStack Cinder,GlusterFS和Kubernetes hostPath

新的设计建议旨在“通过添加对CSI Volume Drivers的快照支持来继续这一计划”( 此处描述了CSI规范中的快照支持)。 由于Kubernetes坚持在核心API中包含最少功能集的原则,因此该实现(对于Volume Snapshot Controller中的快照)使用CRD( CustomResourceDefinitions )。

还有CSI驱动程序的几个新功能:

  • 驱动程序具有Alpha版本的能力,可以在Kubernetes API中进行自身注册 (以使用户更容易找到集群中安装的驱动程序,并允许驱动程序影响Kubernetes与它们的交互过程);
  • 驱动程序的alpha版本,可以通过NodePublish 接收有关请求卷的驱动器的信息

在最新的Kubernetes版本中引入了一种机制 ,该机制用于动态限制从alpha迁移到beta的节点上的卷, 接收 ...您猜对了,支持CSI以及Azure。

最后,声明了Mount名称空间传播功能,该功能允许您以rshared方式挂载卷(以便在主机上可见所有已挂载的容器目录),并且在K8s 1.10发行版中处于beta状态。

策划人


在调度程序中,由于适用于调度炉床的节点(可行节点)群集中搜索限制机制的alpha版本,Kubernetes 1.12改善了性能。 以前,对于每次尝试规划每个Pod的尝试, kube-scheduler都会检查所有节点的可用性并将其传递给评估,但是现在调度程序将仅找到一定数量的节点,然后停止其工作。 同时,该机制提供了对来自不同区域和区域的节点的强制选择,以及需要在不同的计划周期中查看不同的节点(不要选择每个开始的前100个节点)。 根据调度程序性能的数据分析结果,决定实施此机制(如果90%的炉膛时间为30毫秒,那么99%的炉膛时间已为60毫秒)。

此外,调度程序的以下功能已经成熟到beta版本:

  • 通过Condition来污染节点 ,该节点出现在K8s 1.8中,并允许在某些事件发生时以某种状态标记节点(以采取进一步的措施):现在,该节点的生命周期控制器会自动创建污点,并且调度程序会对其进行检查(而不是条件 );
  • 使用kube-scheduler (而不是DaemonSet控制器)在DaemonSet进行炉床调度:默认情况下,它也处于活动状态;
  • ResourceQuota 指定优先级类

集群节点


一个有趣的创新是RuntimeClass的出现(处于alpha版本状态)-一种新的群集级资源,旨在服务容器运行时(容器运行时)的参数。 RuntimeClasses通过PodSpec的同一字段分配给Pod,并实现了对在群集或节点内使用多个可执行环境的支持。 怎么了

“在集群中使用不同的运行时的兴趣正在增长。 目前,这样做的主要动机是沙箱以及Kata和gVisor容器与Kubernetes集成的愿望。 将来,其他运行时模型(例如Windows容器甚至远程运行时环境)也将需要支持。 RuntimeClass提供了一种在集群中配置的不同运行时之间进行选择并更改其属性(由集群和用户共同选择)的方法。”

要在预定义的配置之间进行选择, RuntimeHandler传递到CRI(容器运行时接口),以替换炉膛的当前注释:



并且为kata-runtime打包的容器中的配置如下所示:

 [plugins.cri.containerd.kata-runtime] runtime_type = "io.containerd.runtime.v1.linux" runtime_engine = "/opt/kata/bin/kata-runtime" runtime_root = "" 

Alpha版本的RuntimeClass条件是成功的CRI验证

此外, 用于KubeletshareProcessNamespace 注册本地插件 (包括CSI)的shareProcessNamespace (该功能默认情况下已启用)已发展为Beta版。

网路


Kubernetes网络部分的主要新闻是SCTP (流控制传输协议) 支持Alpha版本 。 受到PodServiceEndpointNetworkPolicy的支持 ,该电信协议已加入TCP和UDP的行列。 通过新功能“需要将SCTP作为其接口的L4协议的应用程序,将更易于在Kubernetes集群上进行部署; 例如,他们将能够使用基于kube-dns的服务发现,并且它们的交互将通过NetworkPolicy进行控制。“ 实现细节可在本文档中找到

K8s 1.8中引入的两个网络功能也达到了稳定的状态:在NetworkPolicy API中支持用于传出EgressRules流量的策略 ,并通过ipBlockRule CIDR 规则应用于源/目标。

缩放比例


对水平Pod自动定标器的改进包括:


炉膛垂直缩放比例在达到Beta版本之前还没有经过用户测试,因此并未停滞不前。 作者认为这足以发布K8s 1.12,并回忆起此功能很可能是Kubernetes的新增功能(内核中未包含)。 所有开发都在单独的存储库中进行,在该存储库中,beta版本的发布时间将与Kubernetes的发布时间保持一致。


Kubernetes的垂直Pod自动缩放器(VPA)工作流程

最后,K8s 1.12包含了(以alpha形式)“使用ComponentConfig简化安装”(作为sig-cluster-lifecycle的一部分)的工作结果,该工作已经进行了将近两年。 不幸的是,由于某种原因(一个简单的疏忽?),匿名用户无法访问带有详细信息的设计建议文档

其他变化


API


api-machinery组中实现了两个新功能:

  • apiserver(alpha版)的 dry-run ,它模仿请求的验证和处理;
  • 资源配额API (立即为beta),用于定义默认情况下受限制的资源 (而不是如果未设置配额则在资源消耗不受限制时的当前行为)。

蔚蓝


声明为稳定:

  • 支持 Azure虚拟机规模集(VMSS);
  • 群集自动缩放器中的Azure 支持

添加了第一个实现(alpha版本):


Kubectl


  • 实现更新插件机制的Alpha版,它允许您添加新命令或重写任何嵌套级别的现有子命令。 它的制作类似于Git,并在用户的$PATH查看以kubectl-开头的可执行文件。 有关更多详细信息,请参见设计建议
  • 已实现 pkg/kubectl/genericclioptions genericclioptions pkg/kubectl/genericclioptions从kubectl隔离到独立存储库中的想法的 beta版本。
  • 服务器端打印功能已声明稳定。

其他


  • 介绍了新的TTL结束机制的alpha版本,该机制旨在限制完成执行的JobsPod的寿命。 在指定的TTL过期之后,无需用户干预即可自动清除对象。
  • 声明在Kubelet的群集级别上用于签名证书的私钥和CSR(TLS引导程序)的生成是稳定的。
  • 服务器TLS证书在Kubelet中的轮换进入beta状态。

聚苯乙烯


另请参阅我们的博客:

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


All Articles