Technology

GPUクラスタのOS更新をジョブに合わせて進める管理ソフト「NodeWright」

この記事のポイント

  1. 実現したこと

    管理ソフトNodeWrightは、KubernetesノードのホストOSへの変更を複数のノードへ宣言的に適用できる。

  2. 実現の仕組み

    オペレーターが対象ノードの新規配置を止め、中断不可のPodを待ってから残りを退避させる。

  3. 得られた結果

    パッケージの確認スクリプトで変更後の状態を検査し、失敗した場合は展開を停止する。

  4. 従来との違い

    旧称Skyhookのリソースを、ノードごとの状態とともにNodeWrightへ取り込めるようになった。

稼働中のジョブを考慮し、KubernetesクラスタのノードごとにOS変更と確認を進めるNodeWrightの模式図
AI生成画像

GPUクラスタのノードOSを変更する際、稼働中のジョブを考慮して適用順序を制御する管理ソフト「NodeWright」が公開された。Kubernetesのリソースで変更を指定すると、オペレーターが対象ノードのワークロードを確認しながら処理を進める。

ホストOSの変更をKubernetesのリソースで指定

NVIDIAが公開したNodeWrightは、KubernetesノードのホストOSを変更・維持するオープンソースのパッケージ管理ソフトだ。変更内容はKubernetesのカスタムリソースとして宣言し、ノードのラベルで適用先を選べる。

NodeWrightのオペレーターは、そのカスタムリソースを監視して変更の進行を管理する。これにより、指定したノード群へのホスト設定変更をクラスタ内の制御手順として扱う。

ジョブの状態を確認してノードを退避

対象ノードでは、オペレーターがまず新たなワークロードの配置を止める。中断不可とラベルで指定されたPodがあれば手順を待機させ、そのPodが終了するまで変更を進めない。

残りのPodを退避させる際は、既定でPodDisruptionBudgetを尊重する。変更が完了するとノードへのワークロード配置を再開するため、OSへの変更はクラスタの中断条件に沿って進む。

パッケージの適用結果で展開を止める

ノードに加える変更は、スクリプトや設定を収めたコンテナイメージ形式のパッケージが担う。ホストへの処理を実行した後、そのパッケージに含めた確認スクリプトで期待する状態になったかを検査できる。

確認が失敗した場合、NodeWrightは展開を停止する。変更を実行する手順に結果の検査を組み込むことで、失敗した状態のまま次の対象へ進むのを防ぐ。

ノードごとの版管理と旧リソースの引き継ぎ

NodeWrightは各ノードのパッケージ状態とセマンティックバージョンを追跡し、新規導入、更新、旧版への変更を区別する。パッケージ間に依存関係があれば、その指定に基づいて実行順序を決める。

この管理ソフトはSkyhookからNodeWrightへ改称された。従来のSkyhookリソースはノードごとの状態を保ったまま取り込まれ、取り込みを理由にパッケージが再実行されることはない。