@Krjwuh1JmxFA4tb0の技術ブログ

firecrackerからmicrovmを起動させた

ドキュメントは以下です
https://firecracker-microvm.github.io/
https://github.com/firecracker-microvm/firecracker

環境は、GCPでnested vmを作り、それを利用した
nested vmの記事

また、firecrackerのrequirementはKernel 4.14以上となっているが、
Kernel 3.x (centos7)を使ってやってみたところ、できてしまいました。

また、この内容はクラスメソッドさんなどの記事を参考に(殆ど写経みたいな感じ)しました。
クラスメソッドさん、いつも勉強になってます

さて、ここからが本題。

dockerのインストールは省略します。

KVM の確認

OSにログインし、以下を実行する

[ -r /dev/kvm ] && [ -w /dev/kvm ] && echo "OK" || echo "FAIL"

firecrackerのbinaryをダウンロードする

curl -fsSL -o /usr/local/bin/firecracker https://github.com/firecracker-microvm/firecracker/releases/download/v0.15.2/firecracker-v0.15.2  

chmod +x /usr/local/bin/firecracker  

# 確認  
firecracker -V

firecrackerのprocessを起動する

rm -f /tmp/firecracker.sock  
firecracker --api-sock /tmp/firecracker.sock

これをやるとプロンプトが返らないので、別のターミナルを起動させる

ここからは、別のターミナルで操作する

firecrackerのプロセス確認

curl --unix-socket /tmp/firecracker.sock -i http://localhost/

micro vmのテストイメージをダウンロード

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

binaryをアップロード

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"  
}'

rootfsをアップロード

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  
}'

micro vmを起動させる

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"  
 }'

micro vmへログイン

firecrackerを起動させたターミナルで、以下のログインパスワードでログインする

root / root

micro vmの確認

curl --unix-socket /tmp/firecracker.sock -i http://localhost/

GET系APIをリクエストしてみる

firecracker API

curl --unix-socket /tmp/firecracker.sock http://localhost/machine-config

感想

難しいと思ってたんですが、microvmを立ち上げるだけなら意外とスムーズにできました。

firecracker上のmicrovmはインターネットに出れないので、出るためにはKVMあたりのネットワーク設定をしないといけません。
それはまた後日やってみようかなと思います

この記事へのコメント

まだコメントはありません