VirtualBox上でMAASのKVMからLXDコンテナを作成・削除してみた

# VirtualBoxでMAASのKVMからLXDコンテナを作成・削除してみた

　MAAS 3.0のKVMでLXDコンテナがサポートされましたので、VirtualBoxを使ってLXDコンテナの作成・削除を確認しました。

## 試行環境
* MAAS 3.0.0
* VirtualBox 6.1.26
* Ubuntu 20.04.2 LTS Server (MAASをインストール)

## 要点
### 確認したこと
* MAASダッシュボード上からLXDコンテナの作成、起動、停止、削除できます。（VirtualBoxの操作が必要なのはVMを作って最初の電源を入れるまで）
* LXDコンテナはブリッジでマシンと同じサブネットに接続されます。（VMがすべて同じサブネットに接続するため、LXDのブリッジでLXDコンテナもすべて同じサブネットに接続）
* 手動でLXDコンテナのIPアドレスを固定できます。（LXDコンテナをサーバとして設定しやすい）
* ダッシュボードでTagsやKVMをキーにフィルタでリストを絞り込んで、LXDコンテナのみ表示可能です。また、ZONE SPACESに任意の値も設定できるため、ある程度の規模のコンテナは管理できると思います。

### MAASを使用してみて
* MAASはclout-initも利用できるが、ダッシュボード上で手作業でマシンを管理する。多くのマシンやコンテナを一括管理する必要があるならjujuなど他ツールも検討すべき。
* BIOSで起動デバイスに設定しているストレージはMAASが使用するため、(実機の場合)必要に応じてバックアップしておくこと。

## MAASサーバのインストール（本記事では省略）
* VirtualBoxのVMにubuntu 20.04 Serverをインストールして、MAASサービスを立ち上げます。
なお、MAASをインストールする作業手順は参考文献の下記項目を参照。

1. How to do a fresh snap install of MAAS 3.0
1. Initialise MAAS for a production configuration
1. How to check the status of MAAS services
1. How to configure MAAS
1. Configuration
1. How to enable DHCP

