1.引言
AWS 开源了 Firecracker,一种利用 KVM
的新虚拟化技术,专门用于创建和管理多租户容器以及基于函数的服务。你可以在几分之一秒内在非虚拟化环境中启动轻量级微虚拟机(microVM),充分利用传统虚拟机提供的安全性和工作负载隔离,同时兼具容器的资源效率。
Firecracker 是一种采用基于 Linux 内核的虚拟机 (KVM) 技术的开源虚拟机监控程序(VMM)Firecracker允许您创建微型虚拟机,即 microVM。Firecracker坚持精简主义的设计原则,它仅包含运行安全、轻量的虚拟机所需的组件。在设计过程的各个环节,AWS 依据安全性、速度和效率要求来优化
Firecracker。例如,仅启动相对较新的 Linux 内核,并且仅启动使用特定配置选项集编译的内核(内核编译配置选项超过 1000 种)。此外,不支持任何类型的图形卡或加速器,不支持硬件透传,不支持(大多数)老旧设备。
Firecracker启动的内核配置极少,不依赖仿真BIOS,不使用完整设备模式。唯一的设备是半虚拟化网卡和半虚拟化硬盘,以及单按钮键盘(复位引脚在无电源管理设备时使用)。这种极简的设备模式不仅有利于缩短开机时间(采用默认microVM 型号的 i3.metal 实例开机时间 < 125 毫秒),同时也减少了***面,从而提高了安全性。请参阅有关Firecracker 承诺支持以极低的开销执行容器和无服务器工作负载的更多信息。
2017 年秋,AWS 决定以 Rust 语言来编写Firecracker,这是一种非常先进的编程语言,可保证线程和内存安全,防止缓存溢出以及可能导致安全性漏洞的许多其他类型的内存安全问题。请访问
Firecracker 设计以了解有关 Firecracker VMM 功能和架构的更多详细信息。
由于设备模型极简,内核加载过程也简单,可以实现小于 125 ms 的启动时间和更少的内存占用。Firecracker 目前支持 IntelCPU,并将于 2019 年开始支持 AMD 和 ARM,还将与 containerd 等流行的容器运行时集成。Firecracker支持内核版本为 4.14 及更高版本的 Linux 主机和客户机操作系统。
Firecracker microVM提高了效率和利用率,内存开销极低,每 microVM 的内存开销 < 5MiB。这意味着用户可以将数千个 microVM封装到一个虚拟机中。可以使用进程中速率限制器来实现对网络和存储资源的共享方式的精细控制,即使跨数千个 microVM也同样可行。所有硬件计算资源可以安全地超订,从而最大化可以在主机上运行的工作负载数量。
2.安装firecracker
dnf install firecracker
2.1.配置firecracker
修改/dev/kvm权限
chmod 777 /dev/kvm
终端执行firecracker运行命令
firecracker --api-sock /tmp/firecracker.sock
注意:
下面操作步骤打开一个新的终端来执行操作:
查看firecracker的进程是否在运行:
ps -ef |grep firecracker
查看内存占用情况:
cat /proc/424231/status |grep VmRSS
修改vcpu和内存
curl --unix-socket /tmp/firecracker.sock "http://localhost/machine-config"
这将启动一个 VMM 进程并等待 microVM 配置。默认情况下,每个 microVM 将分配一个 vCPU 和 128MiB内存,如果需要修改 vCPU 和内存大小,可以向 microVM 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": 2,
"mem_size_mib": 4096,
"ht_enabled": false
}'
2.2.设置启动系统内核和根目录
现在此 microVM 需要使用解压后的 Linux 内核二进制代码和将用作根文件系统的 ext4 文件系统来进行配置。
下载示例内核和rootfs:
curl -fsSL -o hello-vmlinux.bin https://s3.amazonaws.com/spec.ccfc.min/img/hello/kernel/hello-vmlinux.bin
curl -fsSL -o hello-rootfs.ext4 https://s3.amazonaws.com/spec.ccfc.min/img/hello/fsfiles/hello-rootfs.ext4
设置来宾内核:
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
}'
2.3.启动microVM
配置好内核和根文件系统后,将会启动来宾虚拟机:
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"
}'
注意:
执行完成上述命令后,切换刚才的终端发现有输出内容。
登陆microVM,到最后输出会看到让你登陆输入用户和密码。
microVM用户和密码都是“root”
测试验证操作:
ls /