IPython、JupyterHub、JupyterLab是用於大數據分析和機器學習的流行的環境,JupyterHub能夠運行於Kubernetes集羣環境中,從而供多人同時使用,支持動態伸縮。node
雖然登陸後能夠經過pip和conda安裝軟件包,可是服務重啓或者pod漂移後將會被從新初始化,所安裝的軟件和配置參數、使用狀態都會丟失。git
按照Kubernetes的原則,pod在運行過程當中應該是固定的,以便於複製、伸縮和遷移,全部的動態數據應該保留到網絡中的共享存儲之中。所以,咱們能夠將全部的軟件預先安裝在容器中,而後部署鏡像到集羣中便可。github
下面介紹JupyterHub容器鏡像的自定義方法與步驟。docker
建立一個目錄(或首先建立一個git項目)。而後編輯一個 Dockerfile 文件用於後續的Docker容器鏡像構建。shell
# Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. FROM jupyter/all-spark-notebook:5811dcb711ba LABEL maintainer="Databook Project,https://github.com/databooks<openthings@163.com>" USER root # ==================================================================== # Add proxy, using --build-arg "HTTP_PROXY=http://192.168.199.99:9999" ENV HTTP_PROXY ${HTTP_PROXY} ENV HTTPS_PROXY ${HTTP_PROXY} ENV http_proxy ${HTTP_PROXY} ENV https_proxy ${HTTP_PROXY} ENV SLUGIFY_USES_TEXT_UNIDECODE=yes #Add conda install mirror: RUN echo $http_proxy && \ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \ conda config --set show_channel_urls yes #Add pip install mirror: RUN echo "[global] \ index-url = http://pypi.tuna.tsinghua/simple \ trusted-host = \ pypi.tuna.tsinghua \ timeout = 120 \ " > /etc/pip.conf # ==================================================================== # ==================================================================== USER $NB_UID RUN pip install --upgrade pip RUN pip install bs4 && \ pip install lxml && \ pip install py4j && \ pip install pyspark && \ pip install tushare RUN conda install -y nodejs scikit-image matplotlab ipyleaflet RUN conda install -y tensorflow apache-airflow mlflow RUN conda install -y pytorch torchvision cudatoolkit=10.0 -c pytorch RUN conda update --all RUN conda install jupyterlab=0.34.12 RUN jupyter labextension install @jupyter-widgets/jupyterlab-manager RUN jupyter labextension install jupyter-leaflet RUN jupyter labextension upgrade --all RUN jupyter lab build # ==================================================================== ENV HTTP_PROXY "" ENV HTTPS_PROXY "" ENV http_proxy "" ENV https_proxy "" # ====================================================================
注意事項:apache
建立一個shell腳本文件,能夠快速重複執行容器鏡像的構建操做。瀏覽器
docker build --build-arg "HTTP_PROXY=http://192.168.199.99:9999" -t openthings/databook .
將上述文件放到github.com的項目中,就能夠在hub.docker.com啓動自動構建工做(比本地構建更快)。而後將鏡像拉取到本地便可,也能夠推送到阿里雲/AWS等的鏡像服務中,再拉取或者直接使用。網絡
執行腳本,將獲得所構建的鏡像,名爲openthings/databook:latest。機器學習
爲了正常下載所須要的軟件包,能夠指定proxy參數,以下:學習
docker build --build-arg "HTTP_PROXY=http://192.168.199.99:9999" -t openthings/databook .
爲了在集羣中全部節點都可以運行JupyterHub服務容器,須要將鏡像部署到全部的節點。有幾種方法:
下一步,部署(或更新)Kubernetes集羣中的JupyterHub服務。
首先修改helm chart目錄 deploy-k8s 的values.yaml文件,將鏡像地址改成openthings/databook:lates,而後使用helm來部署JupyterHub的chart。
安裝:
helm install ./deploy-k8s --version=v0.6 --name=databook --namespace=databook
刪除:
helm del --purge databook
更新:
helm upgrade databook ./deploy-k8s
更多參考:
到Kubernetes Dashboard,查看命名空間jupyter的service的IP地址,而後到瀏覽器輸入。缺省頁面爲notebook,將地址後面改成lab,便可進入Jupyterlab的多窗口風格頁面。