kuasar-io/kuasar

GitHub: kuasar-io/kuasar

Kuasar 是一个基于 Rust 的多沙箱容器运行时,通过统一的 Sandbox API 让单个节点上混部多种隔离技术并显著降低资源开销和启动延迟。

Stars: 1437 | Forks: 118

![](https://static.pigsec.cn/wp-content/uploads/repos/cas/32/325ff8dedc963b2870af3522d46842b2be8b2b2507961d3f21ae357158762e56.png)

GitHub Workflow Status chat supported rustc stable GitHub GitHub contributors FOSSA Status

Kuasar 是一个高效的容器 runtime,通过支持多种沙箱技术,提供云原生、全场景的容器解决方案。它使用 Rust 编写,基于 sandbox API 提供了标准的沙箱抽象。此外,Kuasar 还提供了一个优化的框架,以加速容器启动并减少不必要的开销。 ## 目录 - [支持的沙箱](#supported-sandboxes) - [为什么选择 Kuasar?](#why-kuasar) - [Kuasar 架构](#kuasar-architecture) - [MicroVM Sandboxer](#microvm-sandboxer) - [App Kernel Sandboxer](#app-kernel-sandboxer) - [Wasm Sandboxer](#wasm-sandboxer) - [Runc Sandboxer](#runc-sandboxer) - [性能](#performance) - [快速开始](#quick-start) - [前置条件](#prerequisites) - [从源码构建](#build-from-source) - [启动 Kuasar](#start-kuasar) - [启动容器](#start-container) - [联系](#contact) - [贡献](#contributing) - [许可证](#license) # 支持的沙箱 | Sandboxer | Sandbox | 状态 | |------------|------------------|-----------------| | MicroVM | Cloud Hypervisor | 已支持 | | | QEMU | 已支持 | | | Firecracker | 计划于 2025 年 | | | StratoVirt | 已支持 | | Wasm | WasmEdge | 已支持 | | | Wasmtime | 已支持 | | App Kernel | Quark | 已支持 | | runC | runC | 已支持 | # 为什么选择 Kuasar? 在容器世界中,沙箱是一种用于将容器进程彼此隔离,并与操作系统本身隔离的技术。随着 [Sandbox API](https://github.com/containerd/containerd/issues/4131) 的引入,沙箱已成为 containerd 中的一等公民。随着容器世界中出现越来越多的沙箱技术,期望能提出一种名为“sandboxer”的管理服务。 Kuasar 支持多种类型的 sandboxer,使得用户可以根据应用需求为每个应用选择最合适的 sandboxer。 与其他容器 runtime 相比,Kuasar 具有以下优势: + **统一的沙箱抽象**:由于 Kuasar 完全基于 containerd 社区于 2022 年 10 月预览的 Sandbox API 构建,沙箱在 Kuasar 中是一等公民。Kuasar 充分利用了 Sandbox API 的优势,为沙箱的访问和管理提供了统一的方式,提高了沙箱的运维效率。 + **多沙箱混部**:Kuasar 内置支持主流沙箱,允许在单个节点上运行多种类型的沙箱。Kuasar 能够平衡用户对安全隔离、快速启动和标准化的需求,并使 serverless 节点资源池能够满足各种云原生场景需求。 + **优化的框架**:Kuasar 通过移除所有 pause 容器并用单个常驻 sandboxer 进程替代 shim 进程进行了优化,带来了 1:N 的进程管理模型,其性能优于当前的 1:1 shim v2 进程模型。基准测试结果表明,Kuasar 的沙箱启动速度提升了 2 倍,同时管理的资源开销减少了 99%。更多详细信息请参阅[性能](#performance)。 + **开放与中立**:Kuasar 致力于构建一个开放且兼容的多沙箱技术生态系统。得益于 Sandbox API,集成沙箱技术变得更加便捷和省时。Kuasar 对沙箱技术保持开放和中立的态度,因此欢迎所有的沙箱技术。目前,Kuasar 项目正在与 WasmEdge、openEuler 和 QuarkContainers 等开源社区和项目进行合作。 # Kuasar 架构 ![arch](https://static.pigsec.cn/wp-content/uploads/repos/cas/28/28d3bd6d5859953f5bb8c7adda30e2c1b966fb4349670f741aa85898014ec7b0.png) Kuasar 中的 sandboxer 对容器使用各自的隔离技术,它们也是基于新的沙箱插件机制构建的 containerd 外部插件。在这个 [Containerd issue](https://github.com/containerd/containerd/issues/7739) 中发起了一项关于 sandboxer 插件的讨论,并在该[评论](https://github.com/containerd/containerd/issues/7739#issuecomment-1384797825)中附带了社区会议记录和幻灯片。现在此功能已纳入 2.0 里程碑。 目前,Kuasar 提供了三种类型的 sandboxer —— **MicroVM Sandboxer**、**App Kernel Sandboxer** 和 **Wasm Sandboxer** —— 所有这些均已被证明是多租户环境下的安全隔离技术。sandboxer 的总体架构由两个模块组成:一个是实现 Sandbox API 以管理沙箱生命周期的模块,另一个是实现 Task API 以处理容器相关操作的模块。 此外,Kuasar 也是一个正在积极开发的平台,我们欢迎在它之上构建更多的 sandboxer,例如 Runc sandboxer。 ## MicroVM Sandboxer 在 microVM 沙箱场景中,VM 进程基于 [Cloud Hypervisor](https://www.cloudhypervisor.org/)、[StratoVirt](https://gitee.com/openeuler/stratovirt)、[Firecracker](https://firecracker-microvm.github.io/) 和 [QEMU](https://www.qemu.org/) 等开源 VMM 提供完整的虚拟机和 Linux 内核。**所有这些 vm 必须在启用虚拟化的节点上运行,否则无法工作!**。因此,MicroVM sandboxer 的 `vmm-sandboxer` 负责启动 VM 并调用 API,而 `vmm-task` 作为 VM 中的 init 进程,扮演运行容器进程的角色。容器 IO 可以通过 vsock 或 uds 导出。 microVM sandboxer 避免了在主机上运行 shim 进程的必要性,从而带来了更简洁、更易于管理的架构,每个 pod 只有一个进程。 ![vmm](https://static.pigsec.cn/wp-content/uploads/repos/cas/78/783acd6dcdb8b1bc7d93942d0fc1b311c4015ea7f4990aa083c0d9adf691d1fb.png) *请注意目前仅支持 Cloud Hypervisor、StratoVirt 和 QEMU。* ## App Kernel Sandboxer App kernel 沙箱启动一个 KVM 虚拟机和客户机内核,无需任何应用级的 hypervisor 或 Linux 内核。这允许进行定制化优化,以加快启动过程、减少内存开销,并提高 IO 和网络性能。此类 app kernel 沙箱的示例包括 [gVisor](https://gvisor.dev/) 和 [Quark](https://github.com/QuarkContainer/Quark)。 Quark 是一个应用内核沙箱,它利用名为 `QVisor` 的自有 hypervisor 和名为 `QKernel` 的定制化内核。通过对这些组件进行定制化修改,Quark 可以实现显著的性能提升。 App kernel sandboxer 的 `quark-sandboxer` 启动 `Qvisor` 和名为 `Qkernel` 的 app kernel。每当 containerd 需要在沙箱中启动容器时,`QVisor` 中的 `quark-task` 将调用 `Qkernel` 来启动一个新容器。同一个 pod 内的所有容器都将在同一个进程内运行。 ![quark](https://static.pigsec.cn/wp-content/uploads/repos/cas/bd/bd8844c7ce244c24f7f8472bd538558c302a7912f60d77d41e722b9912dc56a2.png) *请注意目前仅支持 Quark。* ## Wasm Sandboxer Wasm 沙箱(例如 [WasmEdge](https://wasmedge.org/) 或 [Wasmtime](https://wasmtime.dev/))极其轻量,但目前它可能对某些应用程序有限制。`wasm-sandboxer` 和 `wasm-task` 在 WebAssembly runtime 中启动容器。每当 containerd 需要在沙箱中启动容器时,`wasm-task` 将 fork 一个新进程,启动一个新的 WasmEdge runtime,并在其中运行 Wasm 代码。同一个 pod 内的所有容器将与 `wasm-task` 进程共享相同的 Namespace/Cgroup 资源。 ![wasm](https://static.pigsec.cn/wp-content/uploads/repos/cas/fb/fb031b5ac673ac738ccea47326649a50eff154025e8fef3b62cc7942b7127cf2.png) ## Runc Sandboxer 除了安全容器之外,Kuasar 还提供了对 [runC](https://github.com/opencontainers/runc) 容器的支持。为了生成一个单独的 namespace,`runc-sandboxer` 通过双重 fork 创建了一个轻量级进程,然后使其成为 PID 1。基于这个 namespace,`runc-task` 可以创建容器进程并加入该 namespace。如果容器需要私有的 namespace,它将为自身 unshare 一个新的 namespace。 ![wasm](https://static.pigsec.cn/wp-content/uploads/repos/cas/23/2355ee2cca34fab88bd5f4c0af782533bfe27938143a3c8ca1b29a04c8f3c32b.png) # 性能 Kuasar 的性能通过两个指标来衡量: + 端到端容器启动时间。 + 运行容器的进程内存消耗。 我们在基准测试中使用了 Cloud Hypervisor,并测试了在串行和并行场景下 100 个 POD 的启动时间。结果表明,在启动速度和内存消耗方面,Kuasar 的性能均优于开源的 [Kata-containers](https://github.com/kata-containers/kata-containers)。 有关详细的测试脚本、测试数据和结果,请参阅[基准测试](tests/benchmark/Benchmark.md)。 # 快速开始 ## 前置条件 ### 1. 操作系统 Kuasar 支持的 Linux 发行版最低版本为 *Ubuntu 22.04* 或 *CentOS 8* 或 openEuler 23.03。 另请注意,Quark 要求 Linux 内核版本 >= 5.15。 ### 2. 沙箱 + MicroVM:要启动基于 microVM 的沙箱,必须在**启用了虚拟化**的主机上安装 hypervisor。 + 建议默认安装 Cloud Hypervisor。您可以[在此处](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/main/docs/building.md)找到 Cloud Hypervisor 的安装说明。 + 如果您想使用 iSulad 容器引擎和 StratoVirt hypervisor 运行 kuasar,可以参考此指南 [how-to-run-kuasar-with-isulad-and-stratovirt](docs/vmm/how-to-run-kuasar-with-isulad-and-stratovirt.md)。 + Quark:要使用 Quark,请参阅[此处](docs/quark/README.md)的安装说明。 + WasmEdge:要启动 WebAssembly 沙箱,您需要安装 WasmEdge v0.13.5。有关安装 WasmEdge 的说明,请参见 [install-a-specific-version-of-wasmedge](https://wasmedge.org/docs/start/install/#install-a-specific-version-of-wasmedge)。 ### 3. containerd Kuasar sandboxer 是 containerd 的外部插件,因此为了管理沙箱和容器,containerd 及其 CRI 插件都是必需的。 我们提供了两种方式将 Kuasar 与 containerd 结合使用: + **containerd 2.0 里程碑中的实验性功能**:如果您渴望获得 Kuasar 的完整体验,请安装 [kuasar-io 组织下的 containerd](docs/containerd.md)。请放心,我们的 containerd 是基于官方 v1.7.0 构建的,因此不必担心会缺失任何功能。 + 如果兼容性确实是一个问题,您需要安装官方的 containerd v1.7.0,并使用一个额外的 [kuasar-shim](shim) 进行请求转发,详见[此处](docs/shim/README.md)。但是,随着 containerd 2.0 的发展,这种方式未来可能会被弃用。 ### 4. crictl 由于 Kuasar 构建在 Sandbox API 之上,而该 API 已经集成到 containerd 的 CRI 中,因此从 CRI 层面体验 Kuasar 是很有意义的。 `crictl` 是用于 CRI 的调试 CLI。要安装它,请参见[此处](https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md#install-crictl) ### 5. virtiofsd 像 Cloud Hypervisor 这样的 MicroVM 需要 virtiofs 守护进程来共享主机上的目录。请参阅 [virtiofsd 指南](https://gitlab.com/virtio-fs/virtiofsd)。 ## 从源码构建 编译 Kuasar 需要 Rust 1.67 或更高版本。使用 root 用户进行构建: ``` git clone https://github.com/kuasar-io/kuasar.git cd kuasar make all make install ``` ## 启动 Kuasar 通过以下命令启动 sandboxer: + 对于 vmm:`nohup vmm-sandboxer --listen /run/vmm-sandboxer.sock --dir /run/kuasar-vmm &` + 对于 quark:`nohup quark-sandboxer --listen /run/quark-sandboxer.sock --dir /var/lib/kuasar-quark &` + 对于 wasm:`nohup wasm-sandboxer --listen /run/wasm-sandboxer.sock --dir /run/kuasar-wasm &` + 对于 runc:`nohup runc-sandboxer --listen /run/runc-sandboxer.sock --dir /run/kuasar-runc &` ## 启动容器 由于 Kuasar 是一个底层容器 runtime,所有的交互都应通过 containerd 中的 CRI(例如 crictl 或 Kubernetes)来完成。我们以 crictl 为例: + 对于 vmm、quark 或 runc,运行以下脚本: `examples/run_example_container.sh kuasar-vmm`、`examples/run_example_container.sh kuasar-quark` 或 `examples/run_example_container.sh kuasar-runc` + 对于 wasm:Wasm 容器需要自己的容器镜像,因此我们的脚本必须首先构建并导入容器镜像。 `examples/run_example_wasm_container.sh` # 联系 如果您有任何问题,请随时通过以下方式联系我们: - [邮件列表](https://groups.google.com/forum/#!forum/kuasar) - [slack](https://cloud-native.slack.com/archives/C052JRURD8V) | [加入](https://slack.cncf.io/) # 贡献 如果您有兴趣成为贡献者并想参与开发 Kuasar 代码,请参阅 [CONTRIBUTING](CONTRIBUTING.md) 了解有关提交补丁和贡献工作流的详细信息。 # 许可证 Kuasar 采用 Apache 2.0 许可证。详细信息,请参阅 [LICENSE](LICENSE) 文件。 Kuasar 文档采用 [CC-BY-4.0 许可证](https://creativecommons.org/licenses/by/4.0/legalcode)。
标签:Rust, WASM, 可视化界面, 子域名突变, 容器运行时, 微虚拟机, 沙箱, 网络流量审计, 身份验证强制, 通知系统