みなさんこんにちは。 北部の高速ベアメタルプロビジョニング用の新しいユーティリティを公開します。
TL; DR
競合他社のxCAT / Warewulf / Rocks。 BitTorrentを使用してOCイメージを配布します。 サポートされるOS-RHELファミリー。 Debian / Ubuntu-仕事中。 現時点で最大のテスト:512ノードのHPCクラスターのコールドロードには4分かかります。 スイッチとポートのペアに基づく自動ノード名検出。
リンク: https : //github.com/dchirikov/luna
もう少し詳細
だから。 かつて、xCATを使用して別のクラスターをインストールし、bash上の無限のポストスクリプトにイライラするとき、独自のより良いものを作成したいという強い欲求がありました。
最初は古典的なペットプロジェクトでしたが、今では人気が出てきており、私の会社と私はすでに30から500ノードのクラスターを10個弱インストールしました。 最初のリリースは、それほど前にロールアウトした人々に見せることは恥ずかしくありません。そのため、Habréで披露する機会があります:)
他のシステムの経験があり、カスタマーエンジニアと話をして、キックスタートの代わりに画像とキャスト用のbittorrentの2つのキラー機能を選択しました。
最初の例では、たとえば、Bright、およびディスクレス方式のxCATを使用します。 スウェーデンの顧客の一人から急流のアイデアが投げかけられました。
彼女は彼女のシンプルさに素晴らしい。 HPCクラスターとは、まったく同じ構成の計算ノードが何百もある場合です。 つまり、システムのイメージは同じです。 そのため、各ノードがマスターサーバーからオペレーティングシステムのコピーを取得し、この貧弱なサーバーへのインターフェイスを切断する代わりに、ノードが既にダウンロードされたものを共有できるようにします。 各ノードの作業イメージはわずかに異なります:文字通り、ホスト名とIPアドレス。
したがって、このイメージをマスターノードで作成します。 これは基本的な方法で行われます-chroot環境の作成はかなり簡単な作業です。 その後、ツリー全体がtarballにパックされ、急流に詰められます。
秘密のソースは、initrdにあるdracutモジュールです。 彼はサーバーと通信する方法を知って(そして/ proc / cmdlineからそれを見つける方法を知っています)、自作の軽量トレントクライアントを持ち、簡単なコマンドを実行する方法も知っています。 文字通りcurl | bash
curl | bash
。 よくある質問:「トレントクライアントは常に動作しますか?」 回答:「いいえ、pivotrootの前の起動時のみ、lunaモジュールに関連するすべてのサービスが機能しなくなります。」
ノードをすばやくロードする必要があるのはなぜですか? まず、これは美しいです^ Wは、クラスターを運用する時間を短縮します。 かなり限られたインストール時間で、さまざまなパラメーターと構成を使用して多くのテストを実施する機会があります。 HPCはそれ自体のものです。 4つのノードでHPL(Linpack)を実行する場合、400で開始するという事実はまったくありません。2番目に、顧客は作業が必要な場合にのみノードを有効にできます。 また、ダウンロードするのに30分待つ必要はありません。ダウンロード時間は、スケジューラに設定されているタスクのサイズ(Slurmなど)に依存しません。 2つのノードまたは100を含めるのにこれ以上の違いはありません。
OSイメージを使用すると、クラスターを使用した実験中の痛みも軽減されます。chroot環境にインストールされているすべてのパッケージと構成はノード上にあります。 xCATが静かにパッケージのインストールを拒否した場合や、不明な理由で単純に落ちた場合、これ以上の驚きはありません。
さらに、ノードを構成し、それをイメージに「奪う」ことができます。 したがって、インストール中にRDMAデバイスを提供するために必要なドライバーまたは一部のエキゾチックなパッケージのインストールは非常に簡単です。
技術的な詳細
まだ興味がある場合は、技術的な詳細、ユーティリティ、アーキテクチャについて説明します。
luna
はメインの構成ユーティリティです。 彼女にはたくさんのサブオブジェクトがあります。 主なものを、おおよそクラスターを構成するために実行する必要がある順序で説明します。
luna cluster
-テキスト構成を拒否することにしたので、構成で表示されると予想されるすべてのものがここで構成されます:ポート範囲、ファイルを保存するディレクトリ、dhcpのネットワークなど。
luna network
の説明。 ネットワークはグループのインターフェイスに割り当てられ、グループはノードに割り当てられます。
luna osimage
オペレーティングシステムイメージ。 ディレクトリツリーへのパスを記述します。 ロードするバージョンとカーネルパラメーターが含まれます。 また、ノードを「レイキング」するための除外リストも保存します。
luna group
-ノードのグループの説明。 前にも言ったように、ノードには個性がほとんどないため、ここで主な構成が行われます。 インターフェースが作成され(em2など)、ネットワークが割り当てられ、ifcfg-em2ファイルに追加される追加パラメーターが書き込まれます。 BMC / IPMIパラメーターが割り当てられます。 スクリプトには、pre-、part-、post-の3つのタイプもあります。 これらは、インストールのさまざまな段階で実行される通常のbashスクリプトです。
最初のものはめったに使用されません。 理論的には、ノードを構成する前に実行する必要がある何かをここで説明できます。 これには、たとえば、BMCの再起動やBIOSのフラッシュなどがあります(ただし、これを行わないことを強くお勧めします!)。
part-script-パーティショニングから。 その目的は、ディスク(ある場合)を構成し、/ sysrootの下にマウントすることです。 ディスクがない場合は、tmpfsをマウントします。 すべてがマウントされた後、OSイメージがそこにロードおよびデプロイされます。
ポストスクリプト-fstabを登録し、grubなどをインストールします。 この段階で、chroot-runを実行して/ sysrootを実行し、dracut環境では不要になりますが、実際にはフル機能のOCで実行できます。
はい、dracutモジュールはネットワークインターフェイスとsshデーモンを起動するため、レスキュー環境として使用できることを忘れていました。 ほとんどのバイナリとユーティリティが利用可能です:awk、sed、partedなど。 さらに、ノードがイメージのロードを試行せず、ドラフトのままになっている場合のservice
モードがあります。
最後に言及したいオブジェクトはluna node
です。 ここでは、ノードの個々のパラメーターが設定されています:名前、IPアドレス、MACアドレス、スイッチ、およびノードが接続されているポート。
MACアドレスについては、さらに詳しく説明する価値があります。 実際、これはノードの中心的な識別子です。 しかし、1000ノードで6オクテットを手動で駆動するのは非常に悲しいことです。 したがって、他に2つの宛先モードがあります。 1つは、管理者がブート時にリストからノード名を選択できる場合です。 LunaはiPXEを使用しているため、かなり高度なメニューを作成できます。 2番目の方法は、スイッチとポートをノードに割り当てることです。 つまり、たとえば、最初のスイッチの最初のポートに接続されたノードにはnode001という名前が付けられ、そのMACアドレスがデータベースに書き込まれます。 ところで、MongoDBはベースとして使用されます。
luna
に加えて、さらにいくつかの実行可能ファイルがあります。
lwebは、タスク(bashスクリプト)とブートメニューを配布するWebサービスです。 ノードで実行するために送信されます。 lwebにはトレントトラッカーが含まれています。 すべてのトラフィックはクラスター内にローカライズされます-何も漏れません。
ltorrent-画像配信用のトレント「サーバー」。
lpower-ノードでの迅速な再起動/有効化/無効化のためのipmitoolのラッパー。 lunaデータベースからユーザー名とパスワードを取得します。
lchroot-chrootのラッパー。 chroot武器OSイメージですばやく「失敗」することができます。 さらに、それはuname -r
を偽装する方法を知っています:)
[root@master ~]
Uff ...おそらくそれだけです。 次に計画されていることを言うことができます。
- パフォーマンス。 現時点では、ベースでの作業は最も効率的な方法とはほど遠いです。 これはノードのロードには影響しませんが、CLIには影響します。 したがって、作業が必要です。
- 私の同僚は、Ubuntuサポートを使用したプルリクエストを準備しました。 おそらく追加します。
- インターフェイスを操作するロジックを変更します。 彼らは時々奇妙で迷惑です:)
- さらにテストを追加します。 このプロジェクトはすでに幼児期を迎えているため、ベストプラクティスを使用する必要があります。
- スイッチ間のBitTorrentトラフィックを制限することを考えています。 これまでのところ、すべてがそのように動作しますが、エクサスケールがいつ私たちに降りかかるかは誰が知っています:)
PSなぜルナ? それゆえ 。