CanonicalがMultipassというツールをリリースしていたので触ってみました。
触ろうと思ったきっかけは偶然次のような記事を見つけたためです。
Multipassを使ってUbuntu VMを作ってその中でKubernetesとか動かしたら便利っぽいな? ...ということで、早速使ってみました。
ダウンロードとインストール
インストーラーを使って導入する
WindowsやmacOSの場合は、公式のサイトからインストーラーをダウンロードできます。これを使ってインストールします。
macOSでHomebrewを使ってインストールする場合
macOSの場合はHomebrewを使う方法もあるようです。
% brew cask install multipass
Linuxでsnapdを使ってインストールする場合
Linuxの場合はsnapdを使ってインストールできます。Ubuntu 16.04以降のバージョンでは標準でsnapdがインストールされているようですが、 インストールされていない場合は、事前にsnapdをインストールしてから実行します。
% sudo snap install multipass --beta --classic
デフォルトではWindowsはHyper-V、macOSはAppleのHypervisor、LinuxはLinux KVMがエンジンとして使われるようです。 WindowsやmacOSについては設定を変更するとVirtualBoxをエンジンとして使うことができるようです。
イメージの検索
multipass find
を実行すると、インスタンスの起動に使えるイメージを検索できます。
macOSで動かした場合
macOS + Multipass 0.8.0 の組み合わせでは、現在LTS版のUbuntuイメージのみが提供されています。イメージを指定しない場合はltsエイリアスが設定されているUbuntu 18.04イメージが使われます。
% multipass find Image Aliases Version Description snapcraft:core core16 20191025 Snapcraft builder for Core 16 snapcraft:core18 20191025 Snapcraft builder for Core 18 16.04 xenial 20191024 Ubuntu 16.04 LTS 18.04 bionic,lts 20191021 Ubuntu 18.04 LTS
Ubuntu/CentOS 7で動かした場合
Ubuntu + Multipass 0.8.1 Betaの組み合わせでは、macOS向けMultipassよりも多くのOSイメージが提供されています。Ubuntu Coreが使えるのもポイントです。
~$ multipass find Image Aliases Version Description snapcraft:core core16 20191025 Snapcraft builder for Core 16 snapcraft:core18 20191025 Snapcraft builder for Core 18 core core16 20190806 Ubuntu Core 16 core18 20190806 Ubuntu Core 18 16.04 xenial 20191024 Ubuntu 16.04 LTS 18.04 bionic,lts 20191021 Ubuntu 18.04 LTS 19.04 disco 20191022 Ubuntu 19.04 19.10 eoan 20191023 Ubuntu 19.10 daily:20.04 devel,focal 20191029 Ubuntu 20.04 LTS
コマンドオプションの一覧について
コマンドオプションの一覧は --help
で確認できます。なんとなくオプションはLXDのlxcコマンドやDockerに似ている感じです。
% multipass --help Usage: multipass [options] <command> Create, control and connect to Ubuntu instances. This is a command line utility for multipass, a service that manages Ubuntu instances. Options: -h, --help Display this help -v, --verbose Increase logging verbosity, repeat up to three times for more detail Available commands: delete Delete instances exec Run a command on an instance find Display available images to create instances from get Get a configuration option help Display help about a command info Display information about instances launch Create and start an Ubuntu instance list List all available instances mount Mount a local directory in the instance purge Purge all deleted instances permanently recover Recover deleted instances restart Restart instances set Set a configuration option shell Open a shell on a running instance start Start instances stop Stop running instances suspend Suspend running instances transfer Transfer files between the host and instances umount Unmount a directory from an instance version Show version details
Ubuntuインスタンスの起動
multipass launch
コマンドを実行します。OSイメージを指定しない場合は現時点ではUbuntu 18.04 LTSが使われます。
% multipass launch --name foo % multipass launch --name bar % multipass list Name State IPv4 Image bar Running 192.168.64.3 Ubuntu 18.04 LTS foo Running 192.168.64.2 Ubuntu 18.04 LTS
コマンドオプションは以下のようなものが使えます。
Options: -h, --help Display this help -v, --verbose Increase logging verbosity, repeat up to three times for more detail -c, --cpus <cpus> Number of CPUs to allocate -d, --disk <disk> Disk space to allocate. Positive integers, in bytes, or with K, M, G suffix. Minimum: 512M. -m, --mem <mem> Amount of memory to allocate. Positive integers, in bytes, or with K, M, G suffix. Mimimum: 128M. -n, --name <name> Name for the instance --cloud-init <file> Path to a user-data cloud-init configuration, or '-' for stdin
例えば次のように実行することで、vCPUとメモリーを指定できます。
% multipass launch --name hoge -c2 -m2G
プロセスについて
macOS版MultipassでUbuntuインスタンスを起動したときに実行されたプロセスは次のような感じでした。macOSではインスタンスの実行にhyperkitが使われているのを確認できます。
% ps aux|grep multipass root 13398 0.1 1.5 5430308 248528 ?? S 10:48AM 0:14.48 /Library/Application Support/com.canonical.multipass/bin/hyperkit -c 1 -m 1024M -u -A -H -U 37b51d19-4a75-33e4-9b56-f6524f2d51f2 -s 0:0,hostbridge -s 2:0,virtio-net -s 5,virtio-rnd -s 31,lpc -l com1,autopty=/var/root/Library/Application Support/multipassd/vault/instances/bar/pty,log=/Library/Logs/Multipass/bar-hyperkit.log -s 1:0,ahci-hd,file:///var/root/Library/Application Support/multipassd/vault/instances/bar/ubuntu-18.04-server-cloudimg-amd64.img?sync=os&buffered=1,format=qcow,qcow-config=discard=true;compact_after_unmaps=0;keep_erased=0;runtime_asserts=false -s 1:1,ahci-cd,/var/root/Library/Application Support/multipassd/vault/instances/bar/cloud-init-config.iso -f kexec,/var/root/Library/Application Support/multipassd/vault/instances/bar/ubuntu-18.04-server-cloudimg-amd64-vmlinuz-generic,/var/root/Library/Application Support/multipassd/vault/instances/bar/ubuntu-18.04-server-cloudimg-amd64-initrd-generic,earlyprintk=serial console=ttyS0 root=/dev/sda1 rw panic=1 no_timer_check
Ubuntuインスタンスへのアクセス
起動したインスタンスへのアクセスはshellオプションを使ったり、execオプションを使う方法があるようです。インスタンスに導入されているシェルを予測しないでも使えるので、shellオプションのほうが使いやすいと思います。
% multipass shell foo % multipass exec foo bash
ちなみに、execの使い方としては主にコマンドをVMで実行して、結果を標準出力するためにつかうようです。
% multipass exec foo -- uname -a Linux foo 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Ubuntuインスタンスでmicrok8sの導入
インスタンスはハイパーバイザーの違いはあれど仮想マシン上で動いていますので、snapコマンドを使って導入できます。
% sudo snap install microk8s --classic
ただ、ホストの外からのアクセスはできない(NAT接続である)ため、複数台のマシン上でホストしたマシンをクラスター化することはできません。
あまり意味はないかと思いますが、同じマシン上でホストするMultipass VMを用意すれば同じネットワークに繋がるのでクラスター化できます。
Ubuntuインスタンスでk3sによるKubernetesの導入
microk8s同様に、k3sも通常のインストール通りにセットアップ可能です。制限もmicrok8sのときと同様です。
% curl -sfL https://get.k3s.io | sh -
Ubuntuインスタンスにホストパスをマウントする
multipass mount
を使うことで、起動したUbuntuインスタンスにホストの任意パスをマウント可能です。
次のようにマウント先を省略した場合は、インスタンスに指定したパスと同じディレクトリーが生成され、マウントできます。このディレクトリー内のファイルについては当然読み書き可能です。
% multipass mount /Users/ytooyama/temp/ foo
次のようにマウント元とマウント先を指定すると、指定したインスタンスのパスにディレクトリーがマウントされてファイルの読み書きが可能になります。
% multipass mount /Users/ytooyama/temp/ bar:/home/multipass/temp
作成したUbuntuインスタンスを片付ける
インスタンスはmultipass delete
コマンドで削除状態にできます。
% multipass delete foo bar % multipass list Name State IPv4 Image bar Deleted -- Not Available foo Deleted -- Not Available
削除状態のインスタンスはmultipass recover
で復元でき、multipass purge
コマンドで削除状態のインスタンスをすべて消去できます。
% multipass recover foo % multipass list Name State IPv4 Image foo Stopped -- Ubuntu 18.04 LTS bar Deleted -- Not Available % multipass start foo
使用感
microk8sを使う場合はデフォルト値よりも多くのCPUとメモリーを割り当てたほうが良いと感じました( multipass launch
実行時にオプションを指定)。一方で、k3sはデフォルトのまま起動しても仮想マシンで動いていることを意識することなく、Kubernetesをデプロイできました。
もともとk3sはかなりスペックが厳しいマシンでも動く設計だからかもしれません。当然ながらどちらを使う場合もデフォルトより多くのメモリーを割り当てたほうが快適に動かすことができます。
今回はKubernetesを動かすためにMultipassをつかいましたが、アプリケーションをちょっと動かしたいときとか、普段使っているOSでは使えないバージョンのソフトウェアを使いたいときとかに役立ちそうに思いました。