ぶていのログでぶログ

思い出したが吉日

MAAS3.1の新機能:デプロイ済みのマシンを管理下におく

この記事はLinux Advent Calendar 2021の11日目の記事です。 1つ前の記事は@EbiTTさん【Linux】cutコマンドのオプション別パフォーマンス対決でした。 GNUコマンドはオプションが多いので迷ったり知らないことがよくありますよね。 オプションを変えたことでなぜ高速化したかをソースを追って確認するのも面白そうですね。


Canonical社が提供しているソフトウェアにMAASというものがあります。 MAASはMetal As A Serviceの略称で*1、ベアメタルなサーバのセットアップから管理、JuJuやPuppet,Chefなどとのインテグレーションもできる素晴らしいソフトウェアです。 私が業務で携わっているシステムに導入すべく、最近検証を行っていました。 そんな中、12/6にMAAS3.1がリリースされました🎉 新機能の中で一番目を引くデプロイ済みのマシンを管理下におく方法を検証したので紹介します。

なぜこの機能が必要なのか

MAAS3.0まではデプロイ済みのマシン=インストール済みですでにシステムが稼働しているマシンは管理下におけませんでした。 なぜかというと、MAASで管理するにはCommisionという処理を行いHWの情報を収集する必要があり、その処理によりOSをクリーンインストールしてしまうため既存のシステムが壊れてしまうためです。 一応、MAAS上でMachineとしてではなくDeviceとして登録はできるのですが、IPアドレスやMACアドレスのみの管理となり、より詳細なCPU情報やメモリ情報などを管理することはできません。 実際のユースケースを考えると、私が業務で携わっているシステムのように、すでいくつかのサーバが稼働してあとからMAASを導入したいとなった場合、再インストールなどしてMAAS管理にするかMAAS導入後のサーバのみ管理下におくなど運用上の工夫が必要になり不便です。

しかしながら、今回の新機能を使うことでこの問題が解決するのです!

手順

具体的な手順は以下のブログで説明されています。

ubuntu.com

しかし、とても難しいことをしているわけではなく、MAASが提供するスクリプトを実行するだけです。 以下は実行例で、管理下におきたいサーバで実行します。 まず、サーバの登録、情報収集を行うためのスクリプトをダウンロードします。 このスクリプトはpython3製のようです。

$MAAS_ADDRESSはMAASサーバのIPアドレスを示す
$ wget http://${MAAS_ADDRESS}:5240/MAAS/maas-run-scripts
$ chmod +x maas-run-scripts

次にサーバの登録を行います。

$HOSTNAMEは管理対象のサーバのホスト名を示し、$MAAS_API_TOKENはMAAS APIのトークンを示す
$ ./maas-run-scripts register-machine --hostname $HOSTNAME http://${MAAS_ADDRESS}:5240/MAAS $MAAS_API_TOKEN

サーバの登録を行うと、WebUI上で--hostnameで指定したホスト名で追加されると思います。 サーバの登録が行われると、カレントディレクトリに ${HOSTNAME}-creds.yaml というファイルができていると思います。 ここには、サーバごとに振り出されるトークンとMAASサーバのAPIのURLが記載されています。

$ cat ${HOSTNAME}-creds.yaml
reporting:
  maas:
    consumer_key: ****
    endpoint: http://${MAAS_ADDRESS}:5240/MAAS/metadata/status/$SYSTEM_ID 👈 $SYSTEM_IDにはマシンごとに割り振られるIDが入ります
    token_key: ***
    token_secret: ***

マシンの登録が終わっても各HW情報はUnknownのままです。 そのため、以下のコマンドを実行し各情報をMAASに登録します。 出力は実行例です。

$ sudo ./maas-run-scripts report-results --config ${HOSTNAME}-creds.yaml
* Fetching scripts from http://***:5240/MAAS/metadata/2012-03-01/ to /tmp/tmp8mgzz9f9/scripts
* Running '40-maas-01-machine-resources'... success
* Running '50-maas-01-commissioning'... success
* Running 'maas-list-modaliases'... success
* Running 'maas-lshw'... success
* Running 'maas-serial-ports'... success
* Running 'maas-support-info'... success

これでMAAS上に登録が完了しました! なお、電源の状態がUnknownのままですが、これはPowerTypeを修正すれば正しく取得できるようになります。 特別な手順ではないので割愛します。

おわりに

MAAS3.1からデプロイ済みのマシンを管理下におくことができるようになりました。 これにより、あとからMAASを導入するというのも非常に楽になったと思います。 私がMAASを検証し始める前までは、MAAS管理サーバとそうでないサーバでの扱いをどうするか悩んでいたのですが、今回のバージョンアップによりこの問題が解決できてとても便利だと思いました。 この機会にぜひMAASの導入を検討してみてはいかがでしょうか。

*1:MAASで検索するとMobility As A Serviceがヒットしますがそれとは違います