OCS講義演習環境テンプレートによるCoursewareHub構築・運用に関するFAQ


1 000-README

対象Notebook

1.1 「作業用Notebookの作成」実行でNotebookが開かない

「作業用Notebookの作成」の冒頭で、作業用Notebookを配置するディレクトリを次のように指定しています。

WORK_DIR = 'work'

ここで指定したディレクトリ配下に作業用Notebookが作成されていますので、そちらのNotebookを直接実行ください。

2 VCノード作成-構成

対象Notebook

2.1 「パラメータの保存」でException: File 'scripts/check_params.py' not found.と出力されエラーとなる

000-README.ipynb において「作業用Notebookの作成」を実行せず、notebooks/ にあるNotebookを直接実行している場合に下記のようなエラーが出力されます。 000-README.ipynb において「作業用Notebookの作成」を実行し、作成された作業用のNotebookを実行してください。

File /opt/conda/lib/python3.10/site-packages/IPython/core/interactiveshell.py:2305, in InteractiveShell.run_line_magic(self, magic_name, line, _stack_depth)
   2303     kwargs['local_ns'] = self.get_local_scope(stack_depth)
   2304 with self.builtin_trap:
-> 2305     result = fn(*args, **kwargs)
   2306 return result

File /opt/conda/lib/python3.10/site-packages/IPython/core/magics/execution.py:707, in ExecutionMagics.run(self, parameter_s, runner, file_finder)
    705     if os.name == 'nt' and re.match(r"^'.*'$",fpath):
    706         warn('For Windows, use double quotes to wrap a filename: %run "mypath\\myfile.py"')
--> 707     raise Exception(msg) from e
    708 except TypeError:
    709     if fpath in sys.meta_path:

