当前位置: 首页 > 编程日记 > 正文

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 \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已经起来并可以运行了:

\"\"

参考链接:

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

相关文章:

python urllib2 开启调试

2019独角兽企业重金招聘Python工程师标准>>> 发一段在网上看见. USING HTTPLIB.HTTPCONNECTION.SET_DEBUGLEVEL() WITH URLLIB2 Posted on October 1, 2007, 9:52 pm, by jamiegrove, under python. I’ve been trying to get the debug level turned on in urll…

从发展滞后到不断突破,NLP已成为AI又一燃爆点?

作者 | 刘家俊,一览群智CTO责编 | Jane出品 | AI科技大本营(ID :rgznai100)自然语言处理:人工智能连接主义复兴浪潮中的下一个突破口AI 行业应用是一片新的大陆,深度学习作为新大陆的基石,经历了…

matlab最小分类错误全局二值化算法

转自:http://download.csdn.net/detail/hupeng810/1511870 function imagBW kittlerMet(imag) % KITTLERMET binarizes a gray scale image imag into a binary image % Input: % imag: the gray scale image, with black foreground(0), and white % bac…

XShell连接Deepin

为什么80%的码农都做不了架构师?>>> 先让deepin安装openssh sudo apt-get install openssh-serverchkconfig ssh on 转载于:https://my.oschina.net/enzo/blog/110518

第三届“达观杯”文本智能信息抽取挑战赛丰厚奖金,群英集结,等你来战!...

近日,第三届“达观杯”文本智能信息抽取挑战赛正式上线启动(点击阅读原文,跳转报名页面),6月28日至8月31日,面向所有参赛选手开放竞赛结果提交。本届“达观杯”的任务是信息抽取。“达观杯”大赛由国内文本…

Spline interpolation and Savitzki-Golay smoothing

转自:http://octave.1599824.n4.nabble.com/Spline-interpolation-and-Savitzki-Golay-smoothing-td1675136.html ## natural-cubic-spline interpolation ## usage: yspline spline(x,y,xspline) ## example: ## x 0:10; y sin(x); ## xspline 0:0.1:10; y…

SpringBoot实现热部署(修改class不需要重启)

热部署: devtools可以实现页面热部署(即页面修改后会立即生效, 这个可以直接在application.properties文件中配置spring.thymeleaf.cachefalse来实现) 实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。 注意:因为采用的虚拟机机制&…

Oracle中查看表空间的使用率的脚本

