演習 - Azure CycleCloud で使用するための cloud-init スクリプトを作成する

完了

クラスターのノードをプロビジョニングするとき、スケジューラによる変更が有効になる前の、オペレーティング システムのブート プロセスの間に、カスタム構成タスクを実行したい場合があります。 そのようなタスクとしては、たとえば、パス環境変数の更新、ドメイン ネーム システム (DNS) の名前解決の設定の構成、Microsoft Entra Domain Services (AD DS) ドメインへのノードのバインドなどがあります。

この機能を実装するため、あなたは、Azure CycleCloud クラスターでの cloud-init の使用方法を調査し、各ノードのローカル ファイルの内容を変更する簡単な Bash スクリプトでテストすることにしました。 クラスター ノードに接続し、変更されたファイルの内容を確認することで、結果を検証するつもりです。

注意

cloud-init スクリプトを作成するときは、ターゲット ノードで実行されているオペレーティング システムが認識して処理できる任意のスクリプト作成または構成方法 (従来のシェル スクリプト、Python、YAML など) を使用できます。

この演習では、次のタスクを行います。

  • タスク 1: Azure CycleCloud クラスター ノードに対して SSH ベースの認証を構成する
  • タスク 2: cloud-init スクリプトをクラスター ノードに追加する
  • タスク 3: スケジューラ ノードで cloud-init の機能を確認する
  • タスク 4: 計算ノードで cloud-init の機能を確認する
  • タスク 5:演習環境をクリーンアップする

Note

この演習を開始する前に、前の演習が正しく完了していることを確認します。

タスク 1: Azure CycleCloud クラスター ノードに対して SSH ベースの認証を構成する

cloud-init スクリプトの実行を検証するため、Azure Cloud Shell から Azure CycleCloud CLI を使用してクラスター ノードに接続します。 この接続は SSH キー ベースの認証に依存しているため、クラスターノードに配布される公開キーに対応する秘密キーを、Azure Cloud Shell のホーム ディレクトリにアップロードする必要があります。

  1. Azure portal に移動し、プロンプトが表示されたら、このモジュールで使用する Azure サブスクリプションの共同作成者または所有者ロールを持つ Microsoft アカウントまたは Microsoft Entra アカウントで認証します。

  2. Azure portal で、ツール バーの検索ボックスの横にあるアイコンを選択して Cloud Shell を開き、Bash セッションを実行していることを確認します。

  3. Azure Cloud Shell ペインのツール バーで、逆方向を指す縦の矢印のペアが付いたページが表示されている 4 番目のアイコンを選びます。 次に、ドロップダウン メニューで [アップロード] を選択します。

  4. [開く] ダイアログ ボックスで、秘密キーが含まれる .pem ファイルの場所に移動して、[開く] を選択します。

  5. Cloud Shell で次のコマンドを実行して、アップロードされた .pem ファイルを正しい場所に移動し、必要なファイルレベルのアクセス許可を構成します (<private_key.pem> のプレースホルダーを .pem ファイルの名前に置き換えます)。

    mkdir -p ~/.ssh
    mv private_key.pem ~/.ssh
    chmod 600 ~/.ssh/cc-ssh-keys.pem
    

タスク 2: cloud-init スクリプトをクラスター ノードに追加する

クラスター ノードにスクリプトを追加するオプションは、Azure CycleCloud のグラフィカル インターフェイスから直接使用できます。 それを使用して、同じ cloud-init スクリプトをスケジューラ ノードと計算ノードに割り当て、その機能を確認します。 このスクリプトでは、10.10.10.10 cc.contoso.com というエントリが /etc/hosts ファイルに追加されます。

  1. Azure CycleCloud Web アプリケーションにまだ接続していない場合は、別のブラウザー ウィンドウを開き、https://<IP アドレス> という URL に移動します。 メッセージが表示されたら、続行を確認します。

  2. 認証を求めるメッセージが表示されたら、管理者ロールを持つお使いの Azure CycleCloud アプリケーション ユーザー アカウントの資格情報を入力してサインインします。

  3. Azure CycleCloud のグラフィカル インターフェイスで [クラスター] ページに移動します。 クラスターの一覧で、contoso-custom-slurm-lab-cluster エントリを選び、[編集] を選びます。

  4. [contoso-custom-slurm-lab-cluster の編集] ポップアップ ウィンドウで [Cloud-init] エントリを選び、[cloud-init の構成] セクションの [スケジューラ] タブで、次のスクリプトを入力します。

    #!/bin/bash
    echo "10.10.10.10 www.contoso.com" >> /etc/hosts
    

    Screenshot of the Cloud-init tab of the Edit contoso-custom-slurm-lab-cluster pop-up window in the Azure CycleCloud web application.

  5. 同じポップアップ ウィンドウで [Cloud-init] エントリを選び、残りの各タブ ([cuda][hpc][htc]) を選んで、同じスクリプトを入力します。 [保存] を選択します。

