写点什么

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:583399
用户头像
张婵 InfoQ 技术编辑

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

关注

评论 1 条评论

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

AI文生视频或将为出海营销打开竞争新维度

新消费日报

Python小技巧:冻结参数,让你的代码变简洁

高端章鱼哥

Python 函数

软件测试/人工智能|Python逻辑运算符如何灵活使用

霍格沃兹测试开发学社

MySQL 8.0 索引跳跃扫描

红袖添香

InnoDB存储引擎 数据库索引 MySQL 8.0 索引跳跃

企业降本增效,从招聘“卷”起?

用友BIP

智能招聘

Quartz核心原理之架构及基本元素介绍

不在线第一只蜗牛

架构 前端 quartz 系统搭建

2023-12-06:用go语言,给你一个由 n 个数对组成的数对数组 pairs, 其中 pairs[i] = [lefti, righti] 且 lefti < righti 。 现在,我们定义一

福大大架构师每日一题

福大大架构师每日一题

inBuilder低代码平台新特性推荐-第十四期

inBuilder低代码平台

低代码

诚邀报名|黄向东邀您共话开源工业物联网大数据

开放原子开源基金会

Java 开源 程序员 开发者 算法

使用 Guava Retry 优雅的实现重试机制

EquatorCoco

Java 开发语言 重试机制

优化 uniapp 发行操作:一键打包、混淆代码

开发体育赛事比分直播视频平台变现有压力,解决策略方案

软件开发-梦幻运营部

IT外包的三种模式

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

区块链软件开发:浏览区块链开发平台

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

软件测试/人工智能|一篇文章教你把Python关系运算符玩出花样

霍格沃兹测试开发学社

果然!低代码是程序员接私活的隐藏福利

伤感汤姆布利柏

程序员 低代码 接私活

稳了,终于可以通过外网访问 Sealos 中的数据库了!

米开朗基杨

数据库 云原生 Sealos 云操作系统

伊克罗德信息的强大合作伙伴—Palo Alto Networks 更新 Prisma Cloud,增强云原生代码保护能力!

伊克罗德信息科技

云原生 网络安全 palo alto

构建第一个事件驱动型 Serverless 应用

亚马逊云科技 (Amazon Web Services)

Serverless S3 Amazon Lambda Amazon DynamoDB Amazon Cognito

解锁全球潜力:IT外包解决跨国企业海外分支的IT需求

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

用“开源”的方式讲开源的合规,合规“诊所”,等你来问!

开放原子开源基金会

Java 开源 程序员 开发者 算法

游戏出海“变局”,中东非正成为下一块热土?

最新动态

什么?你还不会 OpenTiny 跨框架组件库适配微前端?

OpenTiny社区

开源 前端 微前端 组件库

金义中央大道通车│三思智慧综合杆&道路照明系统方案点亮23公里智慧公路

电子信息发烧客

论架构师的关注点:专业向下·业务向上

凌晞

企业架构 架构设计 业务架构

PAM助力政府信息安全建设

尚思卓越

信息安全 数据安全 特权账号管理

vue的响应式原理:依赖追踪

EquatorCoco

Vue 前端 依赖

WPF应用框架中工作流模块的介绍

快乐非自愿限量之名

前端 工作流 WPF 框架

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