3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitLabAdvent Calendar 2020

Day 6

オンプレGitLabにMicroK8s接続してGitLabのJupyterHubを使う

Last updated at Posted at 2021-01-01

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

GitLabには、いくつかのJupyterに関連する機能があります。.ipynbのJupyterNotebookを表示(Jupyter Notebook Files)したり、
Kubernetesを連携したらJupyterHubを動かすJupyter Hub as a GitLab Managed Appがあります。
KuberbernetesをGitLabに連携するとJupyter HubのRunbookを実行できる機能もあります
そのJupyterHubではJupyter Git integrationでGitと連携できます。
DevOps runbooksをRubix/Nurtchによるライブラリで利用することができます。

以下の2回の記事でオンプレGitLabにKubernetesであるMicroK8sを接続しましたので、そのKubernetes上でJupyterHubを動かしてみます。

オンプレGitLabにMicroK8s接続してGitLabのAuto DevOpsを体験する(前半) - Qiita
https://qiita.com/ynott/items/f3651e9f3d46b1f088ee

オンプレGitLabにMicroK8s接続してGitLabのAuto DevOpsを体験する(後半) - Qiita
https://qiita.com/ynott/items/46d4b2926afec0d788f2

1. JupyterHubを動かす

GitLabをKubernetes連携してあれば、インストールは簡単です。

Kubernetes連携」から「該当クラスター」をクリックして、アプリケーションをクリックして
JupyterHubでインストールボタンを押します。以下はインストール途中の画面です。

image.png

インストールできると以下のようになります。
インストールには約4分~5分程度かかります。

$ kubectl get all -n gitlab-managed-apps
NAME                                                       READY   STATUS    RESTARTS   AGE
pod/ingress-nginx-ingress-default-backend-c9b59c85-vvm9f   1/1     Running   0          17m
pod/ingress-nginx-ingress-controller-75686bdf76-gcqdr      2/2     Running   0          17m
pod/continuous-image-puller-99vtb                          1/1     Running   0          5m6s
pod/proxy-949ff9478-rv7qq                                  1/1     Running   0          5m6s
pod/user-scheduler-d6bd9d4dc-bvgjk                         1/1     Running   0          5m6s
pod/user-scheduler-d6bd9d4dc-4tmw9                         1/1     Running   0          5m6s
pod/hub-5f64bf79bf-g699m                                   1/1     Running   0          5m6s

NAME                                            TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
service/ingress-nginx-ingress-default-backend   ClusterIP      10.152.183.240   <none>          80/TCP                       17m
service/ingress-nginx-ingress-controller        LoadBalancer   10.152.183.45    192.168.10.30   80:31012/TCP,443:31903/TCP   17m
service/proxy-public                            ClusterIP      10.152.183.143   <none>          443/TCP,80/TCP               5m7s
service/hub                                     ClusterIP      10.152.183.167   <none>          8081/TCP                     5m7s
service/proxy-api                               ClusterIP      10.152.183.64    <none>          8001/TCP                     5m7s

NAME                                     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/continuous-image-puller   1         1         1       1            1           <none>          5m6s

NAME                                                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ingress-nginx-ingress-default-backend   1/1     1            1           17m
deployment.apps/ingress-nginx-ingress-controller        1/1     1            1           17m
deployment.apps/proxy                                   1/1     1            1           5m6s
deployment.apps/user-scheduler                          2/2     2            2           5m6s
deployment.apps/hub                                     1/1     1            1           5m6s

NAME                                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/ingress-nginx-ingress-default-backend-c9b59c85   1         1         1       17m
replicaset.apps/ingress-nginx-ingress-controller-75686bdf76      1         1         1       17m
replicaset.apps/proxy-949ff9478                                  1         1         1       5m6s
replicaset.apps/user-scheduler-d6bd9d4dc                         2         2         2       5m6s
replicaset.apps/hub-5f64bf79bf                                   1         1         1       5m6s

NAME                                READY   AGE
statefulset.apps/user-placeholder   0/0     5m6s

2. JupyterHubを開いて動作確認

JupyterHubに接続するには、Jupyter のホスト名の下のJupyter.hogehoge.nip.ioをブラウザーで開きます。

以下のSign in with GitLabが出てくるのでクリックします。

image.png

GitLabへログインしていなければ、ログイン画面が出てくるのでログインします。
(GitLabへログインしている場合は、すぐに以下のページに切り替わります)

image.png

最初のみJupyterへの接続確認が行われます。Authorizeをクリックします。
以下のようなログ画面が出て、

image.png

JupyterHubが起動します。

image.png

3. RunBookを開く

左ペインのDevOps-Runbook-DemoをクリックしてNurtch-DevOps-Demo.ipynbをクリックして開きます。

image.png

RunBookのデモを体験できます。
実際に動かしているデモ画像がYoutubeにありますので、参考にしてみてください。

4. Gitリポジトリーを開く

ここでデプロイされたJupyterHubは、Git連携できるようになっているのでGitリポジトリーをJupyterHubで開いて
変更があればそれをGitリポジトリーにPushし直すことも出来ます。

image.png

こちらもDemoがYoutubeにあります。
GitLab repository integration for JupyterHub - Demo - YouTube
https://www.youtube.com/watch?v=ruhCdixHMQI

GitLab Managed Apps | GitLab
https://docs.gitlab.com/ee/user/clusters/applications.html#jupyter-git-integration

5. まとめ

これから一層Jupyterは利用が進むと思います。これは、AIのような分野のみならずRunBookのようなサーバーメンテナンスをするのに
便利なプラットフォームとして利用されていくでしょう。

RunBookは、CUIターミナルでのサーバー操作と自動化したCI/CDでのサーバー操作の中間のような操作感です。
もっと利用が増えればいいなと思います。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?