速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

AWS 开源 Firecracker,一种运行多租户容器服务的新虚拟化技术

  • 2018-11-27
  • 本文字数:2683 字

    阅读完需:约 9 分钟

AWS开源Firecracker,一种运行多租户容器服务的新虚拟化技术

现在的技术环境下,容器具有快速启动时间和高密度,VM 可以对硬件虚拟化,具有更好的安全性,并对工作负载具有更好的隔离性。容器和 VM 的特性现在还不可兼得。


现在 AWS 开源了 Firecracker,一种利用 KVM 的新虚拟化技术,专门用于创建和管理多租户容器以及基于函数的服务。 你可以在几分之一秒内在非虚拟化环境中启动轻量级微虚拟机(microVM),充分利用传统虚拟机提供的安全性和工作负载隔离,同时兼具容器的资源效率。


Firecracker 实现了一个虚拟机监视器(virtual machine monitor,VMM),它使用基于 Linux 内核的虚拟机(KVM)来创建和管理 microVM。 Firecracker 为客户操作系统提供了最少的所需设备模型,同时排除了非必要功能(仅有 4 个模拟设备:virtio-net,virtio-block,串行控制台和仅有一个按键的键盘控制器,用于停止 microVM)。


由于设备模型极简,内核加载过程也简单,可以实现小于 125 ms 的启动时间和更少的内存占用。Firecracker 目前支持 Intel CPU,并将于 2019 年开始支持 AMD 和 ARM,还将与 containerd 等流行的容器运行时集成。Firecracker 支持内核版本为 4.14 及更高版本的 Linux 主机和客户机操作系统。


Firecracker 由 AWS 的开发人员构建,旨在使 AWS Lambda 和 AWS Fargate 等服务能够提高资源利用率和客户体验,同时提供公有云基础架构所需的安全性和隔离性。Firecracker 采用 Rust 编写,Rust 是一种现代编程语言,可以保证线程安全并防止可能导致安全漏洞的多种类型的缓冲区溢出错误。


下图展示了一台主机如何运行 Firecracker microVM:



Firecracker 在用户空间中运行,使用基于 Linux 内核的虚拟机(KVM)来创建 microVM。每个 microVM 的快速启动时间和低内存开销使你可将数千个 microVM 打包到同一台机器上。这意味着每个函数或容器组都可以使用虚拟机屏障进行封装,从而使不同用户的工作负载能在同一台计算机上运行,而无需在安全性和效率之间进行权衡。Firecracker 是 QEMU 的替代品,QEMU 是一个成熟的 VMM,具有通用和广泛的功能集,可以托管各种客户操作系统。


可以通过 RESTful API 控制 Firecracker 进程,RESTful API 可以启用常见操作:例如配置 vCPU 数量或启动计算机。Firecracker 提供内置速率限制器,可精确控制同一台计算机上数千个 microVM 使用的网络和存储资源。你可以通过 Firecracker API 创建和配置速率限制器,并灵活定义速率限制器来支持突发情况或特定带宽/操作限制。Firecracker 还提供元数据服务,可在主机和客户机操作系统之间安全地共享配置信息。元数据服务可以使用 Firecracker API 设置。


Firecracker 现在还不能在 Kubernetes、Docker 或 Kata Container 上使用。Kata Container 是一个符合 OCI 标准的容器运行时,在基于 QEMU 的虚拟机中执行容器。Firecracker 是 QEMU 的云原生替代品,专门用于安全高效地运行容器,这是 Firecracker 和 Kata Container 以及 QEMU 之间的区别。


Firecracker 的优势如下:


  • 安全 - Firecracker 使用多级隔离和保护,并暴露出最小的攻击面。

  • 高性能 - 可以在短至 125 毫秒内启动 microVM(在 2019 年可以更快),使其成为众多工作负载类型的理想选择,包括瞬态或短期工作负载。

  • 久经沙场 - Firecracker 经过了很多测试,已经为包括 AWS Lambda 和 AWS Fargate 在内的多个高容量 AWS 服务提供支持。

  • 低开销 - Firecracker 每个 microVM 消耗大约 5 MiB 的内存。你可以在同一实例上运行数千个具有不同 vCPU 和内存配置的安全 VM。

  • 开源 - Firecracker 是一个开源项目。AWS 已经准备好审核并接受拉取请求。


Firecracker 的安全功能包括:


  • 简单客户机模型 - Firecracker 客户端提供了一个非常简单的虚拟化设备模型,以最小化攻击面:只有网络设备,block I / O 设备,可编程定时器,KVM 时钟,串行控制台和一个不完全的 键盘(刚好足以让 VM 重置)。

  • 进程监狱 - 使用 cgroups 和 seccomp BPF 对 Firecracker 进程进行监禁,并且可以访问一个严格控制的小型系统调用列表。

  • 静态链接 - Firecracker 进程是静态链接的,可以从进程监狱中启动,以确保主机环境尽可能安全和干净。

开启 Firecracker

示例启动了一个 i3.metal 实例并下载了三个文件(firecracker二进制文件,一个根文件系统镜像和一个 Linux 内核):



设置访问/ dev / kvm的适当权限:


$  sudo setfacl -m u:${USER}:rw /dev/kvm
复制代码


在一个 PuTTY 会话中启动 Firecracker,然后在另一个 PuTTY 会话中发出命令(该进程侦听 Unix 域套接字并实现一个 REST API)。 第一个命令设置第一台客户机的配置:


