This is based on the initial implementation prototype for full local snapshots.
- Run the ./scripts/cloudlab/setup_node.sh script.
- Copy the snapshot files (memfile, snapfile, infofile) on the cluster node where you want to start the function.
- Start firecracker-containerd in a new terminal
sudo /usr/local/bin/firecracker-containerd --config /etc/firecracker-containerd/config.toml
- Build go program
go build
- Create a snapshot
# sudo ./remote-firecracker-snapshots-poc -make-snap -id "<VM ID>" -image "<URI>" -revision "<revision ID>" -snapshots-base-path "<path/to/snapshots/folder>"
sudo ./remote-firecracker-snapshots-poc -make-snap -id "0>" -image "docker.io/library/nginx:1.17-alpine" -revision "nginx-0" -snapshots-base-path "./remote-firecracker-snapshots-poc/snaps"
"docker.io/curiousgeorgiy/golang-hello-world:latest"
- Boot from snapshot
# sudo ./remote-firecracker-snapshots-poc -boot-from-snap -id "<VM ID>" -revision "<revision ID>" -snapshots-base-path "<path/to/snapshots/folder>"
sudo ./remote-firecracker-snapshots-poc -boot-from-snap -id "0" -revision "nginx-0" -snapshots-base-path "./remote-firecracker-snapshots-poc/snaps"
Now, the uVM is started and this is confirmed by the logs of firecracker-containerd, which also gives the IP address of the uVM.
- Send a request
curl http://<VM IP address>:<container port>