Udemyがバーゲンをしていることに気づいたため、日本のゴールデンウィーク期間中は「【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門」でお勉強をしています。まだ終わっていません。。
この講座はJupyter
を用いてデータ分析を進める形でしたので、お家Kubernetes上にJupyter
を稼働させることとしました。
JupyterのDockerイメージまとめ - Qiitaでまとめられています。今回は、datascience-notebook
を使うことにしました。
Jupyterのmatplotlibを使用する際の日本語豆腐を解決 - Qiitaを参考にして、日本語フォントを導入します:
1
2
3
4
5
6
7
8
9
| FROM jupyter/datascience-notebook
COPY ./ipag.ttf /opt/conda/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/ipag.ttf
RUN echo "font.family : IPAGothic" >> /opt/conda/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibr
c
# Delete font cache
RUN rm -r ./.cache
|
Kubernetesの設定をまとめます。
Persistent Volumeはお家NASからNFSで領域を確保しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-jupyter-work
namespace: jupyter
labels:
name: nfs-jupyter-work
annotations:
volume.beta.kubernetes.io/storage-class: "slow"
spec:
capacity:
storage: 25Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
mountOptions:
- nfsvers=4.1
nfs:
server: 192.168.10.200
path: /volume1/Shared/kubernetes/jupyter/work
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-jupyter-config
namespace: jupyter
labels:
name: nfs-jupyter-config
annotations:
volume.beta.kubernetes.io/storage-class: "slow"
spec:
capacity:
storage: 25Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
mountOptions:
- nfsvers=4.1
nfs:
server: 192.168.10.200
path: /volume1/Shared/kubernetes/jupyter/config
|
確保したPersistent Volumeから、領域を確保します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jupyter-claim-work
namespace: jupyter
annotations:
volume.beta.kubernetes.io/storage-class: "slow"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 25Gi
selector:
matchLabels:
name: nfs-jupyter-work
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jupyter-claim-config
namespace: jupyter
annotations:
volume.beta.kubernetes.io/storage-class: "slow"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 25Gi
selector:
matchLabels:
name: nfs-jupyter-config
|
Deploymentの設定で、Jupyter
のコンテナをデプロイします。レプリカの数は1個にしています。おそらく複数コンテナを起動しても、ステートレスに接続できないと考えたためです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| apiVersion: apps/v1
kind: Deployment
metadata:
name: jupyter
namespace: jupyter
labels:
app: jupyter
spec:
replicas: 1
selector:
matchLabels:
app: jupyter
template:
metadata:
labels:
app: jupyter
spec:
containers:
- name: jupyter
image: reg.kazu634.com/kazu634/jupyter
ports:
- containerPort: 8888
env:
- name: CHOWN_HOME
value: "yes"
- name: CHOWN_HOME_OPTS
value: "-R"
- name: GRANT_SUDO
value: "yes"
volumeMounts:
- mountPath: /home/jovyan/work
name: docker-jupyter-work
readOnly: false
- mountPath: /home/jovyan/.jupyter
name: docker-jupyter-config
readOnly: false
volumes:
- name: docker-jupyter-work
persistentVolumeClaim:
claimName: jupyter-claim-work
- name: docker-jupyter-config
persistentVolumeClaim:
claimName: jupyter-claim-config
|
serviceの設定は以下になります。プライベートIPアドレスの192.168.10.210/24
でアクセスできるようにしています。ポート番号は80にしました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| apiVersion: v1
kind: Service
metadata:
name: jupyter
namespace: jupyter
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8888
selector:
app: jupyter
type: LoadBalancer
loadBalancerIP: 192.168.10.210
|
自宅ネットワークにいる状態でアクセスしたら、無事に接続できました。