$ curl --unix-socket /tmp/firecracker.sock -i \    -X PUT "http://localhost/machine-config" \    -H "accept: application/json" \    -H "Content-Type: application/json" \    -d "{        \"vcpu_count\": 1,        \"mem_size_mib\": 512    }"
复制代码


第二个命令设置 guest kernel:


$ curl --unix-socket /tmp/firecracker.sock -i \    -X PUT "http://localhost/boot-source" \    -H "accept: application/json" \    -H "Content-Type: application/json" \    -d "{        \"kernel_image_path\": \"./hello-vmlinux.bin\",        \"boot_args\": \"console=ttyS0 reboot=k panic=1 pci=off\"    }"
复制代码


第三个命令设置根文件系统:


$ curl --unix-socket /tmp/firecracker.sock -i \    -X PUT "http://localhost/drives/rootfs" \    -H "accept: application/json" \    -H "Content-Type: application/json" \    -d "{        \"drive_id\": \"rootfs\",        \"path_on_host\": \"./hello-rootfs.ext4\",        \"is_root_device\": true,        \"is_read_only\": false    }"
复制代码


所有都设置好以后,能启动一台客户机:


# curl --unix-socket /tmp/firecracker.sock -i \    -X PUT "http://localhost/actions" \    -H  "accept: application/json" \    -H  "Content-Type: application/json" \    -d "{        \"action_type\": \"InstanceStart\"     }"
复制代码


第一个 VM 已经起来并可以运行了:



参考链接:


https://firecracker-microvm.github.io/


https://amazonaws-china.com/cn/blogs/aws/firecracker-lightweight-virtualization-for-serverless-computing/


Firecracker 开源地址:https://github.com/firecracker-microvm/firecracker

活动推荐


12 月 7 日北京 ArchSummit 全球架构师峰会上,来自阿里、京东、Streamlio 的讲师齐聚一堂,共同分享“Apache Pulsar 解决运维痛点”、“Dubbo 应用实践”和“Flutter 在京东的实践效果”等开源技术相关经验与实践。详情点击 https://bj2018.archsummit.com/schedule


2018-11-27 16:583311
用户头像
张婵 InfoQ 技术编辑

发布了 87 篇内容, 共 53.3 次阅读, 收获喜欢 218 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

英特尔与南京溧水经济技术开发区共同成立智能交通研究院

E科讯

程序员面试的时候突然遇到答不上的问题怎么办?

Java架构师迁哥

打工人、打工魂、高效MES助力打工者都是人上人

Marilyn

敏捷开发 快速开发 MES系统

《迅雷链精品课》第七课:以太坊数据存储分析

迅雷链

区块链

都是“算法”惹的祸,字节三面处处坑,我的offer要凉了?

Java~~~

字节跳动 面试 编程语言 算法和数据结构

云原生应用Go语言:你还在考虑的时候,别人已经应用实践

华为云开发者联盟

微服务 云技术 Go 语言

如何用CSS实现图像替换链接文本显示并保证链接可点击

陈北

CSS小技巧

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十七)运行测试-在构建工具中运行测试

编程道与术

Java 编程 TDD 单元测试 JUnit

申通快递 双11 云原生应用实践

阿里巴巴云原生

阿里云 Kubernetes 运维 云原生 监控

基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台

华为云开发者联盟

华为 算法 数据 dayu

什么是堡垒机?为什么需要堡垒机?

xcbeyond

运维

架构师训练营 1 期 -- 第十周总结

曾彪彪

极客大学架构师训练营

Alibaba最新《Java架构核心宝典》限时开放下载,互联网主流技术详解总结,提升技术能力的必备宝典!

Java架构之路

Java 程序员 架构 面试 编程语言

LeetCode题解:169. 多数元素,分治,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

我是面试官,我来分享一波面经!看看我的内心OS

比伯

Java 编程 架构 面试 技术宅

性能测试界“网红”云性能测试服务,了解一下?

华为云开发者联盟

CloudTest 沙箱实验 云性能测试

三分钟带你搞懂分布式链路追踪系统原理

Java架构师迁哥

理解三值逻辑与NULL,你离SQL高手更近了一步

华为云开发者联盟

sql null 逻辑

《华为数据之道》读书笔记:第 3章 差异化的企业数据分类管理框架

方志

数据中台 数据仓库 数据治理 元数据

架构师训练营第 1 期-week10

习习

马士兵最新2020涵盖P5—P8Java全栈架构师学习路线,跟着老师学我已拿P7Offer!

Java架构追梦

Java 学习 架构 面试 马士兵

有奖话题 | 如果程序员和产品经理都会凡尔赛文学,将如何对话?

YourBatman

话题讨论 凡尔赛文学

接口请求(get、post、head等)详解

测试人生路

HTTP

容器化时代到来!跳转机分配问题终于“有救”了

华为云开发者联盟

容器 镜像 网络

原创 | 使用JPA实现DDD持久化-数据库连接配置:persistence.xml

编程道与术

Java hibernate 编程 mybatis jpa

为什么程序员不做外包

Java架构师迁哥

原创 | 使用JPA实现DDD持久化-只要O,忘记R & Maven配置

编程道与术

Java hibernate 编程 mybatis jpa

大厂都是怎么用Java8代替SimpleDateFormat?

Java架构师迁哥

视频作品播放量低:自媒体作者如何走出新手村

石头IT视角

双指针算法和位运算&离散化和区间合并

落曦

纷享销客罗旭:拐点下的中国SaaS

ToB行业头条

SaaS

AWS开源Firecracker,一种运行多租户容器服务的新虚拟化技术_容器_张婵_InfoQ精选文章