JupyterHub on Kubernetes部署

花了三天看了诸多文档,经历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
  • 验证docker,k8s安装是否成功。可以在网上参考一些demo,在自己环境中部署一些镜像,学习使用docker,k8s的基本命令。附一下我使用到的参考文献:
    • http://www.runoob.com/docker/docker-tutorial.html (Docker 菜鸟教程)
    • https://www.jianshu.com/p/051ff99b9421 (使用k8s部署nginx服务)

3.安装Helm

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

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

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

  • 在https://github.com/helm/helm/releases/tag/v2.11.0下载Mac版的安装包,注意版本!我此处下载的是v2.11.0版本,后续拉取镜像的时候要注意版本对应上。
  • 解压缩
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。

最新Helm安装参考
https://www.jianshu.com/p/7ab38da8758e

helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.11.0 --stable-repo-url http://mirror.azure.cn/kubernetes/charts/ --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's@apiVersion: extensions/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -

最新helm安装参考
https://www.jianshu.com/p/8aec2776f3f1

4.安装Jupyterhub

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

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

  • 从github上clone该项目,https://github.com/openthings/kubernetes-tools/tree/master/jupyter

  • 执行jupyterhub-images-pull.sh脚本(原来getimages.sh脚本下载的镜像不能用,这里直接用这个脚本)来下载镜像(这里有个镜像gcr.io/google_containers/pause下载不成功)

  • 参考https://blog.csdn.net/wangtaoking1/article/details/49122977描述的方法下载gcr.io/google_containers/pause镜像

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.最主要的几篇参考文献

  • https://zero-to-jupyterhub.readthedocs.io/en/latest/index.html
  • https://github.com/maguowei/k8s-docker-for-mac
  • https://blog.csdn.net/wzygis/article/details/84346573
  • https://my.oschina.net/u/2306127/blog/1619818
  • https://my.oschina.net/u/2306127/blog/1836933
  • https://blog.csdn.net/wangtaoking1/article/details/49122977

你可能感兴趣的:(JupyterHub on Kubernetes部署)