毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
0. はじめに
筆者はUbuntuのmultipassコマンドが大好きっ子です。
お手軽なコマンド体系と楽ちん操作で、仮想マシンを動かしたり止めたりが簡単にできるので、良い機能だなと思います。
しかし、ネットワーク部分があまりいけてませんでした。しかし、ブリッジインターフェースを使うことができるようになりました。
という記事を書きました(汗)。
Ubuntu 20.04でMultipassをブリッジネットワークで動かす(Ver1.6.2まで) - Qiita
https://qiita.com/ynott/items/d8cf08c1f4a279e37177
設定方法が分かりにくいとか、GitHubのIssueで文句を言いましたところmultipass Ver.1.7.0が__リリース__され、ちょっと設定方法が変わったようです
(文句を言ったから直してくれたわけではなくロードマップにあったようです)。
そこで、Ver.1.7.0の設定方法を試してみました。という記事になります。
1. 環境情報
OS: Ubuntu 20.04.2 LTS (GNU/Linux 5.8.0-59-generic x86_64)
Network: 192.168.xxx.0/24
NIC: enp2s0
Ubuntu母艦マシンIP: 192.168.xxx.yyy
multipass: Version 1.7.0
2. 前提
-
multipassのネットワークは、ネットワークのブリッジを先に作っておく必要があります。(1.7.0から不要です。Multipassがブリッジインターフェースを作成します ネットワークブリッジは、netplanで作るのがお勧めです(NetworkManagerでも作れなくはないと思いますが、私はできませんでした)- Ubuntu母艦マシンは固定IPにします(DHCPでも大丈夫だと思います)。
- lxdが必要です。
- multipass 1.7.0でテストしています。
3. multipassをインストール
$ sudo snap install multipass
multipass 1.7.0 from Canonical✓ installed
既に1.7.0がインストールされている場合は不要です。
この時点でmultipass networks
のコマンドは、qemuのままなのでエラーになります。
$ multipass networks
networks failed: The networks feature is not implemented on this backend.
4. zfsをインストール
この後でLXDのdefaultストレージプールを編集するときに必要になるのでzfsutilsも入れておきましょう。
sudo apt install zfsutils-linux
5. lxdをインストール
$ sudo snap install lxd
lxd 4.16 from Canonical✓ installed
こちらも既に 4.16がインストールされている場合は不要です。
1.6.2で必要だった初期設定は不要になりました。 嘘です。必要でした。下記に追記しています
5-1. lxdを初期化
multipass 1.6.2と同じです。
$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (lvm, zfs, ceph, btrfs, dir) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=30GB]: 100GB
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]:
Would you like the LXD server to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
デフォルトと違う注意ポイントは以下の2つです。
LXDのストレージプールはデフォルトの30GBでもいいですが、増やしておきましょう。
Size in GB of the new loop device (1GB minimum) [default=30GB]: 100GB
network bridgeインターフェースは、multipassが作るようになったのでlxdで作る必要はありません(multipass 1.6.2と同じ)。
no
と答えます。
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
6. multipassをlxdに接続する
6-1. multipassのローカルドライバーをqemuからlxdに変更
$ sudo multipass set local.driver=lxd
変更できたか確認する
$ multipass get local.driver
lxd
6-2. multipassをlxdに接続
$ sudo snap connect multipass:lxd lxd
接続できたのでmultipass networks
コマンドを再度実行
$ multipass networks
Name Type Description
enp2s0 ethernet Ethernet device
mpbr0 bridge Network bridge for Multipass
mpbr0が追加されているのが確認できます。
しかし、enp2s0
のブリッジインターフェースはまだ作成されていません。
6-3. LXDのストレージプールを確認
zfsのストレージプールを確認します。
$ sudo lxc storage list
+---------+--------+--------------------------------------------+-------------+---------+
| NAME | DRIVER | SOURCE | DESCRIPTION | USED BY |
+---------+--------+--------------------------------------------+-------------+---------+
| default | zfs | /var/snap/lxd/common/lxd/disks/default.img | | 0 |
+---------+--------+--------------------------------------------+-------------+---------+
100GBになっているのを確認(デフォルトは30GB)
$ sudo ls -la /var/snap/lxd/common/lxd/disks/default.img -h
-rw------- 1 root root 94G 8月 9 14:34 /var/snap/lxd/common/lxd/disks/default.img
6-4. multipassで使用するブリッジインターフェースを指定する
ネットワークインターフェースが複数ある場合は、ブリッジネットワークで使うインターフェースを指定しておく。
sudo multipass set local.bridged-network=enp2s0
7. multipassでブリッジネットワークを作成する
7-1. multipass でインスタンスを1つ起動する
--bridged
オプションを付けてlaunchする。
注意!!!:この時にブリッジインターフェースが作成されるのでネットワークが1回切断される。あわてない用に気をつける
(一回切断されるがインスタンスは継続して作成されるようです)
NetworkManagerの場合は、新しいブリッジインターフェースが作成されます。
既存のインターフェースにIPアドレスを付けていても引き継いでくれないので注意してください。
新しいインターフェースにIPアドレスを再度付け直す必要があります。
ネットワークインターフェースが1つしかない場合には接続できなくなります
$ multipass launch --bridged 20.04
Multipass needs to create a bridge to connect to enp2s0.
This will temporarily disrupt connectivity on that interface.
Do you want to continue (yes/no)? yes
Starting ethereal-bettong \
Socket error Event: 32 Error: 10053.
Connection closing...Socket close.
Connection closed by foreign host.
再接続してインスタンスの作成を確認する
$ multipass list
Name State IPv4 Image
ethereal-bettong Running 10.74.86.201 Ubuntu 20.04 LTS
192.168.xxx.5
192.168.xxx.5がブリッジネットワークに付与されたIPアドレス
7-2. ブリッジネットワークインターフェースを確認する
multipass networks
コマンドでブリッジインターフェースを確認する
$ multipass networks
Name Type Description
br-enp2s0 bridge Network bridge with enp2s0
enp2s0 ethernet Ethernet device
mpbr0 bridge Network bridge for Multipass
br-enp2s0
が追加されている。
7-3. ブリッジインターフェースを指定してインスタンスを作成する
br-enp2s0
がブリッジインターフェースとして作成されたのが分かったので、こちらを利用してインスタンスを起動してみる
$ multipass launch --bridged --network name=br-enp2s0,mode=manual
Launched: eloquent-emu
$ multipass list
Name State IPv4 Image
eloquent-emu Running 10.74.86.8 Ubuntu 20.04 LTS
192.168.XXX.2
mode=manual
を指定しているのにIPアドレスがついているのはご愛敬ですね。
8. まとめ
ブリッジネットワークを作らなくてよくなったのと、lxd initしなくてよくなったのは楽になりました。
(ブリッジインターフェースを作るときに切れてしまうのは仕方ないですが、心臓にはよくありません)
ちょっと触っていて、ブリッジインターフェースが動かなくなったりして接続が切れることがありました。
(sudo snap stop multipass したからかも..)
それ以外は快適です。
9. 注意点
- multipassのバックエンドがqemuからlxdに切り替えると既存の仮想マシンは見えなくなります!
- multipassが起動している状態で
zfsutils-linux
をインストールすると以下のログがでてインストールが完了しません。 zvol_wait[33286]: cannot open 'rpool/export/vault/block': dataset does not exist
- 以下のようにすればインストールが完了します。
-
-
multipass stop --all
でインスタンスを全て停止
-
-
-
sudo snap stop multipass
でmultipassを停止
-
-
- ネットワークインターフェースの管理にNetworkManagerを使っていると新しいブリッジインターフェースが作成されたときにIPアドレスが切り替わります。DHCP環境でない場合にはIPアドレスが割り振られず接続できなくなります。