Jupyterhub使用Spawner實現用戶Notebook環境的定製化。在Jupyterhub on k8s裏用的是Kubespawner(https://jupyterhub-kubespawner.readthedocs.io/en/latest/)
配置Kubespawner
操作:
- 保證在hub鏡像中安裝KubeSpawner,路徑在/usr/local/lib/python3.6/dist-packages,默認已經安裝(注意版本不同配置方式不同)
- 修改helm chart的配置文件。在hub.extraConfig顯式配置Spawner。profile_list有image,cpu_limit, gpu_limit等配置項,我這裏只配了image,之前配了cpu、gpu之後pod起不來,查log可能是虛擬機資源不夠,其實這些配置好像寫死了也不是很好,後面可能從一個數據庫裏讀,用一個管理頁面去配置。
hub:
extraConfig:
myConfig.py: |
c.JupyterHub.spawner_class = 'kubespawner.KubeSpawner'
c.KubeSpawner.profile_list = [
{
'display_name': 'singleuser sample',
'default': True,
'kubespawner_override': {
'image_spec': 'jupyterhub/k8s-singleuser-sample:0.7.0',
}
}, {
'display_name': 'all-spark-notebooke',
'kubespawner_override': {
'image_spec': 'jupyter/all-spark-notebook:5811dcb711ba',
}
}, {
'display_name': 'tensorflow cpu:2.0',
'kubespawner_override': {
'image_spec': '192.168.199.182:5000/jupyter/tensorflow-notebook:2.0.1',
}
}, {
'display_name': 'tensorflow cpu:1.3',
'kubespawner_override': {
'image_spec': '192.168.199.182:5000/jupyter/tensorflow-notebook:1.3.1',
}
}
]
關於鏡像
jupyter有幾個原生的notebook鏡像,比如上面的jupyterhub/k8s-singleuser-sample,jupyter/all-spark-notebook。jupyter-docker-stacks有介紹notebook鏡像的構建過程,可以參照這個過程,在原本的notebook鏡像上裝我們需要的算法包,然後保存成新的notebook鏡像,更新一下helm chart的配置文件就行了。
更改鏡像的話可以參照官方github上的dockerfile, 添加自己需要的安裝包就行了。
# Copyright (c) Jupyter Development
# Distributed under the terms of the Modified BSD License.
ARG BASE_CONTAINER=jupyter/scipy-notebook
FROM $BASE_CONTAINER
LABEL maintainer="Jupyter Project <[email protected]>"
# Install Tensorflow
RUN conda install --quiet --yes \
'tensorflow=1.13*' \
'keras=2.2*' && \
conda clean -tipsy && \
fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
也可以開一個notebook容器在裏面裝軟件,然後保存成新的鏡像。