博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AWS开源Firecracker,一种运行多租户容器服务的新虚拟化技术
阅读量:6470 次
发布时间:2019-06-23

本文共 4189 字,大约阅读时间需要 13 分钟。

现在的技术环境下,容器具有快速启动时间和高密度,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 \u0026quot;http://localhost/machine-config\u0026quot; \\    -H \u0026quot;accept: application/json\u0026quot; \\    -H \u0026quot;Content-Type: application/json\u0026quot; \\    -d \u0026quot;{        \\\u0026quot;vcpu_count\\\u0026quot;: 1,        \\\u0026quot;mem_size_mib\\\u0026quot;: 512    }\u0026quot;

第二个命令设置 guest kernel:

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

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

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

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

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

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

\"\"

参考链接:

Firecracker 开源地址:

活动推荐

\"\"

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

转载地址:http://pzjko.baihongyu.com/

你可能感兴趣的文章
Matlab编程之——卷积神经网络CNN代码解析
查看>>
白洋淀周末游
查看>>
三篇文章了解 TiDB 技术内幕 —— 说计算
查看>>
copy strong weak assign的区别
查看>>
OpenCV 入门
查看>>
css 3D transform变换
查看>>
ele表格合并行之后的selection选中
查看>>
正则表达式分解剖析(一文悟透正则表达式)
查看>>
解决UILable标点符号居中的问题
查看>>
HTML5新特性教程
查看>>
SpringBoot 实战 (十七) | 整合 WebSocket 实现聊天室
查看>>
ImageOptim-无损图片压缩Mac版
查看>>
12 Go语言map底层浅析
查看>>
vue-resumer 项目中 element-ui 遇到的 textarea autosize 问题
查看>>
以主干开发作为持续交付的基础
查看>>
PHP扩展库PEAR被攻击,近半年下载者或被影响
查看>>
传统运维团队转型应该注意哪些问题?
查看>>
JavaScript函数(二)
查看>>
Airbnb改进部署管道安全性,规范部署顺序
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>