はじめに

仕事の都合でJupyter on OpenShiftを試したくなったので、複数回に分けてその過程を紹介してゆきます。
本稿は、2本目です。

1本目:CentOSのインストールとCRCのインストール
2本目:NFSサーバのインストールとJupyterHubのデプロイ ★本稿
3本目:JupyterLabへの永続ボリュームの割当てとJupyterLabイメージの切替え設定

本稿で紹介すること

    • できあがりの構成

 

    • NFSサーバのインストール

 

    JupyterHubのデプロイ

参考記事

以下の記事を見て、手元PCで進めてゆきます。

 

できあがりの構成

image.png

以下、IPAddrです。

    • HostOS:192.168.68.19

 

    GuestOS:192.168.130.11

GuestOSのIPAddrはCRCとしての既定値の模様で、以下コマンドでも確認できます。

[cent@centos7 ~]$ crc ip
192.168.130.11

イメージ図中の各コンポーネントですが、WebブラウザはCentOSビルトインのFirefoxを使います。
それ以外、実際にOpenShift Local上にコンテナとして存在するのですが、採用したコンテナイメージを記載します。
JupyterLabは用途に応じて切り替えて使うべく、コンテナイメージも3つ採用しています。

    • JupyterHub:quay.io/jupyteronopenshift/jupyterhub:3.4.01

PostgreSQL:postgres:9.62

JupyterLab:quay.io/jupyteronopenshift/s2i-minimal-notebook-py36:2.5.13

JupyterLab:quay.io/thoth-station/s2i-minimal-py38-notebook:v1.0.04

JupyterLab:jupyter/pyspark-notebook:python-3.85

NFSサーバのインストール

JupyterLabで作ったNotebookファイルが起動・停止の度にクリアされては困るため、コンテナ(厳密にはPod?)に対して永続ボリュームを割り当てます。
そのためには、NFSサーバが必要になる、という論法です。

CentOS上で全て完結するように、NFSサーバ機能もCentOSに持たせました。
テスト・開発用途であれば、これで十分でしょう。

まずはNFSサーバ機能に必要なパッケージをインストールします。

yum install -y rpcbind nfs-utils

公開ディレクトリのRootを作ります。

mkdir -p /var/share/nfs

公開ディレクトリに対する接続許可設定(アクセス元や権限)をします。とりあえず、以下のような記載としています。

[root@centos7 ~]# cat /etc/exports
/var/share/nfs 192.168.68.0/24(rw,sync,no_subtree_check,insecure,no_root_squash) 192.168.130.0/24(rw,sync,no_subtree_check,insecure,no_root_squash)

設定を反映して、状態を確認します。

exportfs -ra
exportfs -v

最後に、NFSサーバを含めたサービス群を起動します。ついでに、NFSサーバのサービスを自動起動にします。

systemctl start rpcbind
systemctl start nfs-server
systemctl start nfs-lock
systemctl start nfs-idmap
systemctl enable nfs-server

CRC環境の実体、GuestOSにSSH接続して、HostOSの公開ディレクトリがマウントできるようになっていればOKです。

ssh -i ~/.crc/machines/crc/id_ecdsa core@192.168.130.11
mkdir -p /mnt/nfs
mount -t nfs 192.168.68.19:/var/share/nfs /mnt/nfs
umount /mnt/nfs

JupyterHubのデプロイ

参考記事に挙げたGitHubの情報を参照して進めればOKです。
Loading the JupyterHub Templates6で公開されているうちの1つ、jupyterhub-deployer.jsonを使ってゆきます。

そのままではうまく動かないので、ちょいと手直しつつで利用します。オリジナルからの変更点の説明は活愛しますが、GitHubで公開しています。
他にもいくつかJSONファイルを準備しますが、同じく説明は割愛してGitHubで公開していますのでそちらを参照ください。

筆者は以下のコマンドを実行しました。
CRCのインストール完了後に表示されていた、資格情報を用いてOpenShift管理コンソールに接続した上で、種々の操作を実行してゆきます。
JSONファイルの記法エラーがなければ、サクサクと進むと思います。エラーが出たら、カッコやカンマなどに記載誤りがないかチェックしましょう。

