仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

MAAS 3.0でLXD管理ベースのKVMホストをデプロイする

MAASには指定したノードにKVMホスト環境をデプロイ、管理する機能がずいぶん前のバージョンから機能として実装されています。

MAAS 3.0ではVirshベースの管理の他、LXDベースの仮想化ホストのデプロイができるようになっており、Virshベース同様にMAASのDashboardから仮想マシンホストの展開、仮想マシンの運用ができるようになっています。

f:id:virtualtech:20211029171634p:plain

LXDにはホストをまたいだコンテナやイメージの転送、デバイスパススルー、可用性を考慮した設計になっているので、将来的にはそのような運用もできそうです。

MAAS 3.0でLXD管理ベースのKVMホストをデプロイするには

ノードを選んでデプロイを実行し、「Register as MAAS KVM host」とオプションとして「LXD」もしくは「libvirt」を選択してデプロイするだけです。非常に簡単。Ubuntu 20.04か18.04が要件になっていますが、Ubuntu 20.04の方がおすすめです。

f:id:virtualtech:20211029171923p:plain

なお今回の内容とは外れますが、提供されているMAASイメージはcloud-initがインストールされているので、同じページにある「Cloud-init user-data」オプションを使うことでOS導入をカスタマイズできます。例えばパスワード認証を許可するとか、事前に任意のパッケージをいれるとか、任意の設定を仕込むとかが可能です。cloud-initについてはcloud-init Documentation等を参考にします。

f:id:virtualtech:20211029172106p:plain

デプロイを開始して暫しKVMメニューを開くと、KVMホストとしてデプロイしたノードが次のように表示されます。

f:id:virtualtech:20211029172405p:plain

真ん中の「Compose VM」ボタンを押すと、次のような画面が表示されます。CPU、メモリー、ストレージ、ネットワークなどを適切な設定をします。ホスト名を設定するとその名前の仮想マシンが作成されます。

f:id:virtualtech:20211029172526p:plain

暫くすると仮想マシンが作成され、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とは同列ではないのですけど。