30 个版本 (稳定版)

1.7.0 2024 年 3 月 18 日
1.6.0 2023 年 12 月 20 日
1.5.0 2023 年 10 月 12 日
1.4.0 2023 年 7 月 20 日
0.24.2 2021 年 2 月 19 日

#49模拟器

23,928 个星标 & 326 个关注者

Apache-2.0

2.5MB
55K SLoC

包含 (ELF 可执行文件/库, 22MB) test_noisy_elf.bin、(ELF 可执行文件/库, 5KB) test_elf.bin

Firecracker Logo Title

我们的使命是使容器和函数工作负载能够以安全、多租户、最小开销的方式执行。

了解更多关于 Firecracker 宪章的信息 这里.

什么是 Firecracker?

Firecracker 是一种开源的虚拟化技术,专为创建和管理安全的多租户容器和基于函数的服务而设计,这些服务提供无服务器操作模型。Firecracker 在轻量级虚拟机(称为微虚拟机)中运行工作负载,结合了硬件虚拟化技术提供的安全和隔离特性,以及容器的速度和灵活性。

概述

Firecracker 的主要组件是一个虚拟机监控程序(VMM),它使用 Linux 内核虚拟机(KVM)来创建和运行微虚拟机。Firecracker 采用极简设计。它排除了不必要的设备和面向客机的功能,以减少每个微虚拟机的内存占用和攻击面。这提高了安全性,缩短了启动时间,并提高了硬件利用率。Firecracker 还已集成到容器运行时中,例如 Kata ContainersWeaveworks Ignite

Firecracker 是在 Amazon Web Services 上开发的,旨在加速 AWS Lambda 和 AWS Fargate 等服务的速度和效率。Firecracker 在 Apache 2.0 许可下开源。

要了解更多关于 Firecracker 的信息,请访问 firecracker-microvm.io

入门

要开始使用 Firecracker,请下载最新的 版本 二进制文件或从源代码构建它。

您可以在任何运行 Docker(我们使用开发容器)并安装了 bash 的 Unix/Linux 系统上构建 Firecracker,如下所示

git clone https://github.com/firecracker-microvm/firecracker
cd firecracker
tools/devtool build
toolchain="$(uname -m)-unknown-linux-musl"

Firecracker 二进制文件将放置在 build/cargo_target/${toolchain}/debug/firecracker。有关构建、测试和运行 Firecracker 的更多信息,请参阅 快速入门指南

Firecracker 微虚拟机的整体安全性,包括满足安全多租户计算标准的能力,取决于配置良好的 Linux 主机操作系统。我们认为符合这一标准的配置包含在 生产主机设置文档 中。

贡献

Firecracker 已在 AWS 中运行生产工作负载,但我们的 使命 还在第一天。还有很多东西要构建,我们欢迎所有贡献。

要为 Firecracker 贡献,请参阅 入门指南 中的开发设置部分,然后是 Firecracker 的 贡献指南

发布

Firecracker 的新版本通过 GitHub 仓库的 发布 页面发布,通常每两个月或三个月发布一次。变更历史记录在我们的 变更日志 中。

Firecracker 的发布策略在 这里 详细说明。

设计

Firecracker 的整体架构在 设计文档 中描述。

特性 & 功能

Firecracker由一个单一的微虚拟机管理器进程组成,一旦启动,就会向主机暴露一个API端点。该API以OpenAPI格式进行说明。有关更多信息,请参阅API文档

可以使用API端点进行以下操作:

  • 通过以下方式配置微虚拟机:
    • 设置vCPUs的数量(默认为1)。
    • 设置内存大小(默认为128 MiB)。
    • 配置CPU模板
  • 将一个或多个网络接口添加到微虚拟机中。
  • 将一个或多个可读写或只读磁盘添加到微虚拟机中,每个磁盘都由一个文件支持的块设备表示。
  • 在虚拟机运行时触发块设备的重新扫描。这使虚拟机操作系统能够检测到块设备支持文件的尺寸更改。
  • 在虚拟机启动前后更改块设备的支持文件。
  • 为virtio设备配置速率限制器,可以限制带宽、每秒操作次数或两者。
  • 配置日志和指标系统。
  • [BETA] 配置面向虚拟机的元数据服务的数据树。如果配置了此资源,则服务仅对虚拟机可用。
  • 向微虚拟机添加vsock套接字
  • 向微虚拟机添加熵设备
  • 使用指定的内核镜像、根文件系统和引导参数启动微虚拟机。
  • [仅限x86_64] 停止微虚拟机。

内置功能:

  • 默认启用需求故障页面和CPU超订阅。
  • 高级、线程特定的seccomp过滤器,以增强安全性。
  • Jailer进程用于在生产环境中启动Firecracker;应用cgroup/namespace隔离屏障然后丢弃权限。

测试平台

我们测试了以下所有组合:

实例 主机操作系统 & 内核 虚拟机根文件系统 虚拟机内核
c5n.metal al2 linux_4.14 ubuntu 22.04 linux_4.14
m5n.metal al2 linux_5.10 linux_5.10
m6i.metal al2023 linux_6.1
m6a.metal
m6g.metal
m7g.metal

已知问题和限制

  • aarch64上的pl031 RTC设备不支持中断,因此使用RTC闹钟(例如hwclock)的虚拟机程序将无法工作。

性能

Firecracker的性能特征作为规范文档的一部分列出。所有规范都是我们支持无服务器操作模型中的容器和函数工作负载的承诺的一部分,因此通过持续集成测试强制执行。

安全披露政策

Firecracker的安全性是我们的首要任务。如果您怀疑您已经发现了一个漏洞,请根据我们的安全策略文档私下联系我们;我们将立即优先考虑您的披露。

常见问题解答 & 联系方式

常见问题解答收集在我们的FAQ文档中。

您可以通过以下方式联系 Firecracker 社区

在 Firecracker 社区内进行沟通时,请遵守我们的行为准则


lib.rs:

利用基于 Linux 内核的虚拟机(KVM)和其他虚拟化特性来运行单个轻量级微虚拟机(microVM)的虚拟机监控器。

依赖项

~109MB
~3M SLoC