# Login to OpenShift
oc login -u kubeadmin -p xxxxx-xxxxx-xxxxx-xxxxx https://api.crc.testing:6443

# Creating Project.
oc new-project jupyter

# Creating PV for jupyterhub-db.
oc apply -f jupyterhub-deployer_pv.json

# Creating PV and PVC for users.
oc apply -f jupyterhub_pv_admin.json
oc apply -f jupyterhub_pv_jupyter.json
oc apply -f jupyterhub_pvc_jupyter.json
oc apply -f jupyterhub_pvc_admin.json

# Creating Template.
oc apply -f jupyterhub-deployer_template.json

以下のようにPV、PVC、Templateとして登録されていることを確認しましょう。
PVの1つ、pv-jupyterhub-dbは呼応するPVCが存在せず使われていない状態のため、状態がAvailableとなっています。

[cent@centos7 ~]$ oc get pv,pvc,template
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                                 STORAGECLASS                   REASON   AGE
persistentvolume/pv-admin                                   1Gi        RWO            Retain           Bound       jupyter/pvc-admin                                                                             25h
persistentvolume/pv-jupyter                                 1Gi        RWO            Retain           Bound       jupyter/pvc-jupyter                                                                           25h
persistentvolume/pv-jupyterhub-db                           1Gi        RWO            Retain           Available   jupyter/pvc-jupyterhub-db                                                                     25h
persistentvolume/pvc-50372074-2c2b-4600-a4f1-c0bbc6917dd0   30Gi       RWX            Delete           Bound       openshift-image-registry/crc-image-registry-storage   crc-csi-hostpath-provisioner            41d

NAME                                      STATUS   VOLUME             CAPACITY   ACCESS MODES   STORAGECLASS                   AGE
persistentvolumeclaim/pvc-admin           Bound    pv-admin           1Gi        RWO            crc-csi-hostpath-provisioner   25h
persistentvolumeclaim/pvc-jupyter         Bound    pv-jupyter         1Gi        RWO            crc-csi-hostpath-provisioner   25h

NAME                                                 DESCRIPTION                                     PARAMETERS     OBJECTS
template.template.openshift.io/jupyterhub-deployer   Template for deploying a JupyterHub instance.   10 (1 blank)   9

次に、Dockerに対して環境設定をします。

躓きポイントです。
OpenShiftのRegistryに対する通信が暗号化されていない(≒HTTP通信)場合、DockerコンテナイメージをPushする際にエラーが出ます。
そのため、以下の流れでHTTP通信でアクセスするRegistryであることをDockerサービスに認識できるように設定します。

/etc/docker/daemon.jsonのファイルを以下のような記載にして保存します。

[root@centos7 ~]# cat /etc/docker/daemon.json
{"insecure-registries": ["default-route-openshift-image-registry.apps-crc.testing:443"]}

設定を反映して、Dockerサービスを再起動します。

[root@centos7 ~]# systemctl daemon-reload
[root@centos7 ~]# systemctl restart docker

以下のようにInsecure Registries:として登録されていることを確認しましょう。

[root@centos7 ~]# docker info 2> /dev/null | tail -5
 Insecure Registries:
  default-route-openshift-image-registry.apps-crc.testing:443
  127.0.0.0/8
 Live Restore Enabled: false

そして、できあがりの構成/Temmplateで必要なコンテナイメージ群をOpenShift(の事前作成済みのプロジェクト≒名前空間)に登録してゆきます。

# Pull ContainerImages.
docker pull quay.io/jupyteronopenshift/jupyterhub:3.4.0
docker pull postgres:9.6
docker pull quay.io/jupyteronopenshift/s2i-minimal-notebook-py36:2.5.1
docker pull quay.io/thoth-station/s2i-minimal-py38-notebook:v1.0.0
docker pull jupyter/pyspark-notebook:python-3.8

