概要
firecracker は Amazon がオープンソースで開発しているサーバレスアーキテクチャを実現するための軽量 VM です
firecracker 上で動作する microVM を使ってサーバレスアーキテクチャを実現します
今回は firecracker のインストールから microVM の起動まで試してみました
環境設定
- Ubuntu 16.04.2 LTS (kernel 4.4.0-62-generic)
- libvirt 1.3.1-1ubuntu10.24
- firecracker 0.13.0
VM 設定変更
今回は Ubuntu16.04 上に KVM をインストールして KVM を使って firecracker を動作させます
本来であれば物理サーバ上にインストールした Ubuntu が必要なのですが、なかったので ESXi 上に構築した Ubuntu を使いました
仮想化の上に仮想化環境を構築するので Nested Virtulazation の設定が必要になります
ESXi であれば作成した Ubuntu の VM の設定から「Expose hardware assisted virtualization to the guest」のチェックをオンにすれば OK です
この設定は VM が停止している状態でないとできないのでご注意ください
KVM インストール
まずは KVM をインストールします
すでに KVM が動作する環境がある方は飛ばしてもらって OK です
sudo apt -y install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
sudo setfacl -m u:${USER}:rw /dev/kvm
grep -c '(vmx|svm)' /proc/cpuinfo
0 以上になっていることを確認しましょう
kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
最終的に kvm-ok の結果が上記のようになっていれば OK です
firecracker インストール
firecracker は Github 上でバイナリで配布されています
ダウンロードして PATH 上に配置すれば完了です
バージョンの部分は適宜変更して最新版をインストールしてください
curl -LOJ https://github.com/firecracker-microvm/firecracker/releases/download/v0.13.0/firecracker-v0.13.0
- `mv firecracker-v0.13.0 firecracker
chmod +x firecracker
sudo mv firecracker /usr/local/bin/
firecracker --version
firecracker API 起動
それでは起動してみましょう
firecracker は socket 通信を使って API サーバを起動させることで使えるようになります
rm -f /tmp/firecracker.socket
firecracker --api-sock /tmp/firecracker.socket
microVM 起動
API サーバが起動したらコールしてみます
作成された socker ファイルを使って API サーバと通信します
その前に firecracker で microVM を起動するのに必要なイメージファイルとディスクファイルをダウンロードします
Getting started 用のイメージファイルとディスクファイルがすでに準備されているのでそれを使います (中身は Alpine Linux)
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
これを使って API をコールします
まずはイメージを使って boot-source を作成します
curl --unix-socket /tmp/firecracker.socket -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.socket -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
}'
最後にマシンのスペックを決定します
CPU およびメモリサイズを指定します
curl --unix-socket /tmp/firecracker.socket -i \
-X PUT 'http://localhost/machine-config' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"vcpu_count": 1,
"mem_size_mib": 512
}'
あとは InstanceStart アクションを使って microVM を起動するだけです
さらっとやっていますが firecracker はこんな感じで REST API を使って microVM を操作します
curl --unix-socket /tmp/firecracker.socket -i \
-X PUT 'http://localhost/actions' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"action_type": "InstanceStart"
}'
各 API のレスポンスですが基本 204 No Content が返ってきました
何もしていないかと思うくらいレスポンスが早いですが大丈夫です
InstanceStart すると firecracker API を動作させていたターミナルでログインプロンプトが動作します
root/root で microVM の Alpine Linux にログインすることができます
作成した各リソースは以下のように GET をコールすることで取得できます (以下は machine-config を取得しています)
curl -s --unix-socket /tmp/firecracker.socket \
-X GET 'http://localhost/machine-config' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
microVM 停止
これがよくわかりませんでした
API でできるらしいのですがやり方がわからず断念しました
InstanceStop というアクションがあるかなーと思いコールしてみたのですがそんなアクションはないと言ってエラーとなりました
テストだったので自分は firecracker のプロセスを kill して socker ファイルを削除することで microVM も停止しました
firectl という専用の CLI があるのでこれでできないかなーと思ったのですがコマンドがなくダメでした
最後に
KVM 上で firecracker を試してみました
KVM 環境があればサクッと試すことはできるようです
同じレイヤーのソフトウェアとしては Virtualbox や VMware Fusion などがあります
特徴としては高速かつセキュアに軽量な VM が起動できる点かなと思います
firecracker は起動したい microVM ごとに firecracker プロセスを起動させます
そしてアクセスする場合にはそれぞれのプロセスごとに作成された socker ファイルを使うので microVM ごとにサンドボックスになっているのでセキュアなのかなと思います
これからの成長と具体的なユースケースの登場に期待かなと思います
0 件のコメント:
コメントを投稿