本ページは OCI: HPC Cluster のサブページになります。
はじめに
OCIのHPC ClusterではAutoscalingを利用することでSlurmジョブスケジューラーと連動してOCIのコンピュートインスタンスを起動/削除することができます。これによりオンデマンドなHPC利用を可能としています。
Autoscalingでは計算ノードが起動したらSlurmのセットアップやNFSマウントなどのOSの設定をAnsibleで行っています。
本記事ではそのAnsibleを利用して、Autoscalingで計算ノードが起動するときに特定の処理を行うための手順を解説します。
例えば以下のような場合です。
- 特定のOSパッケージをインストールしたい
- 特定のファイルの修正をしたい
- など
手順
ここでは計算ノードにOSパッケージであるlibnsl.so.1を追加でインストールする手順をご紹介します。
ログインノードにSSHでログインし、new_nodes.ymlファイルをバックアップします。
cd /opt/oci-hpc/playbooks
cp new_nodes.yml new_nodes.yml.$(date +%Y%m%d)
vi new_nodes.yml
37行目に- custom-taskを追加し、保存(:wq)します。(必要に応じてviの:set numberで行数を出しましょう)。
※本ファイルはymlファイルであるため、インデント(空白の数)で階層を表現します。誤ったインデントは構文エラーとなり、Autoscalingの失敗の原因となるため、正確な記載をお願いします。
20 - hosts: compute
21 become: true
22 vars:
23 destroy: false
24 gather_facts: true
25 roles:
26 - oci-cloud-agent
27 - privilege_group
28 - oci-legacy
29 - packages
30 - firewall
31 - oci-hostname
32 - ssh
33 - limits
34 - mpi-hostfiles
35 - boot-volume
36 - mpivars
37 - custom-task
続いて以下のディレクトリ作成とmain.ymlファイルを作成します。
mkdir -p /opt/oci-hpc/playbooks/roles/custom-task/tasks
vi /opt/oci-hpc/playbooks/roles/custom-task/tasks/main.yml
HPC Clusterではパッケージを確実にインストールするためのsafe_yumという仕組みがあるのでこれを利用した記述とします。以下のようにファイルに追加して保存(:wq)します。
※本ファイルはymlファイルであるため、インデント(空白の数)で階層を表現します。誤ったインデントは構文エラーとなり、Autoscalingの失敗の原因となるため、正確な記載をお願いします。
package_repo:で対象のリポジトリ指定が必要なのでご注意ください。
---
- name: install libnsl packages RedHat
vars:
package_name:
- libnsl.so.1
package_repo:
- ol7_latest
disable_gpg_check_var: True
package_state: latest
include_role:
name: safe_yum
when: ansible_os_family == 'RedHat'
以上で完了です。
ジョブを投入し、起動してくる計算ノードに意図した設定が反映されているかをご確認ください。
なお、設定を追加して最初の動作確認時には以下リンクの計算ノード作成・削除ログを確認しながら行うことをお勧めいたします。クラスタが正常起動しない場合は、ジョブをキャンセルし、エラー内容から設定を見返してください。
https://qiita.com/itokazu/items/63d2e3cebdcdda5afce0#%E3%83%AD%E3%82%B0
最後に
今回は例としてパッケージの追加について記載をいたしましたが、main.yml自体はAnsibleのファイルであるため、そのほかにもさまざまな設定や変更を行うことが可能です。