タスク 3: スケジューラ ノードで cloud-init の機能を確認する

スケジューラ ノードで cloud-init の機能を確認するには、クラスターを起動します。 これにより、スケジューラ ノードのプロビジョニングがトリガーされます。 ノードが実行されたら、Azure Cloud Shell から接続し、/etc/hosts ファイルに 10.10.10.10 www.contoso.com というエントリが含まれていることを確認できます。

  1. Azure CycleCloud Web アプリケーションを表示しているブラウザー ウィンドウで、contoso-custom-slurm-lab-cluster ページの [開始] リンクを選びます。 確認メッセージが表示されたら、[OK] を選択します。

    Note

    クラスターが既に実行されている場合は、クラスターを終了してから再起動し、更新された構成を適用する必要があります。そうしないと、後続の手順でその構成が表示されません。

  2. ノードの一覧で [スケジューラ] エントリを選び、[詳細] ペインで状態を監視して、"取得中" から "準備完了" に変わるまで待ちます。

    注意

    これには 3 分ほどかかる場合があります。

  3. [詳細] ペインで [接続] を選びます。 [Connect to node: scheduler](ノードへの接続: スケジューラ) ポップアップ ウィンドウの [Using the CycleCloud CLI](CycleCloud CLI の使用) セクションで、スケジューラ ノードに接続できるコマンドが含まれるエントリを選択して、[Close](閉じる) を選択します。

    Screenshot of the Connect to node: scheduler pop-up window in the Azure CycleCloud web application.

    Note

    コマンドは cyclecloud connect scheduler -c contoso-custom-slurm-lab-cluster という形式にする必要があります

  4. Cloud Shell ペインがある Web ブラウザー ウィンドウに切り替え、前の手順でコピーしたコマンドを実行します。

    Note

    このコマンドにより、次の形式の出力が生成される必要があります。

    m@Azure:~$ cyclecloud connect scheduler -c contoso-custom-slurm-lab-cluster
    Connecting to cc-admin@40.87.52.25 (contoso-custom-slurm-lab-cluster scheduler) using SSH
    [cc-admin@ip-0A000304 ~]$
    
  5. スケジューラ ノードに接続している場合は、次のコマンドを実行して、/etc/hosts ファイルに 10.10.10.10 www.contoso.com というエントリが含まれることを確認します。

    grep "10.10.10.10 www.contoso.com" /etc/hosts
    

    注意

    このコマンドにより、次の形式の出力が生成される必要があります。

    [cc-admin@ip-0A000304 ~]$ grep "10.10.10.10 www.contoso.com" /etc/hosts
    10.10.10.10 www.contoso.com
    

タスク 4: 計算ノードで cloud-init の機能を確認する

次に、同じ手順を繰り返し、計算ノードで cloud-init の機能を確認します。

重要