##### 参考資料
[How to install MAAS (snap/3.0/UI)](https://maas.io/docs/snap/3.0/ui/maas-installation)

* VirtualBoxでVMへポートフォワーディングを設定して、MAASのダッシュボードにwindowsのブラウザからアクセスします。

##### 参考資料
[VirtualBoxでGuestOSのアプリケーションに外部からアクセスする方法](https://qiita.com/daijinload/items/85f6e84926f41812ed70)

## MAASで管理するVMについて

### VirtualBoxでMAASが管理するVMを用意

VMの設定項目は下記参考文献を参照

##### 参考文献
[VirtualBox extensions for MAAS](https://ubuntu.com/blog/virtualbox-extensions-for-maas)

#### 表：LXDコンテナに関連する設定値
|項目|パラメータ|値|
|:----------:|:--------:|:--------:|
|システム|プロセッサ数|+ LXD数*1CPU以上推奨|
|システム|拡張機能|ネステッドVT-x/AMD-Vを有効化|
|システム|起動順序| ①ネットワーク, ②ハードディスク |
|システム|メモリ|+ LXD数*2GB以上推奨|
|ストレージ|容量|+ LXD数*8GB以上推奨|
|ネットワーク|割り当て|ホストオンリーアダプター|
|ネットワーク|プロミスキャスモード|すべて許可|

* システム：起動順序
![virtualbox-system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/d6a7b79a-3b7c-2965-50a0-1dc3f4be1ea8.png)

* ネットワーク
![virtualbox-net.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/181d637d-4b3e-2d19-7e7e-1b4dc93e57e9.png)

### MAASのマシン状態遷移について

MAASはマシンを認識し、マシンの状態を把握してからOSを提供します。
そのため、New, Ready, Deployedの状態を遷移します。
なお、commissionではOS提供とは別にOSをマシンで動かしてマシン情報を取得します。
<pre>
 マシン認識↓    ↑マシン開放
　　　 　[New]  ↑
 commission↓    ↑delete
　　　 　　[Ready]
　　 deploy↓    ↑release
　　　　  [Deplyed] ⇒ マシンをネットワーク起動して使用可能に
</pre>

## LXDコンテナ用のマシンを起動
　まず、LXDコンテナを作成するマシンをMAASで起動します。

### VirtualBoxのVMをMAASに登録

* VirtualBoxのVMを起動してMAASに登録します。
![maas-01-new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/243f7fbf-4409-34a4-4055-25e7f312dcad.png)

### New状態のマシンにホスト名と電源タイプを設定

* ホスト名を設定
![maas-02-rename.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/45a68209-25b6-f6d8-f52b-3739eae16777.png)

* 電源をManualに設定
![maas-03-power-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/5717cfb9-3a8d-f371-0a34-88b0ab659c1b.png)

### マシンをcommissionしてReady状態に遷移

* デフォルトでよければ、設定画面を開かずに直接commissionを実行
![maas-06-comission-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/c1c1d40a-9fb6-943f-7012-a01d1aa02cda.png)

* カスタマイズする場合、右上のTake actionからcommissonを選択してcommission用の設定画面へ
![maas-06-comission-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/34362c8d-7010-d47b-89c1-d0b0d0cbe8aa.png)

* commission用に設定したネットワークをdeployに引き継ぐ場合は、Retain network configurationにチェック
![maas-06-comission-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/2dd92d15-a5ca-e044-6ebe-24cebe359aef.png)

### マシンをdeployしてDeployed（マシンのネットワーク起動）状態に遷移

* LXDホストを使用するため、右上のTake actionから設定画面へ
![maas-07-deploy-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/6f7f8052-113a-730c-b995-6c674ef798fd.png)

* Register as MAAS KVM hostをチェックしてdeploy
なお、提供するカーネルもここで選択します。
![maas-07-deploy-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/d789f47a-409b-ef1d-215f-4bf46a1adf40.png)

* （参考）KVMを使用しないなどデフォルト設定でよければ、設定画面を開かず直接deploy
![maas-07-deploy-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/b3211910-dee9-52fe-e50a-2ea955c81f4e.png)

#### deployしたマシンのIPアドレスを確認
IPアドレス設定の３つの選択肢(Auto assign, DHCP, Static assin) は期待した動作です。
なお、"PXE"ではなく"+2"はLXDコンテナ用のサブネットが追加されてネットワークが２つあるためです。

* test-autoはMAASが自動設定したアドレス(DHCP提供アドレス範囲の外）
* test-ldapはdhcpが設定したアドレス
* test-manualはReadyで手動設定したアドレス
![maas-07-deploy-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/3a4e6f16-5136-e55f-cf62-3304b993ff05.png)

## LXDコンテナを操作

### LXDコンテナを作成
KVMメニューからLXDコンテナを登録して起動します。
電源のタイプがLXDでありMAASから電源をON/off可能な点以外は、（当然ですが）マシンと操作内容はほぼ変わりません。

* Compose VMでLXDコンテナを構成
![maas-09-kvm-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/6b2cc44b-2647-e8c4-b275-65b20b26df0d.png)

* hostnameなどを設定してLXDコンテナをcommission
VMでネステッドVT-x/AMD-Vを有効化し忘れると、Compose machineでエラーします。
![maas-09-kvm-4-compose.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/39d213e6-d781-03f1-d192-009d99493c9d.png)

* LXDコンテナのcommissionが完了してReadyに状態遷移
![maas-09-kvm-5-compose-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/445aa630-5b48-de5b-179d-c6c687811cf2.png)

* LXDコンテナをdeployし、deployed（LXDコンテナのOSを起動）に状態遷移
KVM(LXDコンテナ)などをネストせずデフォルト設定でよければ、直接deployしてもよいです。
![maas-09-kvm-7-deproy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/26fdbde5-fe1b-4fbb-33d2-8d74ef447e15.png)

* KVM(LXDコンテナ)を使用する場合は右上のTask actionからdeployを選択して設定画面に遷移
Register as MAAS KVM hostをチェックしてLXDコンテナをネストできます。
![maas-09-kvm-8-deproy-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/9897b031-15fa-e5f4-4a25-7cdb291ff678.png)

* 起動したLXDコンテナを含むマシンの状態を確認
LXDコンテナはdeployすると自動でPOWERがONになります。

 + マシン：
パッと見てPOWERとOWNER TASK以外はLXDコンテナとマシンを区別できません。ホスト名をわかりやすくしたり、ソートできるようにZONE SPACESを設定した方がいいと思います。
![maas-09-kvm-8-deproy-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/4c9d5735-3202-ff24-eba6-2cef8072adfd.png)

 + KVM：
ホストのマシン(test-manual)はLXDコンテナ(manual-lxd1)の分が割り当て済みです。
![maas-09-kvm-8-deproy-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/7a95cc12-537a-a1ad-22da-31566e2a44a0.png)

 + Subnet：
使用しているIPアドレスを確認できます。
![maas-09-kvm-8-deproy-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/fcf3f35a-937a-f66a-e05d-95c34a0d2abb.png)
 * LXDコンテナのIPアドレスは手動で固定
![maas-09-kvm-8-deproy-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/aed96d5e-8f16-b953-31ef-fce4b9497e2b.png)

### LXDコンテナにログイン
LXDコンテナはVirualBoxのホストオンリーアダプターのサブネットに接続されており、LXDホストと同様にログインできます。

* TeraTerm(VirtualBoxのwindows)からログイン
![teraterm_login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/a4b03c3c-8b82-2443-cb4b-d0a0a219e784.png)
![teraterm_login-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/58532ffc-346b-db46-7bed-4ad1b2e8ce96.png)

#### 参考資料
[VirtualBox の仮想マシンに Tera Term で SSH 接続する手順 (ポートフォワーディング)](https://qiita.com/ryo-sato/items/0a1df8666cef9f944693)

* SSHからログイン
![VirtualBox_us2004maas4_17_09_2021_07_42_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/0a05de30-47e1-f7ed-692f-96adc9f4aa29.png)

## LXDコンテナを構成するマシンを削除
KVMを使用するマシンをreleaseするためには、先にKVMホスト機能を解除する必要があります。

### マシンからKVM機能を解除
settingsメニューからRemove KVMでKVMホスト機能を解除
![maas-09-kvm-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/074b8fb0-317f-88ad-7d0b-3018d0eb41d7.png)
![maas-09-kvm-3-remove.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2014039/eafe2c17-a076-7601-6ac5-d90c0f3b8847.png)

## 参考資料
[0から始めるUbuntu18.04+MAAS2.4環境作成](https://qiita.com/tsukasa1301/items/1c901a80172f58f463cd)
[おうちMAAS(Metal as a Service)導入メモ](https://qiita.com/ussvgr/items/ddcf8a823819bbf4bff8)