Kubernetes v1.12:RuntimeClass简介

作者 :蒂姆·阿克莱尔(Google)

Kubernetes 最初是为了支持在Linux主机上运行本机应用程序的Docker容器而创建的。从...开始 t 在Kubernetes 1.3中,更多的运行时即将到来,这导致了 容器运行时界面 (CRI)。从那以后,替代运行时的集合仅扩展了: 卡塔集装箱 gVisor 宣布加强工作负载隔离,并且Kubernetes对Windows的支持 稳步发展.

由于针对许多不同用例的运行时,明显需要在集群中使用混合运行时。但是,所有这些不同的容器运行方式都带来了一系列新问题要处理:

  • 用户如何知道哪些运行时可用,并为他们的工作负载选择运行时?
  • 我们如何确保将Pod调度到支持所需运行时的节点上?
  • 哪些运行时支持哪些功能,我们如何向用户显示不兼容性?
  • 我们如何考虑运行时的各种资源开销?

运行时类 旨在解决这些问题。

Kubernetes 1.12中的RuntimeClass

最近,RuntimeClass在Kubernetes 1.12中作为alpha功能引入。最初的实现侧重于提供运行时选择API,并为解决其他未解决的问题铺平了道路。

运行时类 资源代表Kubernetes集群中支持的容器运行时。集群配置器设置,配置和定义支持RuntimeClass的具体运行时。在当前形式下,RuntimeClassSpec包含一个字段,即 运行时处理程序 。 运行时处理程序 由在节点上运行的CRI实现解释,并映射到实际的运行时配置。同时,PodSpec扩展了一个新领域, 运行时类 Name ,它命名了用于运行Pod的RuntimeClass。

为什么RuntimeClass是pod级别的概念? Kubernetes 资源模型期望Pod中的容器之间可以共享某些资源。如果吊舱由具有不同资源模型的不同容器组成,那么支持必要级别的资源共享就变得非常困难。例如,要跨VM边界支持回送(localhost)接口非常困难,但这是Pod中两个容器之间通信的通用模型。

下一步是什么?

运行时类 资源是将运行时属性显示到控制平面的重要基础。例如,要对具有支持不同运行时间的异构节点的集群实施调度程序支持,我们可以添加 节点亲和力 运行时类 定义的术语。另一个需要解决的领域是管理可变资源需求以运行不同运行时的Pod。的 广告连播架空提案 这是与RuntimeClass设计非常吻合的早期尝试,并且可能会进一步推广。

还提出了许多其他RuntimeClass扩展,并将随着功能的不断发展和成熟而重新讨论。正在考虑的其他扩展包括:

  • 显示运行时支持的可选功能,并更好地查看由不兼容功能导致的错误。
  • 自动运行时或功能发现,无需手动配置即可支持调度决策。
  • 标准化或一致的RuntimeClass名称,用于定义一组具有相同名称的RuntimeClass的群集应支持的属性。
  • 动态注册其他运行时,因此用户无需停机即可在现有群集上安装新的运行时。
  • 将“运行时类”“适配”到窗格的要求。例如,指定运行时属性并使系统与适当的RuntimeClass匹配,而不是通过名称显式分配RuntimeClass。

至少要到2019年,RuntimeClass才会得到积极的开发,我们很高兴看到此功能得以形成,从Kubernetes 1.12中的RuntimeClass alpha开始。

学到更多