Exception: File `'scripts/check_params.py'` not found.```
    

2.2 「Docker Swarmの設定」でトークンの値を取得する際に[DEPRECATION WARNING]が出力されエラーとなる

ansibleの実行で warning メッセージが出ているため、想定した出力結果を処理できずにエラーになってしまっています。 ansible.cfg[defaults] セクションに command_warnings を設定している行があるのでそれを削除し、再度実行ください。

3 CoursewareHubのセットアップ

対象Notebook

3.1 「CoursewareHubにアクセスする」でエラーとなる

コンテナの起動に失敗していることがあります。「コンテナの起動」の最後にある起動後の状態を次のコマンドを個別に実行しログを確認しているセルがありますので、それらを実行し、何度も再起動がくりかえされていないか、エラーが出ていないか確認ください。

!ansible {target_hub} -a 'docker stack ps {{{{ugroup_name}}}}'
!ansible {target_hub} -a 'docker service logs {{{{ugroup_name}}}}_postgres'
!ansible {target_hub} -a 'docker service logs {{{{ugroup_name}}}}_jupyterhub'
!ansible {target_hub} -a 'docker service logs {{{{ugroup_name}}}}_auth-proxy'

再起動を繰り返している場合やエラーが出力されている場合はmanagerノード上で次のコマンドでCoursewareHubのコンテナ群を再配備を実行し、問題が解消されないかお試しください。

# 下記の{unitgroup_name}は構築時に指定したUnitGroup名に置き換えて実行ください
cd /srv/cwh
docker stack rm {unitgroup_name}
docker stack deploy -c docker-compose.yml {unitgroup_name}

問題が解消されない場合はお問い合わせください。

4 CoursewareHubコンテンツの配備

対象Notebook

4.1 最初のセルが実行中のまま完了しない

CoursewareHub管理者環境から manager ノードに ssh で 初めて 接続する際に、接続先のホスト鍵を ~/.ssh/known_hosts に取り込むかどうかを Are you sure you want to continue connecting (yes/no)? のように聞かれます。この状態で止まったままになるとNotebook上には何も表示されずセルが実行中のままとなります。

Jupyter Notebook Terminal から manager ノード に ssh 接続をし、上記のメッセージに yes と入力し、known_hosts ファイルにホスト鍵を取り込み、その後にセルを実行ください。

5 その他運用等

5.1 managerノードでexportしているNFSを追加でsingleuserのコンテナ内でマウントしたい

managerノードでexportしているファイルをsingleuserコンテナでマウントするには次の2ステップを踏む形になります。

  1. managerノードのファイルを workerノードでNFSマウント
  2. workerノードのファイルを singleuser コンテナでマウント

5.1.1 managerノードのファイルを workerノードでNFSマウント

workerノードでは、managerノードの /exported/${ugroup_name}/mnt/nfs にNFSマウントしています(workerノードの /etc/fstabで確認出来ます)。 そのため、そのディレクトリの下に共有ディレクトリを作ればNFSにより各ノードでファイルを共有することができます。

5.1.2 workerノードのファイルを singleuser コンテナでマウント

ノードでNFSの共有ができていることを前提とすれば singleuser コンテナではNFSを考慮する必要はなく(bind mountなどを利用して)そのノードのファイルをどうやってsingleuserコンテナに見えるように設定できるかだけを検討すれば良いことになります。 singleuserコンテナに対して追加のbind mountを設定するには jupyterhub コンテナの中にある設定ファイル /srv/jupyterhub/jupyterhub_config.py に extra_user_mounts の記述を追加します。

singleuserコンテナに対して追加のbind mountを設定する方法は次のステップになります。

  1. 既存のjupyterhub_config.pyの取得
  2. jupyterhub_config.py に extra_user_mounts 設定の追加
  3. docker-compose.yml へのjupyterhubコンテナへの編集済みのjupyterhub_config.py反映を設定
  4. CoursewareHubのコンテナ群を再配備

5.1.2.1 既存のjupyterhub_config.pyの取得

編集元となる(ocs-templateで使っているjupyterhubコンテナの) jupyterhub_config.py は、以下のコマンドで取得できます。

curl -L  -O <https://raw.githubusercontent.com/NII-cloud-operation/CoursewareHub-LC_platform/54a91>
fabd6490ae43347967fe203353c53d45f2c/jupyterhub/jupyterhub_config.py

5.1.2.2 jupyterhub_config.py に extra_user_mounts 設定の追加

例えば worker ノードの /mnt/nfs/local をsingleuserコンテナの /opt/localとしてbind mountするには、以下のような記述内容を元々の jupyterhub_config.py に追記します。

from docker.types import Mount

c.CoursewareUserSpawner.extra_user_mounts = [Mount(
    type="bind",
    target='/opt/local',
    source='/mnt/nfs/local',
    read_only=False
)]

5.1.2.3 docker-compose.yml へのjupyterhubコンテナへの編集済みのjupyterhub_config.py反映を設定

記述を追加した設定ファイルをjupyterhubコンテナに反映するには、 docker-compose.yml を変更し、追加の設定ファイルをbind mountするように、以下に示す差分のような変更を行ってCoursewareHubのコンテナ群を再配備します。前提としては追加の設定ファイル jupyterhub_config.py をmanagerノードの /srv/cwh/jupyterhub/jupyterhub_config.py に配置していることを想定しています。

--- docker-compose.yml.orig     2023-05-25 14:01:27.494816172 +0000
+++ docker-compose.yml  2023-05-25 14:01:12.746763628 +0000
@@ -33,20 +33,23 @@
         target: /var/run/docker.sock
       - type: bind
         source: /var/run/restuser.sock
         target: /var/run/restuser.sock
       - type: bind
         source: /srv/cwh/jupyterhub/logo.png
         target: /var/jupyterhub/logo.png
       - type: bind
         source: /srv/cwh/jupyterhub/resource.yaml
         target: /srv/jupyterhub/resource.yaml
+      - type: bind
+        source: /srv/cwh/jupyterhub/jupyterhub_config.py
+        target: /srv/jupyterhub/jupyterhub_config.py
     networks:
       - courseware-backend
     deploy:
       replicas: 1
       placement:
         constraints:
           - node.role == manager
   auth-proxy:
     image: <http://harbor.vcloud.nii.ac.jp/vcp/coursewarehub:auth-proxy-20220222|harbor.vcloud.nii.ac.jp/vcp/coursewarehub:auth-proxy-20220222>
     volumes:

5.1.2.4 CoursewareHubのコンテナ群を再配備

managerノード上で次を実行ください。

# 下記の{unitgroup_name}は構築時に指定したUnitGroup名に置き換えて実行ください
cd /srv/cwh
docker stack rm {unitgroup_name}
docker stack deploy -c docker-compose.yml {unitgroup_name}

5.2 workerノードのリソース使用量に余裕があるのに、一定数以上のsingle-userサーバコンテナが起動できない

下記のNotebook内の「リソース制限の設定」にて実施している制限値が影響していることが考えられます。

上記で作成する設定ファイルに次のような最小保証値を設定をすることができます。

    mem_guarantee: 1G
    cpu_guarantee: 0.5

上記はそれぞれCPUとメモリの最小保証値となります。 single-userサーバコンテナを起動する際に、実際に使用されていなくても起動数 * 最小保証値分のリソースが確保できない場合はそれ以上起動できなくなります。 これらの値を変更し、起動可能数に変化がないかご確認ください。 収容設計に関しましては、次のNotebookの「収容設計について」も情報がありますので参照ください。

設定値の変更の反映は次のような手順で可能です。

1.変更いただいた resource.yaml ファイルをmanagerノード上の次のファイルと置き換えてください。

/srv/cwh/jupyterhub/resource.yaml

2.その後managerノード上で次のコマンドを実行いただくと、新しい resource.yaml の設定で各コンテナを起動しなおすことができます。

# 下記の{unitgroup_name}は構築時に指定したUnitGroup名に置き換えて実行ください
cd /srv/cwh
docker stack rm {unitgroup_name}
docker stack deploy -c docker-compose.yml {unitgroup_name}

3.上記後に次を実行いただくと、各コンテナの起動状態が確認できます。

# 下記の{unitgroup_name}は構築時に指定したUnitGroup名に置き換えて実行ください
docker stack ps {unitgroup_name}

5.3 ユーザが利用する single-userサーバコンテナの処理が重い

下記のNotebook内で「リソース制限の設定」節がありますので、こちらを確認いただきsingle-userサーバコンテナに割り当てるリソース配分の変更をお試しください。

お試しの際は次のNotebookを参考にGrafanaにて問題発生時のリソース状況を確認しつつ変更を実施いただくとよいかと思います。 特にNotebook内で紹介しているJupyterHub.jsonでは、single-userサーバコンテナの起動数やリソース使用量を確認することができますのでお役に立つかと思います。

リソース設定変更の反映の方法につきましては、こちらの項目を参照ください。

5.4 作成したOCS用VMware 仮想マシンテンプレートが要件にあっているか確認したい

チェックスクリプトを用意していますのでご利用ください。

5.4.1 チェックスクリプトの実行の仕方

仮想マシンテンプレート化前の仮想マシン上で次の様に実行ください。

sudo sh ./ocs_vmware_template_check.sh

5.5 FAQでも解決しない場合の問い合わせ

下記のサポート窓口までお問い合わせください。

CousewareHub構築時の問題の場合は、情報収集用のNotebookを用意していますので、こちらの実行結果を保存したファイルも添付ください。

5.5.1 お問い合わせ先

国立情報学研究所 クラウド支援室 学認クラウドオンデマンド構築サービスサポート窓口:cld-ocs-support@nii.ac.jp