MAASには指定したノードにKVMホスト環境をデプロイ、管理する機能がずいぶん前のバージョンから機能として実装されています。
MAAS 3.0ではVirshベースの管理の他、LXDベースの仮想化ホストのデプロイができるようになっており、Virshベース同様にMAASのDashboardから仮想マシンホストの展開、仮想マシンの運用ができるようになっています。
LXDにはホストをまたいだコンテナやイメージの転送、デバイスパススルー、可用性を考慮した設計になっているので、将来的にはそのような運用もできそうです。
MAAS 3.0でLXD管理ベースのKVMホストをデプロイするには
ノードを選んでデプロイを実行し、「Register as MAAS KVM host」とオプションとして「LXD」もしくは「libvirt」を選択してデプロイするだけです。非常に簡単。Ubuntu 20.04か18.04が要件になっていますが、Ubuntu 20.04の方がおすすめです。
なお今回の内容とは外れますが、提供されているMAASイメージはcloud-initがインストールされているので、同じページにある「Cloud-init user-data」オプションを使うことでOS導入をカスタマイズできます。例えばパスワード認証を許可するとか、事前に任意のパッケージをいれるとか、任意の設定を仕込むとかが可能です。cloud-initについてはcloud-init Documentation等を参考にします。
デプロイを開始して暫しKVMメニューを開くと、KVMホストとしてデプロイしたノードが次のように表示されます。
真ん中の「Compose VM」ボタンを押すと、次のような画面が表示されます。CPU、メモリー、ストレージ、ネットワークなどを適切な設定をします。ホスト名を設定するとその名前の仮想マシンが作成されます。
暫くすると仮想マシンが作成され、MAASにノードとして登録されます。後はMAASで物理マシンのようにマシンの利用、管理が可能になります。
せっかくLXDが使えるのでコンテナーも使いたい
LXDというとLinux Container(LXC)を管理するためのデーモンと言ったイメージがある方もいるかと思いますが、LXD 4.0では仮想マシンの管理もできるようになっています。MAAS 3.0で使えるようになった機能はこれをうまく使っている形です。
さて、せっかくLXDが使える環境をセットアップできたので、LXCコンテナーも動かしてみましょう。
設定変更が必要なこと
LXCでは標準のネットワークブリッジとしてlxdbr0と言うものが用意されており、これがデフォルトのネットワークインターフェイスとして割り当てられます。これはいわゆるNATインターフェイスなので外部からアクセスはできないものになっています。
MAASでLXD-KVMホストをデプロイするとブリッジが自動で生成されるため、そのブリッジを使うように設定するだけで物理ネットワークにコンテナーや仮想マシンを接続できます。
変更前
$ lxc profile edit default ... description: Default LXD profile devices: eth0: name: eth0 network: lxdbr0 type: nic ...
変更後
$ lxc profile edit default ... description: Default LXD profile devices: eth0: name: eth0 nictype: bridged parent: br-eno1 type: nic ...
LXCコンテナーを起動する
あとはLXCコマンドでコンテナーを起動するだけです。
$ lxc launch ubuntu:18.04 Creating the instance Instance name is: bursting-ostrich Starting bursting-ostrich $ lxc list +------------------+---------+----------------------+------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------------------+---------+----------------------+------+-----------+-----------+ | bursting-ostrich | RUNNING | 172.17.28.158 (eth0) | | CONTAINER | 0 | +------------------+---------+----------------------+------+-----------+-----------+
LXCコマンドで仮想マシンを起動する
--vm
オプションをつけると仮想マシンの作成も可能になっています。
イメージについては詳細は「Running virtual machines with LXD 4.0」に書かれていますが、オフィシャルのイメージはLXD agentが導入されていないため、コミュニティが提供するイメージを使っています。オフィシャルのイメージを使いたいとか、Ubuntu以外のイメージを使いたい場合は上記情報を参照してください。
$ lxc launch images:ubuntu/bionic --vm Creating the instance Instance name is: top-piglet Starting top-piglet $ lxc list +------------------+---------+------------------------+------+-----------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------------------+---------+------------------------+------+-----------------+-----------+ | bursting-ostrich | RUNNING | 172.17.28.158 (eth0) | | CONTAINER | 0 | +------------------+---------+------------------------+------+-----------------+-----------+ | top-piglet | RUNNING | 172.17.28.160 (enp5s0) | | VIRTUAL-MACHINE | 0 | +------------------+---------+------------------------+------+-----------------+-----------+
LXCコンテナ/仮想マシンについて
LXCコンテナー/仮想マシンへのアクセスは「lxc exec top-piglet bash」のように実行します。 停止するなら「lxc stop top-piglet」、削除するなら「lxc delete top-piglet」です。コマンドオプションは直感的だと思います。
なお、LXCコマンドを使って作成したコンテナーおよび仮想マシンについてはMAAS Dashboardには現れない点に注意してください。
MAAS KVMはどういったシーンでおすすめか?
KubernetesやOpenStack、Dockerを使うほどではない規模で仮想マシン、コンテナーを使いたい場合は有用かなと思います。 そもそもLXCはシステムコンテナーなので、KubernetesやDockerとは同列ではないのですけど。