前回までで一通りMAASを使うための準備が整ったので、実践的に使い始めることを検討する。MAASに限らず、カスタムノードセットアップについては、2つのアプローチがある。デフォルトのセットアップに対して必要な更新を行うか、カスタマイズされたインストールイメージそのものを用意してしまうか。出来上がるものが同じだとすれば、前者は構築手順が明確であることがメリット、後者は変更差分の多寡に関係なく高速にセットアップ出来ることがメリット。
今まで使ってきたCentOSのkickstartやUbuntuのpreseedではカスタムイメージを用意するのはやりづらかった。自動インストール後のPOST処理で、カスタムセットアップする形。一方のMAASにおいてはイメージ運用が非常にやりやすくなっているので、まずはカスタムイメージの準備からやってみる。昨今の潮流もいかに構成管理のコストを効率化して、本質的な部分に工数を割くかということが課題。大胆に構築手順のコード化を捨てることで、どれだけ運用が楽になるかを試してみたい。
ここからはさらっと書いていってみるけど、実はかなり試行錯誤した。というのも適切なドキュメントが見つからないんだよね。カスタムイメージ管理は商用版のメリットとして扱いたいような雰囲気もあるし。なので、公式に裏打ちされた正しいやり方というよりは自分なりに動かしてみて、最も運用として回りそうな方法という位置付け。MAASのカスタムイメージはsquashfsなので、このツールをインストールして公式のイメージをカスタマイズしていく。
sudo ssh maas-server
apt install -y squashfs-tools
cd /usr/local/src
wget http://images.maas.io/ephemeral-v3/daily/bionic/amd64/20190207/squashfs
unsquashfs squashfs
mount --bind /run/systemd squashfs-root/run/systemd
chroot squashfs-root
URLの日付の部分は日々刻々と更新されていくので、最新のイメージがいつのものかしっかり確認した方がよい。chrootして中に入った後は、コンテナ感覚で操作してもらえればよい。必要なパッケージのインストール、ユーザー作成、ssh周りの設定、ldap関連の設定など。コンテナあるあるな問題としてhostnamectlやらlocalectlやらtimedatectlが以下のエラーで動作しない。イメージの構築でhostnamectlを使うことはないだろうけど。
localectl
:
Failed to create bus connection: No such file or directory
これらはcloud-initで設定できるので、そちらに任せてもいいんだけど、どうしてもイメージ上で設定しておきたいのであれば、以下のように変更しておく。Ubuntuのみで確認。
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
echo LANG=ja_JP.UTF-8 > /etc/default/locale
カスタマイズ作業が終わったら、resolv.confや.bash_historyの後片付けをして、tarしてMAASに登録する。MAASに登録する際は名前を custom/xxxx とすることで、Deploy時にcustomの中から選択できるようになる。
rm -f ~/.bash_history
exit
(ここでchrootから抜ける)
umount squashfs-root/run/systemd
tar cvzf root-tgz ./*
maas admin boot-resources create name=custom/myubuntu architecture=amd64/generic content@=root-tgz
以上で、MAASにてカスタマイズされたイメージをデプロイ出来る。実際これで運用してみたんだけど、公式イメージの更新が結構早いため、意外と乖離が進む。昔ながらのバージョンFIX運用なら気にしないでもいいんだけど、最近はセキュリティ関連の更新も多いから、どうせなら最新使いたいという欲求もある。大量のサーバがあるならカスタムイメージ運用でもいいんだけど、自宅のように小さな環境だったら最新イメージ+cloud-initの方がいいかもと思い始めました。