# Creating ImageStreams.
oc whoami -t | docker login -u kubeadmin --password-stdin https://default-route-openshift-image-registry.apps-crc.testing:443
docker tag quay.io/jupyteronopenshift/jupyterhub:3.4.0 default-route-openshift-image-registry.apps-crc.testing:443/jupyter/jupyterhub:3.4.0
docker tag postgres:9.6 default-route-openshift-image-registry.apps-crc.testing:443/jupyter/postgres:9.6
docker tag quay.io/jupyteronopenshift/s2i-minimal-notebook-py36:2.5.1 default-route-openshift-image-registry.apps-crc.testing:443/jupyter/s2i-minimal-notebook-py36:2.5.1
docker tag quay.io/thoth-station/s2i-minimal-py38-notebook:v1.0.0 default-route-openshift-image-registry.apps-crc.testing:443/jupyter/s2i-minimal-py38-notebook:v1.0.0
docker tag jupyter/pyspark-notebook:python-3.8 default-route-openshift-image-registry.apps-crc.testing:443/jupyter/pyspark-notebook:python-3.8
docker push default-route-openshift-image-registry.apps-crc.testing:443/jupyter/jupyterhub:3.4.0
docker push default-route-openshift-image-registry.apps-crc.testing:443/jupyter/postgres:9.6
docker push default-route-openshift-image-registry.apps-crc.testing:443/jupyter/s2i-minimal-notebook-py36:2.5.1
docker push default-route-openshift-image-registry.apps-crc.testing:443/jupyter/s2i-minimal-py38-notebook:v1.0.0
docker push default-route-openshift-image-registry.apps-crc.testing:443/jupyter/pyspark-notebook:python-3.8
docker logout https://default-route-openshift-image-registry.apps-crc.testing:443

以下のようにImageStreamとして登録されていることを確認しましょう。

[cent@centos7 ~]$ oc get is
NAME                                                       IMAGE REPOSITORY                                                                            TAGS         UPDATED
imagestream.image.openshift.io/jupyterhub                  default-route-openshift-image-registry.apps-crc.testing/jupyter/jupyterhub                  3.4.0        25 hours ago
imagestream.image.openshift.io/postgres                    default-route-openshift-image-registry.apps-crc.testing/jupyter/postgres                    9.6          25 hours ago
imagestream.image.openshift.io/pyspark-notebook            default-route-openshift-image-registry.apps-crc.testing/jupyter/pyspark-notebook            python-3.8   25 hours ago
imagestream.image.openshift.io/s2i-minimal-notebook-py36   default-route-openshift-image-registry.apps-crc.testing/jupyter/s2i-minimal-notebook-py36   2.5.1        25 hours ago
imagestream.image.openshift.io/s2i-minimal-py38-notebook   default-route-openshift-image-registry.apps-crc.testing/jupyter/s2i-minimal-py38-notebook   v1.0.0       25 hours ago
Screenshot from 2023-05-09 19-18-45.png
Screenshot from 2023-05-09 19-19-40.png
Screenshot from 2023-05-09 19-21-18.png
Screenshot from 2023-05-09 19-21-36.png
Screenshot from 2023-05-09 19-22-12.png

とりあえず最低限はクリアしたので、ココまで。
永続ボリュームを割り当てたり、用途に応じたイメージの切り替えたりは、また今度。。。

まとめ

本稿ではNFSサーバのインストールおよびJupyterHubのデプロイを進めました。
PCのSpecの都合、Largeリソースを割り当てたり、複数のJupyterLabコンテナを起動したり、は難しいですが、OpenShiftクラスタでJupyterHub/JupyterLabを試すには十分すぎる環境だと思われます。

jupyteronopenshift/jupyterhub – Quay | https://quay.io/repository/jupyteronopenshift/jupyterhub?tab=tags ↩

postgres – Official Image | https://hub.docker.com/_/postgres ↩

jupyteronopenshift/s2i-minimal-notebook-py36 – Quay | https://quay.io/repository/jupyteronopenshift/s2i-minimal-notebook-py36?tab=tags ↩

thoth-station/s2i-minimal-py38-notebook – Quay | https://quay.io/repository/thoth-station/s2i-minimal-py38-notebook?tab=tags ↩

jupyter/pyspark-notebook – Docker Image | https://hub.docker.com/r/jupyter/pyspark-notebook ↩

Loading the JupyterHub Templates | https://github.com/jupyter-on-openshift/jupyterhub-quickstart#loading-the-jupyterhub-templates ↩

广告
将在 10 秒后关闭
bannerAds