計算ノードで同じ手順を適用して cloud-init の機能を確認する前に、対応する仮想マシン スケール セットを削除して再度割り当てる必要があります。 このステップは、Slurm ベースのクラスターに固有です。この場合のスケジューラの自動スケーリング統合では、Azure CycleCloud によって計算ノードが事前に設定されている必要があります。 その結果、この演習で前に適用した cloud-init の構成は、まだ既存のノードに反映されていません。

  1. スケジューラ ノードに接続している状態で、Cloud Shell で次のコマンドを実行し、Azure CycleCloud クラスター内のコンピューティング ノードを削除して再割り当てし、スケジューラ ノードへの接続を終了します。

    sudo -i
    cd /opt/cycle/jetpack/system/bootstrap/slurm
    ./cyclecloud_slurm.sh remove_nodes
    ./cyclecloud_slurm.sh scale
    exit
    exit
    

    Note

    次のノードを削除しようとしているというメッセージが表示された後、このステップが完了すると、クラスターの再スケーリングが完了したというメッセージが表示されます。

  2. お使いのコンピューターで、Azure CycleCloud Web アプリケーションの contoso-custom-slurm-lab-cluster ページが表示されている Web ブラウザー ウィンドウに切り替えます。 [ノード] タブで htc の行を選び、[詳細] ペインで htc-1 エントリを選び、[アクション] タブ ヘッダーを選びます。 ドロップダウン メニューで [開始] を選び、確認メッセージが表示されたら [OK] を選びます。

    Screenshot of the Actions menu on the contoso-custom-slurm-lab-cluster page in the Azure CycleCloud web application.

  3. [詳細] ペインで新しく起動されたノードを監視し、状態が "取得中" から "準備完了" に変わるまで待ちます。

    注意

    これには 3 分ほどかかる場合があります。

  4. [詳細] ペインで [接続] を選びます。 [ノードへの接続: htc-1] ポップアップ ウィンドウの [CycleCloud CLI の使用] セクションで、スケジューラ ノードに接続できるコマンドが含まれるエントリを選び、[閉じる] を選びます。

    Screenshot of the Connect to node: htc-1 pop-up window in the Azure CycleCloud web application.

    Note

    コマンドは cyclecloud connect htc-1 -c contoso-custom-slurm-lab-cluster という形式にする必要があります。

  5. [Cloud Shell] ペインに切り替え、前の手順でコピーしたコマンドを実行します。

    Note

    このコマンドにより、次の形式の出力が生成される必要があります。

    m@Azure:~$ cyclecloud connect htc-1 -c contoso-custom-slurm-lab-cluster
    Connecting to cc-admin@10.0.3.5 (contoso-custom-slurm-lab-cluster htc-1) through SSH bastion at cc-admin@40.87.52.25
    [cc-admin@ip-0A000305 ~]$
    
  6. htc-1 ノードに接続している場合は、次のコマンドを実行して、/etc/hosts ファイルに 10.10.10.10 www.contoso.com というエントリが含まれることを確認します。

    cat /etc/hosts | grep "10.10.10.10 www.contoso.com"
    

    Note

    ここまで済んだら、このモジュールのこの演習と前の演習でデプロイしたリソースをすべて削除する必要があります。 これにより、Azure サブスクリプションに対するこれらのリソースの維持に関連する料金を回避できます。

タスク 5: ラボ環境をクリーンアップする

Azure CycleCloud アプリケーションを使用したクラスターのテストは完了しました。 Azure リソースの使用に関連付けられる不要なコストがかからないようにするために、ここでクラスターを終了し、このモジュールの演習全体でプロビジョニングしたリソースをすべて削除します。

  1. Azure CycleCloud Web アプリケーションのグラフィカル インターフェイスを表示している Web ブラウザーで、contoso-custom-slurm-lab-cluster ページの [終了] リンクを選び、確認するように求められたら、[OK] を選びます。

  2. 終了プロセスを監視します。

    注意

    このプロセスには、クラスターのヘッド ノードの役割を果たす Azure VM のプロビジョニング解除が含まれます。 これには 5 分ほどかかる場合があります。

    注意

    このラボでプロビジョニングした他のすべてのリソースを削除するには、クラスターのリソースがホストされているリソース グループを削除します。

  3. Azure portal で、クラスター リソースがホストされているリソース グループのブレードに移動し、ツール バーの [リソース グループの削除] エントリを選択します。 [削除を確認するために、リソース グループ名を入力してください] テキスト ボックスにリソース グループの名前を入力し、[削除] を選びます。 [削除] をもう一度選び、削除を確定します。

    Note

    場合によっては、Slurm リソースに関連付けられている追加のリソース グループがあります。 追加料金を回避するには、これらの Slurm 関連のリソース グループとそのリソースをすべて削除してください。

お疲れさまでした。 このモジュールの 3 番目と最後の演習が問題なく完了しました。 この演習では、Azure CycleCloud クラスターでの cloud-init の使用を調べて、各ノード上のローカル ファイルの内容を変更する簡単な Bash スクリプトでそれをテストしました。 クラスター ノードに接続し、変更されたファイルの内容を確認することで、結果を検証しました。 その後、不要なコストがかからないようにするため、クラスターを終了し、このモジュールでしようしたすべてのクラスター リソースを削除しました。