本家様 https://github.com/rackslab/Slurm-web

slurmのダッシュボード

REST APIを使ってデータ取得をするようで、slurmのパッケージ作成slurm/rpmbuildで「slurmrestd」が作れるようにする

っでインストール

[root@slurm ~]# rpm -qpli  rpmbuild/RPMS/x86_64/slurm-slurmrestd-24.05.4-1.el9.x86_64.rpm
Name        : slurm-slurmrestd
Version     : 24.05.4
Release     : 1.el9
Architecture: x86_64
Install Date: (not installed)
Group       : System Environment/Base
Size        : 583134
License     : GPLv2+
Signature   : (none)
Source RPM  : slurm-24.05.4-1.el9.src.rpm
Build Date  : Tue 05 Nov 2024 09:47:26 PM JST
Build Host  : slurm.sybyl.local
URL         : https://slurm.schedmd.com/
Summary     : Slurm REST API translator
Description :
Provides a REST interface to Slurm.
/opt/slurm/sbin/slurmrestd
/usr/lib/.build-id
/usr/lib/.build-id/56
/usr/lib/.build-id/56/78a03143a32a8d110dd9bc1e0a5c3a94271352
/usr/lib/systemd/system/slurmrestd.service
 
[root@slurm ~]#
[root@slurm ~]# dnf localinstall rpmbuild/RPMS/x86_64/slurm-slurmrestd-24.05.4-1.el9.x86_64.rpm

slurmrestdを稼働させるアカウント(slurmrestd)を用意します。
slurm.confの「SlurmUser」で定義したユーザで稼働させてもいいのですが、その際は
その場合下記に示す「/usr/lib/systemd/system/slurmrestd.service」で「Environment=SLURMRESTD_SECURITY=disable_user_check」を追加する必要があるみたい.
ここではアカウント slurmrestd で行いたいと思います

[root@slurm ~]# groupadd -g 5001 slurmrestd ; useradd -M -d /var/lib/slurm -s /sbin/nologin -u 5001 -g slurmrestd slurmrestd
[root@slurm ~]# id slurmrestd
uid=5001(slurmrestd) gid=5001(slurmrestd) groups=5001(slurmrestd)
[root@slurm ~]#

slurmrestdへのリクエスト要求には2通りある. xinetdやsoket通信のようにその場その場でプロセスが動いて対処する方法と、特定のポートに耳を傾けるデーモンモード。
目的であるslurm-webは、soket通信でデータを取得できるので、それ向けに slurmrestd.service を作ります
slurm-webにはagentとgatewayのコンポーネントがある. それらは互いにJSON Web Token (JWT) で認証している. JWTでslurmrestdもJWTで構築と思うがそうでないみたい
あと、slurmctld,slurmdbdと同一のサイトで動かしてます. これが別のノードで動かすにはslurmrestdのJWT設定が必要なようです

「/usr/lib/systemd/system/slurmrestd.service」を下記のように用意します

[Unit]
Description=Slurm REST daemon
After=network-online.target remote-fs.target slurmctld.service
Wants=network-online.target
 
[Service]
Type=simple
User=slurmrestd
Group=slurmrestd
 
ExecStart=/opt/slurm/sbin/slurmrestd unix:/run/slurmrestd/slurmrestd.socket     <-- debugモードにするなら末尾に「-vvv」を追加します
 
# Environment=SLURMRESTD_SECURITY=disable_user_check     <-- slurm.confの「SlurmUser」と同じユーザが User/Group で指定しているならこれを有効にする
 
ExecReload=/bin/kill -HUP $MAINPID
 
[Install]
WantedBy=multi-user.target

これを有効にして、soketフォルダを設定します

[root@slurm ~]# systemctl daemon-reload
 
[root@slurm ~]# echo "D /run/slurmrestd 0755 slurmrestd slurmrestd -" > /usr/lib/tmpfiles.d/slurmrestd.conf
[root@slurm ~]# /usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/slurmrestd.conf
 