如题: select f.tablespace_name tablespace_name, round((d.sumbytes / 1024 / 1024 / 1024), 2) total_g, round(f.sumbytes / 1024 / 1024 / 1024, 2) free_g, round((d.sumbytes - f.sumbytes) / 1024 / 1024 / 1024, 2) used_g, round((d.sumbytes - f.sumbyte…

vue实现多个元素或多个组件之间动画效果

2019独角兽企业重金招聘Python工程师标准>>> 多个元素的过渡 <style>.v-enter,.v-leave-to{opacity: 0;}.v-enter-acitve,.v-leave-active{opacity: opacity 1s;} </style> <div idapp><transition><div v-ifshow>hello world</di…

干货 | 20个教程,掌握时间序列的特征分析(附代码)

作者 | Selva Prabhakaran 译者 | Tianyu责编 | Jane出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导语】时间序列是指以固定时间为间隔的序列值。本篇教程将教大家用 Python 对时间序列进行特征分析。1、什么是时间序列&#xff1f;时间序列是指以固定时间为间…

利用OpenCV求取图像的重心

转自&#xff1a;http://blog.csdn.net/lxiaoxiaot/article/details/6539834 不规则区域的矩&#xff0c;表示把一个归一化的灰度级图像函数理解为一个二维随机变量的概率密度。 这个随机变量的属性可以用统计特征--矩&#xff08;Moments&#xff09;来描述。通过假设非零的像…

C++中Ansi、Unicode、UTF8字符串之间的转换和写入

转自: http://dark0729.blogbus.com/logs/51496111.html Ansi字符串我们最熟悉&#xff0c;英文占一个字节&#xff0c;汉字2个字节&#xff0c;以一个\0结尾&#xff0c;常用于txt文本文件 Unicode字符串&#xff0c;每个字符(汉字、英文字母)都占2个字节&#xff0c;以2个连…

MyBatis的扩展点(plugins)

2019独角兽企业重金招聘Python工程师标准>>> 1、mybatis扩展点plugins mybatis的扩展是通过拦截器Interceptor来实现的&#xff0c;本质上就是JDK的动态代理&#xff0c;所以它只能对接口进行拦截&#xff0c;mybatis可以对以下四个接口类型进行拦截&#xff0c;也就…

linux中使用CST时间

GMT(Greenwich Mean Time&#xff0c;格林威治标准时间): 是指位于英国伦敦郊区的格林尼治天文台的标准时间&#xff0c;因为本初子午线被定义在通过那里的经线。 UTC(Universal Time/Temps Cordonn 世界标准时间)CST(Central Standard Time 國家標準時間&#xff0c;一說中原標…

到「黄埔学院」去:打造AI首席架构师,第二期限量招募!

今年 1 月&#xff0c;百度联合“深度学习技术及应用国家工程实验室”成立黄埔学院&#xff0c;旨在为产业培养第一批“首席AI架构师”。黄埔学院一期学员历时半年的学习和交流&#xff0c;6 月 16 日&#xff0c;黄埔学院一期学员迎来了毕业典礼&#xff0c;并在 7 月百度 AI开…

linux守护进程的创建

下面的完成了这样一个功能&#xff0c;创建一个守护进程&#xff0c;每个一秒在/tmp目录下的文件peng.txt中记录当前系统时间。 一、守护进程 守护进程是linux中的后台服务进程&#xff0c;在系统启动时开始运行&#xff0c;在系统关闭时终止。Linux系统中的大多数服务进程都是…

tesseract3.01的训练和使用

相关源码、资源下载&#xff1a;http://code.google.com/p/tesseract-ocr/downloads/list 训练步骤&#xff1a; 1、 Generate Training Images&#xff1a;生成tif图像文件(简单的几个汉字)&#xff1b; 如&#xff1a;ABC.Roman.exp0.tif([lang].[fontname].exp[num].tif)…

旷视推出鼻纹识别,用AI寻找丢失宠物

来源 | 转载自旷视城市大脑&#xff08;ID&#xff1a;MEGVII_CityBrain)导读&#xff1a;随着人工智能技术&#xff08;AI&#xff09;的大热&#xff0c;基于深度学习方法的人脸识别技术已成熟落地&#xff0c;在解锁、支付、认证、摄像等生活方方面面&#xff0c;各个大厂推…

Qt浅谈之一:内存泄露(总结)

一、简介 Qt内存管理机制&#xff1a;Qt 在内部能够维护对象的层次结构。对于可视元素&#xff0c;这种层次结构就是子组件与父组件的关系&#xff1b;对于非可视元素&#xff0c;则是一个对象与另一个对象的从属关系。在 Qt 中&#xff0c;在 Qt 中&#xff0c;删除父对…

LINUX新手入门-1.装系统

LINUX新手入门-1.装系统首先我们用虚拟机模拟 装linux系统&#xff0c;然后下一步下一步&#xff0c;然后完成后&#xff0c;编辑一些设置&#xff0c;把镜像放上面就可以了选第一项&#xff0c;安装系统&#xff0c;查看镜像是否能运行&#xff0c;直接跳过&#xff0c;选择语…

Log4cplus1.04的使用

首先&#xff0c;从http://sourceforge.net/projects/log4cplus/files/log4cplus-stable/下载最新的版本&#xff0c;解压缩&#xff0c;用vs2008打开msvc8文件夹下的log4cplus.sln&#xff0c;并按照提示转换。在Solution Configurations下拉列表框中&#xff0c;会有Debug、D…

FRVT赛程全纪录:格灵深瞳全球排名前五

作者 | 张德兵&#xff0c;格灵深瞳首席科学家&算法部负责人来源 | 转载自知乎张德兵最近两个月&#xff0c;格灵深瞳首席科学家&算法部负责人张德兵与算法团队参加了全球人脸识别算法测试(FRVT、Face Recognition Vendor Test)。虽然是第一次参加此比赛&#xff0c;格…

反转比特位(文章最后有干货)【转】

转自&#xff1a;https://blog.csdn.net/wuxianglonghaohao/article/details/21602305 http://www.newhottopic.com/2014/03/20/reverse-bits/ 把一个无符号整数的比特位反转顺序。有很多种方法来实现这个。我们这里给出一个算法&#xff1a;通过异或运算来交换&#xff0c;然后…

过关斩将打进Kaggle竞赛Top 0.3%,我是这样做的

作者 | Lavanya Shukla译者 | Monanfei责编 | 夕颜出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;导读&#xff1a;刚开始接触数据竞赛时&#xff0c;我们可能会被一些高大上的技术吓到。各界大佬云集&#xff0c;各种技术令人眼花缭乱&#xff0c;新手们…

JavaBean规范

2019独角兽企业重金招聘Python工程师标准>>> &#xff08;1&#xff09;JavaBean 类必须是一个公共类&#xff0c;并将其访问属性设置为 public &#xff08;2&#xff09;JavaBean 类必须有一个空的构造函数&#xff1a;类中必须有一个不带参数的公用构造器&#x…

vigra1.8.0的使用

VIGRA stands for "Vision with Generic Algorithms". Its a novel computer vision library that puts its main emphasis oncustomizablealgorithms and data structures. 1、首先&#xff0c;从http://hci.iwr.uni-heidelberg.de/vigra/下载最新源代码&#xff0…

17个Python小窍门

python中相对不常见却很实用的小窍门。 空谈不如来码代码吧&#xff1a; 交换变量值 给列表元素创建新的分隔符 找列表中出现次数最多的元素 核对两个字符是否为回文 反向输出字符串 反向输出列表 转置2维数组 链式比较 我刚整理了一套2018最新的0基础入门和进阶教程&#xff0…

用产品思路建设中台,这走得通吗?| 白话中台

作者 | 王健&#xff0c;ThoughtWorks首席咨询师。 十多年国内外大型企业软件设计开发&#xff0c;团队组织转型经验。一直保持着对技术的热爱&#xff0c;热衷于技术分享。目前专注在企业平台化转型、中台战略规划&#xff0c;微服务架构与实施&#xff0c;大型遗留系统服务化…

利用cvMinAreaRect2求取轮廓最小外接矩形

转自&#xff1a;http://blog.csdn.net/mine1024/article/details/6044856 对给定的 2D 点集&#xff0c;寻找最小面积的包围矩形&#xff0c;使用函数&#xff1a; CvBox2D cvMinAreaRect2( const CvArr* points, CvMemStorage* storageNULL ); points 点序列或点集数组 …

电脑开机显示Invalidsystemdisk

开机或重启无法进入系统&#xff0c;并在屏幕上显示Invalidsystemdisk&#xff0c;Replacethediskandthenpressanykey或者diskerror之类的字样&#xff0c;这是怎么回事&#xff0c;该如何解决&#xff1f;今天u大师就为大家解决下。 出现这个原因是因为现在的电脑没有可以启…