仮想化通信

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

MAAS 3.1にアップグレードしたらMAASでKVM VMを作れなくなったが解決できた

MAASを3.0から3.1に変えてしばらく気がついていなかったのですが、KVM VMを作成しようとしたらLXDのバージョンアップを要求されてしまい、そのままではVMの作成ができない問題が発生しました。MAAS Dashboardにエラー表示はされていましたが、rackd.logにも次のようなメッセージが出ていました。

以下、/var/log/maas/rackd.logの抜粋です。

2022-05-16 01:37:48 provisioningserver.rpc.pods: [critical] bay12-gen8: Failed to compose machine: RequestedMachine(hostname='eks-admin', architecture='amd64/generic', cores=2, memory=4096, block_devices=[RequestedMachineBlockDevice(size=40000000000, tags=['default'])], interfaces=[RequestedMachineInterface(ifname=None, attach_name=None, attach_type=None, attach_options=None, attach_vlan=None, requested_ips=[], ip_mode=None)], cpu_speed=None, known_host_interfaces=[KnownHostInterface(ifname='eno1', attach_type='macvlan', attach_name='eno1', attach_vlan=None, dhcp_enabled=True), KnownHostInterface(ifname='eno2', attach_type='macvlan', attach_name='eno2', attach_vlan=None, dhcp_enabled=False), KnownHostInterface(ifname='eno3', attach_type='macvlan', attach_name='eno3', attach_vlan=None, dhcp_enabled=False), KnownHostInterface(ifname='eno4', attach_type='macvlan', attach_name='eno4', attach_vlan=None, dhcp_enabled=False), KnownHostInterface(ifname='eno5', attach_type='macvlan', attach_name='eno5', attach_vlan=None, dhcp_enabled=False), KnownHostInterface(ifname='eno6', attach_type='macvlan', attach_name='eno6', attach_vlan=None, dhcp_enabled=False), KnownHostInterface(ifname='br-eno1', attach_type='bridge', attach_name='br-eno1', attach_vlan=None, dhcp_enabled=True), KnownHostInterface(ifname='lxdbr0', attach_type='bridge', attach_name='lxdbr0', attach_vlan=None, dhcp_enabled=False), KnownHostInterface(ifname='tap163824ef', attach_type='macvlan', attach_name='tap163824ef', attach_vlan=None, dhcp_enabled=True), KnownHostInterface(ifname='tap5e3bd0c0', attach_type='macvlan', attach_name='tap5e3bd0c0', attach_vlan=None, dhcp_enabled=True), KnownHostInterface(ifname='tapfebb6e73', attach_type='macvlan', attach_name='tapfebb6e73', attach_vlan=None, dhcp_enabled=True), KnownHostInterface(ifname='tapb2f4e181', attach_type='macvlan', attach_name='tapb2f4e181', attach_vlan=None, dhcp_enabled=True), KnownHostInterface(ifname='tape581dc1d', attach_type='macvlan', attach_name='tape581dc1d', attach_vlan=None, dhcp_enabled=True)], pinned_cores=[], hugepages_backed=False)
        Traceback (most recent call last):
          File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
            self.run()
          File "/usr/lib/python3.8/threading.py", line 870, in run
            self._target(*self._args, **self._kwargs)
          File "/usr/lib/python3/dist-packages/twisted/_threads/_threadworker.py", line 46, in work
            task()
          File "/usr/lib/python3/dist-packages/twisted/_threads/_team.py", line 190, in doWork
            task()
        --- <exception caught here> ---
          File "/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 250, in inContext
            result = inContext.theWork()
          File "/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 266, in <lambda>
            inContext.theWork = lambda: context.call(ctx, func, *args, **kw)
          File "/usr/lib/python3/dist-packages/twisted/python/context.py", line 122, in callWithContext
            return self.currentContext().callWithContext(ctx, func, *args, **kw)
          File "/usr/lib/python3/dist-packages/twisted/python/context.py", line 85, in callWithContext
            return func(*args,**kw)
          File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 202, in wrapper
            result = func(*args, **kwargs)
          File "/usr/lib/python3/dist-packages/provisioningserver/drivers/pod/lxd.py", line 440, in compose
            self._check_required_extensions(client)
          File "/usr/lib/python3/dist-packages/provisioningserver/drivers/pod/lxd.py", line 501, in _check_required_extensions
            raise LXDPodError(
        provisioningserver.drivers.pod.lxd.LXDPodError: Please upgrade your LXD host to 4.16 or higher to support the following extensions: custom_block_volumes

ログの最終行に解決策が書いてありました。

現在この環境にインストール済みのLXDは、4.0/stableチャンネルのバージョン4.0.9みたいです。バージョン4.16以降にしろと言われているので、バージョン的に近い4.24/stableを選択することにしました。

$ snap info lxd
...
channels:
  latest/stable:    5.1-1f6f485   2022-05-12 (23037) 84MB -
  latest/candidate: 5.1-cd7fe68   2022-05-15 (23077) 84MB -
  latest/beta:      ↑                                     
  latest/edge:      git-f381aad   2022-05-14 (23072) 84MB -
  5.1/stable:       5.1-1f6f485   2022-05-12 (23037) 84MB -
  5.1/candidate:    5.1-cd7fe68   2022-05-15 (23077) 84MB -
  5.1/beta:         ↑                                     
  5.1/edge:         ↑                                     
  5.0/stable:       5.0.0-b0287c1 2022-04-20 (22923) 83MB -
  5.0/candidate:    5.0.0-b0287c1 2022-04-19 (22923) 83MB -
  5.0/beta:         ↑                                     
  5.0/edge:         ↑                                     
  4.24/stable:      4.24-c92c0b2  2022-04-01 (22754) 82MB -
  4.24/candidate:   4.24-c92c0b2  2022-04-01 (22754) 82MB -
  4.24/beta:        ↑                                     
  4.24/edge:        ↑                                     
  4.0/stable:       4.0.9-8e2046b 2022-03-26 (22753) 71MB -
  4.0/candidate:    4.0.9-8e2046b 2022-03-24 (22753) 71MB -
  4.0/beta:         ↑                                     
  4.0/edge:         git-407205d   2022-03-31 (22797) 73MB -
  3.0/stable:       3.0.4         2019-10-10 (11348) 55MB -
  3.0/candidate:    3.0.4         2019-10-10 (11348) 55MB -
  3.0/beta:         ↑                                     
  3.0/edge:         git-81b81b9   2019-10-10 (11362) 55MB -
installed:          4.0.9-8e2046b            (22753) 71MB -

とりあえず以下を実行しました。

$ sudo snap refresh lxd --channel=4.24/stable
lxd (4.24/stable) 4.24-c92c0b2 from Canonical✓ refreshed

バージョンが更新されたらサービスの再起動までは自動で行われます。ほんと楽。

snap refreshコマンドはsnapパッケージのアップデートやアップグレードを行うためのコマンドです。実行前に--classicオプションなどが現在のバージョンの導入に利用されていないことを確認します。これを間違えると、アップグレードに失敗するか、アップグレードはできたことになっているが実際はコンフィグレーションミスでまともに動かない状態になってしまいます(一度私は、Microstackのアップグレードを失敗しました)。今回は、アップグレード先のLXDバージョンを--channelオプションで指定しました。

アップグレード後に少し落ち着いたら、VMが作成できることを確認します。

今回の例ではLXD KVMホストのLXDのバージョンアップのみの実行であり、MAASのサービス再起動およびLXD KVMホストのサービス再起動は不要でした。 LXD KVMホストによって生成されたVMはパワーステートがエラー(赤色)になっていましたが、「Check Power」を実行したところ全て正常に戻りました。

とりあえず、問題を解決できてよかったです。MAASは物理マシン(物理ハードウェア)にOSのプロビジョニングができて便利ですが、仮想マシンホストの作成やそのホストを使った仮想マシン作成、仮想マシンへのSSHアクセスができて便利です。

簡単な方法で問題解決してホッとしました。