虚拟化面临着一系列新挑战
随着我们的客户越来越多地采用无服务器服务,我们意识到现有虚拟化技术并不具备能够优化此类工作负载所固有的事件驱动以及时常出现的短暂属性。我们认为,有必要专门面向无服务器计算构建起新的虚拟化实现技术,从而在为基于硬件虚拟化的虚拟机提供安全边界的同时,继续保持较小的打包体积以及容器与函数的灵活性。
Firecracker技术
Firecracker启动的是最小内核配置,其不依赖于模拟BIOS,也不具备完整的设备模型。其中少数存在的设备就只有virtio net与virtio block,外加单键式键盘(由于没有电源管理设备,因此用户需要使用其中的复位功能)。这种最小设备模型不仅能够带来更快的启动时间(在默认大小的微虚拟机i3.metal上,启动时间低于125毫秒),还能够有效减少攻击面以显著提高安全性水平。感兴趣的朋友可以查阅与Firecracker技术承诺的更多详细信息[2],包括其如何为容器与无服务器工作负载的执行带来最低资源开销。
2017年秋季,我们决定使用Rust语言编写Firecracker——Rust是一种现代编程语言,能够有效保证线程与内存安全,同时防止可能引发各类安全漏洞的缓冲区溢出以及其它多种常见的内存安全错误。感兴趣的朋友可以参阅Firecracker设计[3]当中与Firecracker VMM功能与架构特性相关的更多细节信息。
Firecracker微虚拟机提高了效率与资源利用率,其中每一套微虚拟机的内存开销低于5 MiB。这意味着您可以将数千套微虚拟机打包至同一台计算机之上。此外,您还可以利用进程内速率限制器以细粒度方式控制网络与存储资源的共享方式,甚至能够跨越数千套微虚拟机进行全面控制。如此一来,您将能够安全地超额预订一切硬件计算资源,从而最大程度提升可运行在主机当中的工作负载总量。
我们还为Firecracker开源项目整理出包含以下指导性原则[4]的上手指南:
我们之所以要对这项基础技术加以开源,是因为我们相信我们承担着为无服务器计算构建下一代虚拟化方案的使命,而目前这项工作才刚刚迈出第一步。
Firecracker的使用方式
在此之前,Fargate Tasks包含一个或者多个运行于专用EC2虚拟机当中的Docker容器,旨在确保任务间相互隔离。这些任务现在可以在Firecracker微虚拟机上执行,这使得我们能够立足EC2裸机实例对Fargate运行时层进行更快、更高效地配置,同时在不影响任务内核级隔离能力的前提下提高工作负载密度。随着时间的推移,这还使我们得以继续在运行时层内实现创新,为我们的客户提供更好的性能表现,同时保持高安全性水平并降低运行无服务器容器架构的总体成本。
Firecracker目前运行在英特尔处理器之上,并将在2019年年内实现对AMD以及ARM处理器的支持。
您可以在AWS .metal实例上运行Firecracker,同时也可将其运行在任何其它裸机服务器之上,具体包括内部环境以及开发人员的笔记本电脑。
Firecracker还将启用目前极具人气的容器运行时(例如containerd)将容器作为微虚拟机进行管理。如此一来,用户的Docker与容器编排框架(例如Kubernetes)将能够使用Firecracker。我们已经构建起一套原型设计,使得containerd能够将容器作为Firecracker微虚拟机加以管理。我们也希望能够与社区一道进一步推动其广泛普及。
Firecracker上手指南
下面,让我们一起来看如何在AWS云上使用Firecracker(以下步骤亦适用于任何裸机设备):
创建一个使用Ubuntu 18.04.1版本的i3.metal实例。
Firecracke以KVM为构建基础,且需要面向/dev/kvm进行读取/写入访问。通过终端登录至该主机,而后设置此访问:
下载并启动Firecracker二进制文件:
每个微虚拟机都可以利用一个REST API进行bnaged。在另一终端当中,查询该微虚拟机:
随着我们的客户越来越多地采用无服务器服务,我们意识到现有虚拟化技术并不具备能够优化此类工作负载所固有的事件驱动以及时常出现的短暂属性。我们认为,有必要专门面向无服务器计算构建起新的虚拟化实现技术,从而在为基于硬件虚拟化的虚拟机提供安全边界的同时,继续保持较小的打包体积以及容器与函数的灵活性。
Firecracker技术
Firecracker启动的是最小内核配置,其不依赖于模拟BIOS,也不具备完整的设备模型。其中少数存在的设备就只有virtio net与virtio block,外加单键式键盘(由于没有电源管理设备,因此用户需要使用其中的复位功能)。这种最小设备模型不仅能够带来更快的启动时间(在默认大小的微虚拟机i3.metal上,启动时间低于125毫秒),还能够有效减少攻击面以显著提高安全性水平。感兴趣的朋友可以查阅与Firecracker技术承诺的更多详细信息[2],包括其如何为容器与无服务器工作负载的执行带来最低资源开销。
2017年秋季,我们决定使用Rust语言编写Firecracker——Rust是一种现代编程语言,能够有效保证线程与内存安全,同时防止可能引发各类安全漏洞的缓冲区溢出以及其它多种常见的内存安全错误。感兴趣的朋友可以参阅Firecracker设计[3]当中与Firecracker VMM功能与架构特性相关的更多细节信息。
Firecracker微虚拟机提高了效率与资源利用率,其中每一套微虚拟机的内存开销低于5 MiB。这意味着您可以将数千套微虚拟机打包至同一台计算机之上。此外,您还可以利用进程内速率限制器以细粒度方式控制网络与存储资源的共享方式,甚至能够跨越数千套微虚拟机进行全面控制。如此一来,您将能够安全地超额预订一切硬件计算资源,从而最大程度提升可运行在主机当中的工作负载总量。
我们还为Firecracker开源项目整理出包含以下指导性原则[4]的上手指南:
内置安全保障:我们提供计算安全约束机制,其支持多租户工作负载且不会被客户错误地加以禁用。客户工作负载将被视为同时具备神圣(不可接触)及恶意(应加以戒备)两种属性。
轻量级虚拟化:我们专注于长期或无状态类工作负载,而非长时间运行或持久性工作负载。Firecracker的硬件资源开销明确且经过大量事实的验证。
功能极简主义:如果没有明确的需求,我们不会在任务当中构建额外的功能。我们针对每项功能保持着独立且唯一的实现方式。
计算超额预订:Firecracker向客户公开的所有硬件计算资源,都可以安全地进行超额预订。
我们之所以要对这项基础技术加以开源,是因为我们相信我们承担着为无服务器计算构建下一代虚拟化方案的使命,而目前这项工作才刚刚迈出第一步。
Firecracker的使用方式
在此之前,Fargate Tasks包含一个或者多个运行于专用EC2虚拟机当中的Docker容器,旨在确保任务间相互隔离。这些任务现在可以在Firecracker微虚拟机上执行,这使得我们能够立足EC2裸机实例对Fargate运行时层进行更快、更高效地配置,同时在不影响任务内核级隔离能力的前提下提高工作负载密度。随着时间的推移,这还使我们得以继续在运行时层内实现创新,为我们的客户提供更好的性能表现,同时保持高安全性水平并降低运行无服务器容器架构的总体成本。
Firecracker目前运行在英特尔处理器之上,并将在2019年年内实现对AMD以及ARM处理器的支持。
您可以在AWS .metal实例上运行Firecracker,同时也可将其运行在任何其它裸机服务器之上,具体包括内部环境以及开发人员的笔记本电脑。
Firecracker还将启用目前极具人气的容器运行时(例如containerd)将容器作为微虚拟机进行管理。如此一来,用户的Docker与容器编排框架(例如Kubernetes)将能够使用Firecracker。我们已经构建起一套原型设计,使得containerd能够将容器作为Firecracker微虚拟机加以管理。我们也希望能够与社区一道进一步推动其广泛普及。
Firecracker上手指南
下面,让我们一起来看如何在AWS云上使用Firecracker(以下步骤亦适用于任何裸机设备):
创建一个使用Ubuntu 18.04.1版本的i3.metal实例。
Firecracke以KVM为构建基础,且需要面向/dev/kvm进行读取/写入访问。通过终端登录至该主机,而后设置此访问:
sudo chmod 777 /dev/kvm
下载并启动Firecracker二进制文件:
curl -L https://github.com/firecracker-microvm/firecracker/releases/download/v0.11.0/firecracker-v0.11.0
./firecracker-v0.11.0 --api-sock /tmp/firecracker.sock
每个微虚拟机都可以利用一个REST API进行bnaged。在另一终端当中,查询该微虚拟机:
curl --unix-socket /tmp/firecracker.<