多数の計算ノード・演算ノードを連携させてジョブを実行する、いわゆる計算機環境・スパコン環境・HPC環境の運用現場を想像してみます。計算ノードはラックマウント型サーバの一種で、物理的に数百台の規模でラック内に設置されています。そのような計算ノードを大量に、任意の構成で工数をかけずに構築する「サーバプロビジョニング」は、運用には必須の技法のひとつです。また、サーバプロビジョニングの管理ツールとして、扱いやすいものが常に求められています。
最近の私は、それなりの台数の計算ノードのOS更新を行う業務において、「Warewulf」という老舗のサーバプロビジョニング管理ツールの、新バージョンを扱いました。このツールに関する日本語の情報がほとんど見当たらず、特に新バージョンのv4に関してはまだ皆無なので、簡単ですがWarewulf v4の紹介を行いたいと思います。
最初にWarewulfとは。Wikipediaにページがありましたので次にリンクします。ただし、過去のWarewulf v3をふまえて書かれている内容だと思われます。
そのWarewulf v3の本家サイトは次のURLです。v3はここ数年更新がされていない様子で、かつ、ドキュメント内にリンク切れもあるようです。
今回取り上げるのは、「The next generation of Warewulf.」と銘打っている次の「Warewulf v4」です。v3はPerlで書かれていましたが、v4はGoLangでリライトされています。
Warewulfは、DHCPサーバとTFTP/HTTPサーバと配信イメージを統合して設定・管理するツールと言うこともでき、計算ノードのPXE起動を司ります。計算ノードを起動するときのWarewulf v4の働きは、具体的には次のようになります。
Warewulf v4は完全に「diskless」前提の設計になっていて、計算ノードの物理メモリ空間の一部をストレージ領域として確保しています。そのため、計算ノード1台あたりの実装メモリの全てをOSが使えることはなく、数GBは差し引いて考えておく必要があります。また、PXE起動した計算ノードのOSからはローカルストレージがもちろん見えるので、マウントして読み書きすることは可能です。
余談ですが、過去のwarewulf3の利用時には、次の2つのモードを使い分けていました。この場合は起動にローカルストレージを使う前提でした。
Warewulf v4の特徴として挙げたい、実際に扱って「これは使い勝手が良い」と強く感じたポイントは、次のように各種のレイヤーに分けて配信イメージの構成が管理できるところです。
レイヤー | 内容 | 例 |
---|---|---|
Runtime Overlay | OS起動中に定期的に上書きされるファイル | /etc/hosts など (ノード個別) |
System Overlay | OS起動時に下位レイヤーに上書きされるファイル | ネットワーク設定や/etc/hostname など (ノード個別) |
Container | ソフトウェア構成に沿ったファイル | yum install で導入するパッケージなど (ノード共通) |
Kernel | kernelとkernel module |
配信イメージの構成がこのようにレイヤーで分離されていることにより、
といった、変更部分を最小範囲に留めた、逆に言えば共通部分を大きく持たせたイメージ管理ができます。
さらに、前述のように、Warewulf v4はdiskless前提なので、Warewulfサーバで変更した構成を計算ノードへ反映するには、計算ノードを1度再起動するだけですばやく済みます。各計算ノードのローカルストレージへのイメージ書き込みの面倒を見る必要がありません。この時間的・工数的なメリットは、大量の計算ノードを相手に作業しているときにはとても大きいです。
サーバプロビジョニングの管理ツールとして、私はWarewulf以外を扱った経験がありません。しかしながら、今回取り上げたWarewulf v4は近年のHPC環境に馴染むスグレモノであり、disklessでの起動が問題とならない環境ならば選択候補の一つになり得るかもと思います。さわりだけの非常に簡単な紹介でしたが、もし機会あればお試しください。そろそろ、Pre-release状態のv4.1.0がリリースされる頃かもしれません。
ちなみに、CentOSやRocky Linuxに関わっているGregory M. Kurtzer氏が、Warewulfの開発を率いています。