演習 - 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: 演習環境をクリーンアップする

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

タスク 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_address> URL に移動します。 メッセージが表示されたら、続行を確認します。

  2. 認証を求められた場合は、管理者ロールを使用して Azure CycleCloud アプリケーション ユーザー アカウントの資格情報を指定してサインインします。

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

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

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

    Azure CycleCloud Web アプリケーションの「Edit contoso-custom-slurm-lab-cluster ポップアップウィンドウ」の「Cloud-init」タブのスクリーンショット。

  5. 同じポップアップ ウィンドウ で、Cloud-init エントリが選択されている状態で、残りの各タブ ( cudahpcおよび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] を選択します

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

  2. ノードの一覧で Scheduler エントリを選択し、[ 詳細 ] ウィンドウでその状態を監視し、 取得 から 準備完了に変わるまで待機します。

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

  3. [ 詳細 ] ウィンドウで、[ 接続] を選択します。 [ ノードへの接続: スケジューラ ] ポップアップ ウィンドウの [CycleCloud CLI の使用 ] セクションで、スケジューラ ノードに接続できるコマンドを含むエントリを選択し、[ 閉じる] を選択します。

    Azure CycleCloud Web アプリケーションの [ノードへの接続: スケジューラ] ポップアップ ウィンドウのスクリーンショット。

    コマンドの形式は次のようになります。 cyclecloud connect scheduler -c contoso-custom-slurm-lab-cluster

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

    このコマンドは、次の形式で出力を生成する必要があります。

    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
    

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

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

    Azure CycleCloud Web アプリケーションの contoso-custom-slurm-lab-cluster ページの [アクション] メニューのスクリーンショット。

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

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

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

    Azure CycleCloud Web アプリケーションの [ノードへの接続:htc-1] ポップアップ ウィンドウのスクリーンショット。

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

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

    このコマンドは、次の形式で出力を生成する必要があります。

    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"
    

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

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

Azure CycleCloud アプリケーションを使用したクラスターのカスタマイズのテストが完了しました。 Azure リソースの使用に関連する不要なコストを回避するために、クラスターを終了し、このモジュールの演習全体でプロビジョニングしたすべてのリソースを削除します。

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

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

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

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

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

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

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