firecracker-microvm/firecracker
GitHub: firecracker-microvm/firecracker
Firecracker 是 AWS 开源的 microVM 虚拟化技术,将硬件虚拟化的强隔离性与容器的速度灵活性结合,为 serverless 和多租户场景提供安全高效的计算基础设施。
Stars: 32827 | Forks: 2272
我们的使命是实现容器和函数工作负载的安全、多租户、低开销执行。
请在[此处](CHARTER.md)阅读有关 Firecracker 宪章的更多内容。
## 什么是 Firecracker?
Firecracker 是一种开源虚拟化技术,专为创建和管理安全、多租户的容器及基于函数的服务而打造,这些服务提供了 Serverless 运营模式。Firecracker 在轻量级虚拟机(称为 microVM)中运行工作负载,这些虚拟机将硬件虚拟化技术提供的安全性和隔离性与容器的速度和灵活性结合在了一起。
## 概述
Firecracker 的主要组件是一个虚拟机监视器 (VMM),它使用 Linux Kernel Virtual Machine (KVM) 来创建和运行 microVM。Firecracker 采用极简设计。它排除了不必要的设备和面向客户机的功能,以减少每个 microVM 的内存占用和攻击面。这提高了安全性,缩短了启动时间,并增加了硬件利用率。Firecracker 也已集成到容器运行时中,例如 [Kata Containers](https://github.com/kata-containers/kata-containers) 和 [Flintlock](https://github.com/liquidmetal-dev/flintlock)。
Firecracker 由 Amazon Web Services 开发,旨在加速 [AWS Lambda](https://aws.amazon.com/lambda/) 和 [AWS Fargate](https://aws.amazon.com/fargate/) 等服务的速度和效率。Firecracker 根据 [Apache version 2.0](LICENSE) 开源。
欲了解更多关于 Firecracker 的信息,请查看 [firecracker-microvm.io](https://firecracker-microvm.github.io)。
## 入门指南
要开始使用 Firecracker,请下载最新的[发布](https://github.com/firecracker-microvm/firecracker/releases)二进制文件或从源代码构建。
您可以在任何运行 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 的更多信息,请转到[快速入门指南](docs/getting-started.md)。
Firecracker microVM 的整体安全性(包括满足安全多租户计算标准的能力)取决于配置良好的 Linux 主机操作系统。[生产主机设置文档](docs/prod-host-setup.md)中包含我们认为符合此标准的配置。
## 贡献
Firecracker 已经在 AWS 中运行生产工作负载,但在我们[使命](CHARTER.md)指引的旅程中仍处于第一阶段(Day 1)。还有很多东西需要构建,我们欢迎所有贡献。
要为 Firecracker 做贡献,请查看[入门指南](docs/getting-started.md)中的开发设置部分,然后阅读 Firecracker[贡献指南](CONTRIBUTING.md)。
## 发布
新的 Firecracker 版本通过 GitHub 仓库[发布](https://github.com/firecracker-microvm/firecracker/releases)页面发布,通常每两三个月一次。变更历史记录在我们的[变更日志](CHANGELOG.md)中。
Firecracker 的发布策略详见[此处](docs/RELEASE_POLICY.md)。
## 设计
Firecracker 的整体架构在[设计文档](docs/design.md)中进行了描述。
## 功能与特性
Firecracker 由单个微型虚拟机管理器进程组成,该进程启动后会向主机暴露一个 API 端点。该 API [以 OpenAPI 格式指定](src/firecracker/swagger/firecracker.yaml)。请在 [API 文档](docs/api_requests)中阅读更多相关信息。
**API 端点**可用于:
- 配置 microvm,方式包括:
- 设置 vCPU 数量(默认为 1)。
- 设置内存大小(默认为 128 MiB)。
- 配置 [CPU 模板](docs/cpu_templates/cpu-templates.md)。
- 向 microVM 添加一个或多个网络接口。
- 向 microVM 添加一个或多个读写或只读磁盘,每个磁盘由文件支持的块设备表示。
- 在客户机运行时触发块设备重新扫描。这使客户机操作系统能够检测到块设备后备文件的大小变化。
- 在客户机启动之前或之后更改块设备的后备文件。
- 为 virtio 设备配置速率限制器,可以限制带宽、每秒操作数或两者。
- 配置日志和指标系统。
- `[BETA]` 配置面向客户机的元服务的数据树。仅当配置了此资源时,该服务才对客户机可用。
- 向 microVM 添加 [vsock 套接字](docs/vsock.md)。
- 向 microVM 添加 [熵设备](docs/entropy.md)。
- 向 microVM 添加 [pmem 设备](docs/pmem.md)。
- 配置和管理 [内存热插拔](docs/memory-hotplug.md)。
- 使用给定的内核镜像、根文件系统和启动参数启动 microVM。
- [仅限 x86_64] 停止 microVM。
**内置功能**:
- 默认启用按需缺页分页和 CPU 超额订阅。
- 高级、线程特定的 seccomp 过滤器,用于增强安全性。
- [Jailer](docs/jailer.md) 进程,用于在生产场景中启动 Firecracker;应用 cgroup/namespace 隔离屏障,然后降低权限。
## 已测试的平台
我们测试以下所有组合:
| 实例 | 主机操作系统与内核 | 客户机根文件系统 | 客户机内核 |
| :------------------------------------------ | :--------------- | :----------- | :----------- |
| m5n.metal (Intel Cascade Lake) | al2 linux_5.10 | ubuntu 24.04 | linux_5.10 |
| m6i.metal (Intel Ice Lake) | al2023 linux_6.1 | | linux_6.1 |
| m7i.metal-24xl (Intel Sapphire Rapids) | | | |
| m7i.metal-48xl (Intel Sapphire Rapids) | | | |
| **m8i.metal-48xl (Intel Granite Rapids)\*** | | | |
| **m8i.metal-96xl (Intel Granite Rapids)\*** | | | |
| m6a.metal (AMD Milan) | | | |
| m7a.metal-48xl (AMD Genoa) | | | |
| m6g.metal (Graviton 2) | | | |
| m7g.metal (Graviton 3) | | | |
| m8g.metal-24xl (Graviton 4) | | | |
| m8g.metal-48xl (Graviton 4) | | | |
**\***:我们**仅**支持使用 6.1 主机内核的 AWS EC2 第 8 代 Intel (\*8i) 实例。这是由于 5.10 内核对 Granite Rapids CPU 的支持较差。
## 已知问题与限制
- aarch64 上的 `pl031` RTC 设备不支持中断,因此使用 RTC 闹钟(例如 `hwclock`)的客户机程序将无法工作。
## 性能
Firecracker 的性能特征作为[规范文档](SPECIFICATION.md)的一部分列出。所有规范都是我们在 Serverless 运营模式中支持容器和函数工作负载承诺的一部分,因此通过持续集成测试进行强制执行。
## 安全披露政策
Firecracker 的安全是我们的首要任务。如果您怀疑自己发现了一个漏洞,请按照我们的[安全政策文档](SECURITY.md)中概述的方式私下联系我们;我们将立即优先处理您的披露。
## 常见问题与联系
常见问题收集在我们的 [FAQ 文档](FAQ.md)中。
您可以通过以下方式与 Firecracker 社区取得联系:
- 安全相关问题,请参阅我们的[安全政策文档](SECURITY.md)。
- 在我们的 [Slack 工作区](https://join.slack.com/t/firecracker-microvm/shared_invite/zt-2tc0mfxpc-tU~HYAYSzLDl5XGGJU3YIg)与我们聊天
_注意:大多数维护者位于欧洲时区。_
- 在此仓库中开启 GitHub issue。
- 发送邮件至 [firecracker-maintainers@amazon.com](mailto:firecracker-maintainers@amazon.com) 联系维护者。
在 Firecracker 社区内交流时,请注意我们的[行为准则](CODE_OF_CONDUCT.md)。
标签:Apache 2.0, AWS, DPI, Fargate, Firecracker, Kata Containers, KVM, Lambda, microVM, Rust, Serverless, VMM, Web截图, Web报告查看器, 可视化界面, 容器安全, 开源, 微虚拟机, 无服务器计算, 沙箱, 系统底层, 网络流量审计, 虚拟化, 计算密集型, 请求拦截, 资源调度, 轻量级虚拟机, 通知系统, 通知系统, 隔离