Post

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

https://ilz.me/posts/firecracker-rootfs/

This post is licensed under CC BY 4.0 by the author.