はじめに
自宅の環境の管理のためにCANONICAL社のMAASを導入してみた時のメモです。
自宅で使う範囲なのでごく小規模での利用を前提とし、極力既存NWに手を入れずお手軽な導入を目指します。
導入に当たってはUbuntu公式BlogのMAAS for the homeの記事を大いに参考にさせていただきました。
MAASとは?
Ubuntuで有名なCANONICAL社が提供している、物理サーバの管理・デプロイ用ツールです。
(KVMなどの仮想マシンの管理もできるので、ちょっと語弊がありますが)
最近MaaSというと「Mobility as a Service」の方がメジャーかと思うので、ググラビリティが低いのが難点。
環境
MAASのインストール環境は以下のとおり。
・Raspberry pi 4B(メモリ8GBモデル) + USB SSD(60GB)
・Ubuntu 20.04 arm64
・MAAS 2.9
また、ネットワーク環境は以下のようになっています。
・192.168.24.0/24 の単一のサブネットのみを使用。
・ルーターとしてOpenWRTを使用しており、 DHCP・DNSの機能を持っている。MAAS導入後もDNS・DHCPはOpenWRTで管理する。
・サーバー機は全てDHCPでIPアドレスを固定化している。
MAASセットアップ
LXD環境準備
今回はLXDでMAASをコンテナとして構築します。
参考: 公式ドキュメントのInstall with LXD
LXDのストレージプールとしてZFSを利用します。
USB接続のSSDを既に別用途でZFSとして利用していたので、ここにLXD用のZFSを新たに作成しました。
# 既に「tank」というZPoolと「tank/opt」というZFSが存在している
$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 59.5G 109M 59.4G - - 0% 0% 1.00x ONLINE -
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 109M 57.5G 24K none
tank/opt 108M 57.5G 108M /opt
# LXDのストレージプール用にZFSを作成
$ sudo zfs create -o atime=off -o mountpoint=none tank/lxd
# 「tank/lxd」が追加された
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 109M 57.5G 24K none
tank/lxd 24K 57.5G 24K none
tank/opt 108M 57.5G 108M /opt
次にネットワークブリッジの作成。
「/etc/netplan/60-lxd-bridge.yaml」として以下のファイルを作成し、
network:
bridges:
br0:
dhcp4: true
interfaces:
- eth0
macaddress: <実機のMacアドレス>
parameters:
stp: false
ethernets:
eth0:
dhcp4: false
dhcp6: false
version: 2
以下コマンドで反映させます。
$ sudo netplan apply
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
link/ether dc:a6:32:bb:8e:d5 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether dc:a6:32:bb:8e:d6 brd ff:ff:ff:ff:ff:ff
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether dc:a6:32:bb:8e:d5 brd ff:ff:ff:ff:ff:ff
inet 192.168.24.6/24 brd 192.168.24.255 scope global dynamic br0
valid_lft 43199sec preferred_lft 43199sec
inet6 fe80::dea6:32ff:febb:8ed5/64 scope link tentative
valid_lft forever preferred_lft forever
ストレージプールとブリッジの準備ができたらLXDの設定を行います。
$ 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]: no #新規ZPool作成はしない
Name of the existing ZFS pool or dataset: tank/lxd #先ほど作成したZFSを指定
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]: yes #既存のブリッジを指定する
Name of the existing bridge or host interface: br0 #先ほど作成したブリッジを指定
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]:
設定が完了したら、MAAS用のコンテナを作成します。
$ lxc launch ubuntu:20.04 maas
Creating maas
Starting maas
$ lxc list
+------+---------+-----------------------+------------------------------------------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+-----------------------+------------------------------------------+-----------+-----------+
| maas | RUNNING | 192.168.24.206 (eth0) | 240f:76:8641:1:216:3eff:fe91:cf7b (eth0) | CONTAINER | 0 |
+------+---------+-----------------------+------------------------------------------+-----------+-----------+
以下のコマンドでコンテナのbashを起動します。
$ lxc exec maas bash
root@maas:~#
以降のMAASインストール作業は、このコンテナ上のbashで実施します。
MAASインストール
概ね公式ドキュメントの手順に沿って進めます。
個人的な好みで、Snapではなくdebパッケージでインストールします。
というわけで、まずは使わないSnapを削除。
参考:Disabling Snaps in Ubuntu 20.10 (and 20.04 LTS)
root@maas:~# snap list
Name Version Rev Tracking Publisher Notes
core18 20201210 1949 latest/stable canonical✓ base
lxd 4.0.5 19206 4.0/stable/… canonical✓ -
snapd 2.48.2 10709 latest/stable canonical✓ snapd
root@maas:~# sudo snap remove lxd
lxd removed
root@maas:~# sudo snap remove core18
core18 removed
root@maas:~# sudo snap remove snapd
snapd removed
root@maas:~# sudo apt purge snapd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
squashfs-tools
Use 'sudo apt autoremove' to remove it.
The following packages will be REMOVED:
snapd*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n]
(Reading database ... 31405 files and directories currently installed.)
Purging configuration files for snapd (2.48+20.04) ...
Final directory cleanup
Discarding preserved snap namespaces
Unmount /snap inside a container
umount: /snap: no mount point specified.
Removing extra snap-confine apparmor rules
Removing snapd cache
Removing snapd state
root@maas:~# rm -rf ~/snap
MAASのリポジトリを追加しインストール。
root@maas:~# add-apt-repository ppa:maas/2.9
root@maas:~# apt install maas
インストールが完了したら、管理者ユーザーを作成します。
ユーザー作成時に、LaunchPadかGithubからSSH公開鍵のインポートができます。
LaunchPadの場合は「lp:<ユーザー名>」、Githubの場合は「gh:<ユーザー名>」を入力します。
SSH公開鍵は後で設定可能なので、省略しても構いません。
root@maas:~# sudo maas createadmin --username=admin --email=admin@example.com
Password:
Again:
Import SSH keys [] (lp:user-id or gh:user-id): gh:ussvgr
ユーザーの作成が終わったら、ブラウザで「http://:5240/MAAS/」を開いてみましょう。
MAAS初期設定
作成した管理者ユーザーでログインすると初期設定画面に遷移します。
ネットワーク周りで特別な事情がなければデフォルトでいいでしょう。
管理対象の機器で使用するためのOSイメージを選択し、「Update selection」ボタンを押下します。
今回ダウンロードするイメージは20.04、amd64のみにしておきました。
設定が終わったら下部の「Continue」ボタンを押下します。
SSH公開鍵の設定画面に遷移します。管理者ユーザー作成時に公開鍵を設定してない場合はここで設定します。
完了したら「Go to dashboard」をクリックします。
上部「Settings」から「Network」 -> 「Proxy」と進み、「Don't use a proxy」を選択し保存しておきました。管理下のサーバでのパッケージインストールなどにProxyを使うオプションのようですが、私の環境では不要なので。
あとはイメージのダウンロードが終わるのを待ちましょう。
(上部のImagesから進捗が確認できます)
DHCP設定(OpenWRT)
MAASは管理対象の機器のセットアップにPXEを利用します。
通常の構成ではMAAS内のDHCPサーバを利用することになるのですが、今回は上にも書いたように既存のOpenWRTのDHCPを利用するのでそれに合わせて設定します。
OpenWRTの設定画面から Network -> DHCP and DNS -> TFTP Settings を以下のように設定します。
OpenWRT自体がTFTP Serverになるわけではないのですが、「Network boot image」欄を設定するために「Enable TFTP Server」にチェックを付けています。
「Network boot image」欄は参考にした記事では『pxelinux.0』としていましたが、UEFIを利用する場合は上記のとおり『bootx64.efi』を指定します。
管理対象サーバの設定
今回はASRockのB85M Pro4というちょっと古めのマザーボードで作成した自作PCを管理対象サーバとして使用します。
BIOS設定画面のBootメニューにて以下のように設定します。
(他の機種でも同様の項目を設定すれば問題ないかと思います)
- CSM(Compatibility Support Module): Disabled
- Boot From Onboard LAN: Enabled
- 起動順: UEFI IP4 を先頭にする
物理サーバへのOSデプロイ
マシンの登録とCommissioning
上記の設定を終え、MAASでのOSイメージダウンロードも完了していれば、OSデプロイができる状態になります。
管理対象サーバの電源を入れると、PXEでMAASサーバからイメージをダウンロードし起動します。
暫くすると自動で電源がシャットダウンされますが、それが正常な動作です。
MAASのメニューから「Machines」を選ぶと、以下のようにサーバが登録されています。(名前はMAASが勝手に付けた名前になっています)
サーバ名をクリックし、メニューから「Configuration」を選択、「Power type」にて『Manual』を選択し保存します。
IPMIなどの管理機能を持ったマシンの場合は適した物を選択しましょう。
次に右上の「Take action」から「Commission」を選択、「Commissioning machine」をクリックします。
管理対象サーバの電源を入れるとPXEで起動し、Commissioning用のスクリプトが実行された後、自動でシャットダウンされます。
Commisioningが完了すると、サーバのStatus欄が『Ready』に変更されます。これでOSをデプロイする準備が整いました。
OSのデプロイ
デプロイ前にMAAS上でいくつか設定をしておきます。
上部の名前欄をクリックするとホスト名が変更できます。
NetworkタブでNICの設定を開き、IPアドレスの設定をします。
私の環境ではOpenWRTのDHCPで固定IPの払い出しをしているので「IP mode」を『DHCP』に変更しました。
また、Networkタブではブリッジの作成などもできます。
Storageタブではパーティションの設定などができます。
設定が終わったら右上の「Take action」から「Deploy」を選択し、「Deploy machine」をクリックします。
サーバのStatus欄が「Deploying」に変わったら再度サーバの電源を投入、OSのインストールが自動で始まります。
何度かの再起動を経て、デプロイが完了するとStatusが「Deployed」に変わり、ユーザー名:ubuntu、設定したSSHキーでログインできるようになります。
おわりに
まだ使い始めたばかりですが、物理サーバのOSインストールを何度もやるときには便利そう、という感じです。
PackerでMAAS用イメージを作るなんてこともできそうなので、これからいろいろ触ってみよう。