Firecracker 学习记录
早两年就知道firecracker,去年空的时候尝试过基本的启动实例的操作,体感还行,最近重新回顾,并尝试结合设计新的使用模式。
先简单贴一些firecracker的文档使用摘要,详细参考 官方文档
由于我并不打算使用 api进行一次次curl操作,喜好一个配置文件拉起,所以并不会贴curl的东西(除了停止实例等实例操作)
启动我使用如下json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
"boot-source": {
"kernel_image_path": "vmlinux-5.10.186",
"boot_args": "console=ttyS0 reboot=k panic=1 pci=off",
"initrd_path": null
},
"drives": [
{
"drive_id": "rootfs",
"path_on_host": "ubuntu-22.04.ext4",
"is_root_device": true,
"partuuid": null,
"is_read_only": false,
"cache_type": "Unsafe",
"io_engine": "Sync",
"rate_limiter": null
}
],
"machine-config": {
"vcpu_count": 2,
"mem_size_mib": 1024,
"smt": false,
"track_dirty_pages": false
},
"cpu-config": null,
"balloon": null,
"network-interfaces": [{
"iface_id": "eth0",
"host_dev_name": "tap0"
}],
"vsock": null,
"logger": null,
"metrics": null,
"mmds-config": null,
"entropy": null
}
以上 kernel image 和 rootfs 均是从官方获取。
网络配置:
参考 官方文档
简单贴一些tap
1
2
3
4
5
6
7
sudo ip tuntap add tap0 mode tap
sudo ip addr add 172.16.0.1/24 dev tap0
sudo ip link set tap0 up
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i tap0 -o eth0 -j ACCEPT
~~ 在实例中需要执行 ~~ (可参考 boot args):
1
2
3
ip addr add 172.16.0.2/24 dev eth0
ip link set eth0 up
ip route add default via 172.16.0.1 dev eth0
目前研究dhcp的方案,反正装个dhcp服务即可
一些操作
SendCtrlAltDel Example
1
2
3
curl --unix-socket /tmp/firecracker.socket -i \
-X PUT "https://localhost/actions" \
-d '{ "action_type": "SendCtrlAltDel" }'
扩容rootfs大小
1
2
truncate -s 5G ubuntu.ext4
resize2fs ubuntu.ext4
制作镜像
可参考
https://github.com/bkleiner/ubuntu-firecracker
https://github.com/firecracker-microvm/firecracker/blob/main/docs/rootfs-and-kernel-setup.md
This post is licensed under CC BY 4.0 by the author.