JupyterHub on Kubernetes部署

作者: 北邮郭大宝 | 来源:发表于2019-03-16 12:06 被阅读6次

    花了三天看了诸多文档,经历N次尝试后,终于成功在自己的Mac上,将JupyterHub部署在了Kubernetes(k8s)上,写一篇博客记录下安装过程,希望可以帮助到需要的朋友。

    1.实验依赖

    • Mac v10.12.2
    • Docker v18.09.3
    • Kubernetes v1.13.0
    • Helm v2.11.0

    2.安装Docker Desktop + k8s

    Docker Desktop是使用Mac学习Docker,Kubernetes最简单和快捷的工具,可以很方便的为你搭建一个k8s环境,所以我们的第一步也是安装Docker Desktop,并配置k8s。

    Docker Destop本身安装很简单,但遗憾的是k8s所需的镜像由于墙的原因很难拿到。在启用kubernetes过程中,会出现kubernetes is starting的问题,所以参考https://github.com/maguowei/k8s-docker-for-mac的方法,可以成功配置。

    简单复述一下步骤:

    • 从github上clone该项目

    • 下载并安装Docker Desktop(注意:必须安装他提供的版本,最新版的Docker Desktop无效,可能原因是缺少某些镜像)

    • 设置Docker官方加速镜像 https://registry.docker-cn.com,记得点Apply&Restart,否则不生效

    1552698791901.jpg
    • 在Kubernetes中启用Enable Kubernetes,直到两个都变成 is running
    1552698923865.jpg

    3.安装Helm

    根据Jupyterhub官方文档https://zero-to-jupyterhub.readthedocs.io/en/latest/描述,在k8s部署Jupyterhub需要使用helm,所以第二部需要安装Helm。

    还是因为某些镜像拿不下的原因,如果按照官方文档的方法还是不行,参考https://blog.csdn.net/wzygis/article/details/84346573的方法来。

    因为已经写的很清楚了,这里还是简单回顾步骤:

    tar -xvzf  helm-v2.11.0-darwin-amd64.tar.gz -C ~/app/ 
    mv ~/app/darwin-amd64/helm /usr/local/bin/helm
    
    • 编辑tiller.yaml,直接复制原文内容,执行命令
    kubectl apply -f tiller.yaml
    helm init
    
    • 替换镜像
    kubectl edit deploy tiller-deploy -n kube-system
    
    • image gcr.io/kubernetes-helm/tiller:v2.11.0 替换成 image: sapcc/tiller:v2.11.0(注意:此处的版本必须和下载的helm客户端版本一致,否则报错)

    • 验证helm是否安装成功

    helm version
    
    1552701357411.jpg

    这里还可以参考https://my.oschina.net/u/2306127/blog/1619818

    4.安装Jupyterhub

    安装好了k8s,helm后,终于来到了最后一步,安装jupyterhub。然而可惜的是,官网提供的方法仍然不可用,需要参考https://my.oschina.net/u/2306127/blog/1836933的方法。当然这里面还有坑。。。

    基本按照参考文章里的快速安装指南来安装,但是按照他的安装步骤是不成功的,所以这里参考我的来:

    docker pull docker.io/kubernetes/pause
    docker tag kubernetes/pause gcr.io/google_containers/pause:0.8.0
    
    • 修改secretToken

      • 执行 openssl rand -hex 32,生成字符串
      • 在 /jupyterhub/values.yaml中,替换proxy下的secretToken为刚才生成的字符串
    • 继续修改values.yaml中的storageClass,有两处,我这里设置成了"hostpath",也可以设置成“NFS”,根据自己的情况来吧。

    • 继续修改values.yaml中的images tag,镜像的版本信息需要和jupyterhub-images-pull.sh下载的一致,这里可以对应着全部改掉。

    • 继续修改values.yaml中proxy:service: type:为 NodePort。

    • 这里还有一个坑踩了好久,默认的Node分配的Memory只有2G,但是开启各种pod后,很快资源就不够了,这样jupyterhub服务启不来,所以干脆这里调节成4G。然后修改values.yaml中的memory,注意我这里proxy和hub只分配了256Mi,但是 singleuser:memory:guarantee至少1G,否则jupyterhub不运行。

    1552703625967.jpg
    • 执行命令,开启服务
      helm install ./jupyterhub --version=v0.7.0 \
      
    • 验证是否部署成功
      kubectl --namespace=jupyter get pod (两个都running)
      
    1552704272983.jpg
    ```
    kubectl --namespace=jupyter get svc proxy-public(查看端口)
    ```
    
    1552704423052.jpg
    • 浏览器登录localhost:30877


      1552704680601.jpg

    5.总结

    整个安装过程还是比较曲折的,由于之前完全没接触过docker,k8s,jupyterhub,花了一些时间在学习概念和工具的使用。还有大量时间在搜寻资料和试错上,不过好在还是有大神已经造了轮子,自己多尝试还是可以成功部署的。

    6.最主要的几篇参考文献

    相关文章

      网友评论

        本文标题:JupyterHub on Kubernetes部署

        本文链接:https://www.haomeiwen.com/subject/ijijmqtx.html