现在的技术环境下,容器具有快速启动时间和高密度,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

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

  1. i 智慧 | 深度广度并举,AWS容器服务再推利器!

    戳蓝字"CSDN云计算"关注我们哦! 作者 |  晶少 责编 | 阿秃 出品 | CSDN云计算(ID:CSDNcloud) 据晶少了解,国庆假期后的首个工作日,AWS就在中国区域 ...

  2. 深度广度并举,AWS容器服务再推利器!

    据晶少了解,国庆假期后的首个工作日,AWS就在中国区域放出了一款"重量级"容器服务,名为 AWS Fargate,光环新网运营的 AWS 中国(北京)区域和西云数据运营的 AWS ...

  3. 微虚拟机服务器,亚马逊AWS发布开源虚拟化技术,可125毫秒内启动微虚拟机!

    原标题:亚马逊AWS发布开源虚拟化技术,可125毫秒内启动微虚拟机! 在AWS Lambda发布4年后,每月为数十万活跃客户处理数万亿次执行,作为当下最热的无服务器计算技术,AWS没有停下探索的步伐. ...

  4. Webhint开源了一种代码检查工具

    Webhint项目提供了一种用于检查代码的可访问性.性能和安全的开源检查(Linting)工具.在创建Web站点和应用中,有越来越多的细节问题亟待完善.为此,Webhint力图帮助开发人员标记这些细节 ...

  5. AWS开源SaaS Boost加速云应用项目

    AWS高管Adrian De Luca在博客中写道,SaaS Boost已经引起了数百位开发人员的兴趣.未来,AWS希望围绕该项目构建一个开源贡献者社区,此外还计划邀请外部维护者帮助确定项目功能路线图 ...

  6. AWS 开源 SageMaker;天气预报用上 AR 特效

    (给技术最前线加星标,每天看技术热点) 转自:开源中国.solidot.cnBeta.腾讯科技.快科技等 [技术资讯] 0.AWS 开源 SageMaker,帮助开发人员优化机器学习模型 Amazon ...

  7. spark sql 本地调试_Spark精华问答|Spark的三种运行模式有何区别?

    戳蓝字"CSDN云计算"关注我们哦! Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第 ...

  8. AWS 开源 SageMaker,帮助开发人员优化机器学习模型

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   Amazon WebServices 已经发布了来自其 SageMaker Neo 机器学习的相关代码,Neo-A ...

  9. spark on mesos 两种运行模式

    spark on mesos 有粗粒度(coarse-grained)和细粒度(fine-grained)两种运行模式,细粒度模式在spark2.0后开始弃用. 细粒度模式 优点 spark默认运行的 ...

最新文章

  1. 动态代理竟然如此简单!
  2. 24-Thief小偷-Crime犯罪
  3. 网络QoS的平衡之道——音视频弱网对抗策略介绍
  4. java zip文件操作,java 关于 zip 文件 的 基本操作
  5. new fabu
  6. sql语句按月份统计查询
  7. android service 本地 远程 总结
  8. 扒一扒面向对象编程的另一面
  9. 【人工智能】多标签图像分类综述
  10. 2003系统中证书服务
  11. python是干嘛的-python到底拿来干什么
  12. 国外免费服务器 win系统,FreeSSHd一个免费的SSH服务器的Windows | MOS86
  13. JDBC的那点事之DatabaseMetaData之获取数据库所有表
  14. 在FreeBSD 用户空间与内核空间使用内存共享
  15. C#,SharpGL开发的3D图表控件
  16. Spring Cloud限流详解
  17. 高斯脉冲传播的解析解及其matlab求解
  18. html密码框ml表单文本框,表单组件 PasswordInput 密码输入框 - 闪电教程JSRUN
  19. 苹果教你如何保持iPhone电池健康、延长电池寿命
  20. 尚硅谷_springcloud(2020新版) 下载_异界删除浓缩怎么得|原创下载异界仙战游戏一次搞定 异界仙战安卓下载地址最新版整理...

热门文章

  1. TorchVision中通过AlexNet网络进行图像分类
  2. FFmpeg中一个线程获取视频流一个线程执行scale测试代码
  3. 卷积神经网络(CNN)代码实现(MNIST)解析
  4. OpenSSL简介及在Windows、Linux、Mac系统上的编译步骤
  5. python 设计模式 观察者_python设计模式之观察者模式
  6. 视觉在无人驾驶中的应用及分类_机器视觉可以应用于水果自动分类拣选,你见过吗?...
  7. java changelistener_ListChangeListener.Change
  8. Java学习总结:52(Java网络编程)
  9. Java学习总结:45(字符编码)
  10. Java学习总结:26