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 日 |
#56 in 模拟器
23,928 个星标 & 326 个关注者
175KB
4K SLoC

我们的使命是使容器和函数工作负载能够实现安全、多租户和最小开销的执行。
了解更多关于 Firecracker 宪章 这里。
什么是 Firecracker?
火柴人是一个开源的虚拟化技术,专为创建和管理提供无服务器操作模型的安全、多租户容器和基于函数的服务而设计。火柴人在轻量级虚拟机(称为微虚拟机)中运行工作负载,这些微虚拟机结合了硬件虚拟化技术提供的安全和隔离属性以及容器的速度和灵活性。
概述
火柴人的主要组件是一个虚拟机监视器(VMM),它使用Linux内核虚拟机(KVM)来创建和运行微虚拟机。火柴人采用简约设计。它排除了不必要的设备和面向客户的函数,以减少每个微虚拟机的内存占用和攻击面。这提高了安全性,减少了启动时间,并增加了硬件利用率。火柴人也被集成到容器运行时中,例如 Kata Containers 和 Weaveworks Ignite。
火柴人是亚马逊网络服务开发出来以加快像 AWS Lambda 和 AWS Fargate 这样的服务的速度和效率的。火柴人是在 Apache 2.0 许可下开源的。
要了解更多关于火柴人的信息,请访问 firecracker-microvm.io。
入门
要开始使用火柴人,请下载最新的 版本 二进制文件或从源代码构建它。
您可以在任何运行Docker(我们使用开发容器)并安装了 bash
的Unix/Linux系统上构建火柴人,如下所示
git clone https://github.com/firecracker-microvm/firecracker
cd firecracker
tools/devtool build
toolchain="$(uname -m)-unknown-linux-musl"
火柴人二进制文件将被放置在 build/cargo_target/${toolchain}/debug/firecracker
。有关构建、测试和运行火柴人的更多信息,请参阅 快速入门指南。
火柴人微虚拟机的整体安全性,包括满足安全多租户计算标准的能力,取决于配置良好的Linux主机操作系统。我们认为满足这一标准的一个配置包含在 生产主机设置文档 中。
贡献
火柴人已经在AWS中运行生产工作负载,但我们的 使命 才是第一天。还有更多要构建的,我们欢迎所有贡献。
要为火柴人做出贡献,请查看 入门指南 中的开发设置部分,然后是火柴人的 贡献指南。
版本
新的火柴人版本通过GitHub存储库的 版本 页面发布,通常每两个月或三个月发布一次。变更历史记录在我们的 变更日志 中。
火柴人的发布策略在此 处 详细说明。
设计
火柴人的整体架构在 设计文档 中描述。
特性和功能
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社区
- 关于安全问题,请参阅我们的安全策略文档。
- 在我们的Slack工作区与我们聊天注意:大部分维护者处于欧洲时区。
- 在此存储库中打开GitHub问题。
- 通过firecracker-maintainers@amazon.com给维护者发邮件。
在Firecracker社区内部沟通时,请注意我们的行为准则。
依赖项
~3–12MB
~141K SLoC