[root@slurm ~]# systemctl enable slurmrestd --now
 
[root@slurm ~]# ls -l /run/slurmrestd/slurmrestd.socket
srwxrwxrwx. 1 slurmrestd slurmrestd 0 Nov  5 23:48 /run/slurmrestd/slurmrestd.socket
[root@slurm ~]#

soket通信なので lsof には値がでません。

っで通信テストです

(一般ユーザで)
[saber@slurm ~]$ /opt/slurm/sbin/slurmrestd -d list
Possible data_parser plugins:
data_parser/v0.0.39
data_parser/v0.0.40
data_parser/v0.0.41
 
[saber@slurm ~]$

と提供されるparserがわかるので、それを使ってテストです

[root@slurm ~]# curl --unix-socket /run/slurmrestd/slurmrestd.socket http://slurm/slurm/v0.0.39/diag
{
  "meta": {
    "plugin": {
      "type": "openapi\/v0.0.39",
      "name": "Slurm OpenAPI v0.0.39",
      "data_parser": "v0.0.39"
    },
 :
 :
[root@slurm ~]#

以上でsoket通信で接続テストができた.
もしslurmctldとは別のノードでslurmrestdを動かすなら JSON Web トークン (JWT) 認証方法 が必要となるみたい

slurm-web本体のインストール

まずはリポジトリの登録を行い

[root@slurm ~]# curl https://pkgs.rackslab.io/keyring.asc --output /etc/pki/rpm-gpg/RPM-GPG-KEY-Rackslab
 
[root@slurm ~]# vi /etc/yum.repos.d/rackslab.repo
[rackslab]
name=Rackslab
baseurl=https://pkgs.rackslab.io/rpm/el9/main/$basearch/
gpgcheck=1
enabled=0
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rackslab
 
[root@slurm ~]#

リポジトリの詳細は「dnf --enablerepo=rackslab repolist -v rackslab」で見れます. またそのリポジトリに備えられているパッケージは「dnf list available --disablerepo=* --enablerepo=rackslab」で見れます

次にパッケージをインストールします

[root@slurm ~]# dnf install epel-release -y
[root@slurm ~]# dnf --enablerepo=rackslab install slurm-web-agent slurm-web-gateway

っで設定. agentは slurmrestd と通信する役目を持ちます. なので slurmrestd の soket を指定します.

[root@slurm ~]# vi /etc/slurm-web/agent.ini
[service]
cluster=cryo-cluster
interface=localhost
port=5012
[slurmrestd]
socket=/run/slurmrestd/slurmrestd.socket       <-- slurmrestdで用意したsoketを定義します
version=0.0.39
 
[root@slurm ~]#

また「/run/slurmrestd/slurmrestd.socket」はアカウント slurmrestd なのでagentもslurmrestdで動くようにします

[root@slurm ~]# vi /usr/lib/systemd/system/slurm-web-agent.service
[Unit]
Description=Slurm-web HPC dashboard agent
After=systemd-sysusers.service
 
[Service]
ExecStart=/usr/libexec/slurm-web/slurm-web-agent
Restart=on-failure
#User=slurm
User=slurmrestd    <-- Userを slurmrestd に変更します
 
[Install]
WantedBy=multi-user.target
 
[root@slurm ~]#

次に gatewayはwebサービス ダッシュボード そのもの. なので agent と通信するための設定が必要.

[root@slurm ~]# vi /etc/slurm-web/gateway.ini
[agents]
url=http://localhost:5012
[service]
interface=0.0.0.0                 <--- このホスト以外からの要求に答えるために「0.0.0.0」と定義します
[ui]
host=http://slurm:5011
 
[root@slurm ~]#

そしてagentとgatewayの通信には共通鍵っぽいものが必要でそれを作ります

[root@slurm ~]# /usr/libexec/slurm-web/slurm-web-gen-jwt-key
INFO :: Running slurm-web-gen-jwt-key
INFO :: Generating JWT private key file /var/lib/slurm-web/jwt.key
INFO :: Setting read permission on key for slurm-web user
INFO :: Setting read permission on key for slurm user
[root@slurm ~]#

ただしこの「/var/lib/slurm-web/jwt.key」は wslurm-web と slurm しか読めない仕様なのでagentの稼働ユーザ slurmrestd を加えます

[root@slurm ~]# ls -l /var/lib/slurm-web/jwt.key
-r--r-----+ 1 root root 64 Nov  3 23:56 /var/lib/slurm-web/jwt.key
[root@slurm ~]# cd /
[root@slurm /]# getfacl ./var/lib/slurm-web/jwt.key
# file: var/lib/slurm-web/jwt.key
# owner: root
# group: root
user::r--
user:slurm-web:r--
user:slurm:r--
group::---
mask::r--
other::---
 
[root@slurm /]#
 
(jwt.keyに user:slurmrestd を加える)
[root@slurm /]# setfacl -m user:slurmrestd:r ./var/lib/slurm-web/jwt.key
[root@slurm /]# getfacl  ./var/lib/slurm-web/jwt.key
# file: var/lib/slurm-web/jwt.key
# owner: root
# group: root
user::r--
user:slurm-web:r--
user:slurm:r--
user:slurmrestd:r--
group::---
mask::r--
other::---
 
[root@slurm /]#

これでslurm-webの仕組みは完了ですが、次に RacksDBを用意します. こちらは単に場所(住所)とサーバ室とラックの位置関係を示すものですが、、、定義が大変...
本家様 https://github.com/rackslab/RacksDB

[root@slurm ~]# dnf --enablerepo=rackslab install racksdb
[root@slurm ~]# cp -r /usr/share/doc/python3-racksdb/examples/db/* /var/lib/racksdb/
[root@slurm ~]# ls -l /var/lib/racksdb/
total 0
drwxr-xr-x. 2 root root 41 Nov  3 23:58 datacenters
drwxr-xr-x. 2 root root 65 Nov  3 23:58 infrastructures
drwxr-xr-x. 6 root root 78 Nov  3 23:58 types
[root@slurm ~]#

本来ならここで「/var/lib/racksdb」にあるデータを修正して自分の環境に合わせます. っがすっごい面倒...

なので RacksDB の修正は後回しにslurm-webを起動してみます

[root@slurm ~]# systemctl enable --now slurm-web-agent.service
[root@slurm ~]# systemctl enable --now slurm-web-gateway.service
[root@slurm ~]# lsof -i -P
 :
slurm-web 265981 slurmrestd    3u  IPv4 247884      0t0  TCP localhost:5012 (LISTEN)
slurm-web 265569  slurm-web    3u  IPv4 241239      0t0  TCP *:5011 (LISTEN)
 :
[root@slurm ~]#

確認は 5012 にアクセスしてみます。

2024y11m06d_000747216.png

2024y11m06d_000821604.png

2024y11m06d_000917373.png

正直,, qload や squeue で足りそう..

最新の60件
2024-12-08 2024-12-05 2024-12-04 2024-11-28 2024-11-23 2024-11-22 2024-11-15 2024-11-14 2024-11-12 2024-11-06
  • slurm/web
2024-11-05 2024-11-04 2024-11-02 2024-11-01 2024-10-29 2024-10-28 2024-10-27 2024-10-23 2024-10-18 2024-10-17 2024-10-15 2024-10-14 2024-10-13 2024-10-11 2024-10-10 2024-10-09 2024-10-08 2024-10-05 2024-10-04 2024-10-03 2024-10-02 2024-10-01 2024-09-30 2024-09-29 2024-09-28 2024-09-27 2024-09-22 2024-09-20 2024-09-17

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-11-06 (水) 00:12:53