写点什么

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

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

关注

评论 1 条评论

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

订单里的充值卡消费和积分抵扣怎么处理?

产品海豚湾

产品经理 产品设计 电商系统 分析设计 11月月更

一文了解openEuler SIG组角色划分与管理运作

openEuler

开源

我上了个假“中台”!

雨果

数据中台

MySQL能力全开放,OceanBase 社区版 4.0 正式上线

OceanBase 数据库

视图的创建

芯动大师

Python 视图 11月月更

设计模式之美-代码评价标准

GalaxyCreater

设计模式

专访微盟CTO黄骏伟:WOS将为去中心化商业提供一整套数字基建

B Impact

从0开始,用Go语言搭建一个简单的后端业务系统

闫同学

后端 go语言 11月月更

从1开始,扩展Go语言后端业务系统的RPC功能

闫同学

后端 go语言 11月月更

圆满落幕!回顾 eBPF 技术的发展与挑战

OpenAnolis小助手

Linux 云原生 ebpf 云栖大会 龙蜥社区

Linux中 dir 命令还能这样玩!

wljslmz

Linux 11月月更

使用 Goland 开发 dubbogo 项目时如何自动快速格式化 import 代码块

apache/dubbo-go

设计模式之美-面向对象、设计原则、设计模式、编程规范、重构的关系

GalaxyCreater

设计模式

Go 云原生实战:如何增加应用配置模块

宇宙之一粟

云原生 配置 Go 语言 Web应用开发 10月月更

Vue组件入门(十五)异步组件

Augus

vue3.0 11月月更

互联网安全体制的挑战与机遇

阿泽🧸

互联网安全 11月月更

史海峰:成为技术领导者 从技术到管理的必经之路丨声网开发者创业讲堂 • 第 5 期

声网

技术管理 人工智能’

StarRocks 技术内幕 | Join 查询优化

StarRocks

数据库

华为云从入门到实战 | 云容器服务

TiAmo

华为 华为云 云开发 11月月更

【LeetCode】最长递增子序列的个数Java题解

Albert

算法 LeetCode 11月月更

433MHz自发电无线控制器

不脱发的程序猿

物联网 嵌入式 无线通信 ​433MHz自发电无线开关

一次基于Fastjson的JNDI注入

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

Jenkins 构建的时候提示 DOCKER_HOST 错误

HoneyMoose

InnoDB与MyISAM的使用,该如何选择?

想要飞的猪

小白一键出片,三分钟成为修图大师的秘诀。

淋雨

ps LR 磨皮插件 滤镜插件

2022-11-03:给定一个数组arr,和一个正数k 如果arr[i] == 0,表示i这里既可以是左括号也可以是右括号, 而且可以涂上1~k每一种颜色 如果arr[i] != 0,表示i这里已经确

福大大架构师每日一题

算法 rust 福大大

简述机器学习库

穿过生命散发芬芳

机器学习 11月月更

从2开始,在Go语言后端业务系统中引入缓存

闫同学

Go 设计 后端 11月月更

📢利用Vite插件助力证书安装

小鑫同学

前端 插件 11月月更

详解CAN总线:CAN总线通信优先级机制

不脱发的程序猿

汽车电子 CAN总线 详解CAN总线 CAN总线通信优先级机制 CAN优先级

跟着卷卷龙一起学Camera--MIPI 03

卷卷龙

ISP camera 11月月更

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