はじめに
普段KVM触るときに```virt-install``コマンドを使用してVMを作成しています。しかし、コマンドが長くなりがちで、何個か環境を作成したり、時間を空けて環境を作るとき、すこし手間になっています。なので、ファイルベースにVMを作成できたらいいな、ということで、mkvmというツールを作成しました。まだ基本的な機能しか実装していませんが、今後アップデートしていく予定です。
mkvmのソースコード
更新履歴
- 8/14 記事を作成、公開
- 8/19 誤字、脱字の修正, 一括作成機能の追加
mkvmの概要
- Golangで開発している
- YAMLファイルでVMを作成できる
- 複数VMを同時に構築できます(動作未確認)
- ツール実行は自己責任でお願いします
インストールの仕方
今回は、ubuntu20.04でやっていきます。
まず、Golangをインストールします。
# snap install go --classic
# go version
go version go1.16.5 linux/amd64
次に、mkvmをダウンロードし、実行に必要なパッケージをインストールします。そして、コンパイルします。
# git clone https://github.com/DevelopNaoki/mkvm
# cd mkvm
# go mod download
# go build
これで、mkvmが実行できるようになりました。
# ./mkvm -h
mkvm is manage VM and build VM by mkvm.yml
Usage:
mkvm [flags]
mkvm [command]
Available Commands:
build build VM by mkvm.yml
check Check thin program can execution
help Help about any command
list Print VM status
version Print mkvm version
Flags:
-h, --help help for mkvm
Use "mkvm [command] --help" for more information about a command.
使い方
checkコマンドはmkvmが正常に実行できるかチェックを行います。以下のようにすべての項目をパスしていれば実行できます。
# ./mkvm check
Check CPU virtualization... [Pass]
Check virsh command... [Pass]
Check virt-install command... [Pass]
listコマンドはvirsh list
と同じように動作します。
# ./mkvm list -h
Print VM status
Usage:
mkvm list [flags]
Flags:
-h, --help help for list
inactive list inactive domain
all list all domain
buildコマンドはmkvm.ymlに記述されているVMを構築します。(mkvm.ymlファイルの検証は未実装です)
# cat mkvm.yml
vms:
- name: test
vcpus: 1
memory: 1024
disk:
path: /var/kvm/images/test.img
format: qcow2
size: 16
graphics: vnc,listen=0.0.0.0
location: /var/kvm/isos/CentOS-7-x86_664-Minimal-2009_Auto.iso,kernel=isolinux/vmlinuz,initrd=isolinux/initrd.img
extra-args: "inst.ks=cdrom:/ks/anaconda-ks.cfg inst.stage2=cdrom console=tty0 console=ttyS0,115200n8"
network:
- bridge=virbr0
# ./mkvm build
# ./mkvm list all
Id Name State
----------------------
1 test running
YAMLファイルの構文
基本的には、virt-install
の内容に沿っています。
vms:
- name: test
count: 2 # test0(test0.img), test1(test1.img)が作成される。
vcpus: 1
memory: 1024 # MB
disk:
path: ~/test.img
format: qcow2
size: 16 # GB
location: ~/test.iso
extra-args: "console=tty0 console=ttyS0,115200n8"
graphics: vns,listen=0.0.0.0
network:
- bridge=virbr0
- name: test2
vcpus: 1
memory: 1024 # MB
disk:
path: ~/test2.img
import: true
cdrom: ~/test2.iso
graphics: none
network:
- bridge=virbr0
おわりに
誤字脱字やバグ、追加したほうがいい機能などがありましたら、こちらの記事やgithubのissuesにコメントいただけたら幸いです。