YAMLファイルでVM構築してみない?(8/19更新)


はじめに

普段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にコメントいただけたら幸いです。