一、背景
容器时代
2013年,docker技术出现,容器技术进入快速发展的时代。容器使用Linux系统隔离模型,其中包括名称空间和cgroup。Container是Docker唯一的一等公民。
后来,kubernetes项目成为容器编排级别的主流。因此,引入了“Pause”容器,以容纳Kubernetes中的一流公民“Pod”。
但“Pause”容器实际上非常令人困惑。因为pod不仅仅是一个只提供共享网络命名空间的“Pause”容器。相反,它是多个容器的逻辑和物理集合。
此外,在容器运行时中有许多不必要且复杂的逻辑判断来区分用户的容器和“Pause”容器,这也无形中增加了开发的难度。
沙箱崛起
2018年前后,各种云原生容器隔离技术逐渐出现。我们称这种技术为“沙箱”
沙箱是一个自然的POD模型。它为一组容器提供了一个隔离的环境。
有一些典型的沙箱:microVM沙箱、App kernel沙箱和WASM沙箱。
它们是为不同云原生场景下的企业需求而生,因此具有不同的优势。
microVM沙箱适用于安全和一般的多租户情况。App Kernel沙箱适用于高效和通用的多租户情况。WASM沙箱适用于非常轻的任务情况,如函数计算。
现在,主流云供应商正在其产品中使用多种沙盒技术。但是,没有一个容器运行时可以同时直接运行上面提到的沙盒。
因此,用户必须维护多个容器运行时来管理不同的沙箱,这增加了O&M(操作和维护)的压力。
此外,由于当前的容器运行时缺乏流畅的进化路径,大多数企业仍处于原地踏步,无法将行业最新的沙盒技术集成到其产品中
去年,主流容器运行时“containerd”,在社区的声音下,在预览版中引入了Sandbox API。
我们非常确信沙箱会是,它应该是容器运行时中的一个新的一等公民。
二、Kuasar是什么
Kuasar是华为开源的支持多种沙箱技术的容器运行时项目。
Kuasar中的沙箱使用自己的容器隔离技术,它们也是基于新的沙箱插件机制构建的容器的外部插件。
下面是kuasar的架构
从图中可以看出,高级别的容器运行时,像containerd、CRI-O、docker,是CRI的实现,同时管理镜像
kuasar是低级别的容器运行,主要进行沙箱&容器的生命周期管理
Kuasar通过沙箱插件和沙箱API连接高级容器运行时。sandboxer插件在高级运行时引入了沙箱概念,使沙盒成为“一等公民”。沙箱API提供了高效且可扩展的API来管理各种沙箱。
Sandbox api据说在containerd 2.0中引入
Kuasar组件
Kuasar-sandboxer
Kuasar-sandboxer实现了sandbox的API,用于沙箱的生命周期管理和资源分配
Kuasar-Task
Kuasar-Task实现了Task API,它响应来自高级容器运行时的请求,然后管理用户容器的生命周期和资源分配
Kuasar的优势
相对其它容器运行时,Kuasar具有以下优势:
- 统一的沙箱抽象
Kuasar使沙箱成为一等的公民,为沙箱的访问和管理提供了统一的方式,提高了沙箱的运维效率。
- 多沙箱托管
Kuasar内置了对主流沙箱的支持,包括Cloud Hypervisor、WasmEdge等,并支持在单个节点上运行多个沙箱。
- 框架优化
Kuasar引入了一个驻留的sandboxer进程来取代所有的shim进程,提供了2倍的启动速度和减少99%的开销。
- 开放中立
Kuasar致力于建立一个开放、中立的多沙箱技术生态系统。
Kuasar欢迎所有沙箱技术。
- Rust编写
Kuasar完全用Rust编写,这意味着高性能、高安全性和低开销。
- 清除设备管理逻辑
Kuasar具有清晰的沙箱设备管理逻辑,不再与容器的混淆,有效减少了资源剩余问题。
Kuasar目前支持的沙箱
目前,Kuasar提供了三种类型的沙箱——MicroVM沙箱、App kernel沙箱和Wasm沙箱——所有这些都已被证明是多租户环境中的安全隔离技术。
沙箱的一般架构由两个模块组成:一个模块实现沙箱API以管理沙箱的生命周期,另一个模块则实现任务API以处理与容器相关的操作。
MicroVM Sandboxer
在microVM沙盒场景中,VM进程提供了完整的虚拟机和基于开源VM的Linux内核,如Cloud Hypervisor、StratoVirt、Firecracker和QEMU。因此,MicroVM sandboxer的vmm sandboxer负责启动VM和调用API,而vmm任务作为VM中的init进程,扮演着运行容器进程的角色。容器IO可以通过vsock或uds导出。
microVM沙盒避免了在主机上运行shim process的必要性,带来了一个更清洁、更易于管理的架构,每个pod只有一个进程。
App Kernel Sandboxer
应用程序内核沙箱启动KVM虚拟机和guest内核,而没有任何应用程序级管理程序或Linux内核。这允许进行自定义优化,以加快启动过程,减少内存开
销,并提高IO和网络性能。此类应用程序内核沙箱的示例包括gVisor和Quark。
Quark是一个应用程序内核沙箱,它使用自己的名为QVisor的管理程序和名为QKernel的自定义内核。通过对这些组件进行自定义修改,Quark可以获得
显著的性能。应用程序内核的Quark沙箱启动Qvisor和一个名为Qkernel的应用程序内核。每当containerd需要在沙箱中启动一个容器时,QVisor中的夸克任务就会调用Qkernel来启动一个新的容器。同一pod中的所有容器都将在同一进程中运行。
Quark Container是具有以下功能的高性能安全容器运行时:
OCI兼容:Quark Container包括一个开放容器倡议(OCI)接口。公共Docker容器映像可以在Quark container中运行。
安全:它提供虚拟机级别的工作负载隔离和安全性。
高性能:Quark Container是为具有高性能的容器工作负载执行而诞生的。它是用Rust编程语言开发的。
Wasm Sandboxer
wasm沙盒,如WasmEdge或Wasmtime,非常轻量,但目前可能对一些应用程序有限制。wasm sandboxer和wasm任务在WebAssembly运行时内启动容器。每当containerd需要在沙箱中启动一个容器时,wasm任务就会派生一个新进程,启动一个新的WasmEdge运行时,并在其中运行wasm代码。同一pod中的所有容器都将与wasm任务进程共享相同的Namespace/Cgroup资源。
Quark Container是具有以下功能的高性能安全容器运行时:
OCI兼容:Quark Container包括一个开放容器倡议(OCI)接口。公共Docker容器映像可以在Quark container中运行。
安全:它提供虚拟机级别的工作负载隔离和安全性。
高性能:Quark Container是为具有高性能的容器工作负载执行而诞生的。它是用Rust编程语言开发的。
Roadmap
三、Kuasar能带来什么
在云原生技术发蓬勃发展的时代,底层承载应用的容器很重要,单一的runc容器已经无法满足各种场景的要求,比如对安全要求更高的场景、Serverless场景,都需要不同的容器形态来承载,从而产生了不同的沙箱技术。k8s事实已经成为容器编排调度的标准,作为连接容器和k8s纽带的运行时技术就显得十分关键,如何统一抽象不同的容器运行时,Kuasar给出了一种思路。
附:
Kuasar官方主页:https://kuasar.io/