JupyterHub on Kubernetes-Helm安装
- 本文编译自 https://zero-to-jupyterhub.readthedocs.io/en/latest/setup-jupyterhub.html
- 本文地址,https://my.oschina.net/u/2306127/blog/1836933,by openthings, 2018.06.28.
- 更多内容,参考 JupyterHub on Kubernetes部署与应用指南 。
当我们有了 Kubernetes cluster 和 helm 安装好后,就可以开始安装 JupyterHub了。
1、快速安装指南
- 参考配置和一些脚本工具在 github.com/openthings/kubernetes-tools/jupyter 。
- 下面的helm安装方法中,helm .... -f config.yaml会出错,报缺失参数错误。
- 直接复制Helm Chart到自己的目录,然后修改。
- 修改proxy:secretToken:为执行 openssl rand -hex 32产生的字符串,带引号。
- 在values.yaml文件中,搜索“storageClass”,有两处,改为"nfs"或其它的存储引擎。
- 修改singleuser:storage:capacity:为 1Gi,以免=耗用资源过多。
- 如果需要持久化,参考:Kubernetes搭建NFS原生服务 。
- 所有的image的tag改为具体的版本号。目前安装时自动替换占位符功能不可用。
- 参考:github.com/openthings/kubernetes-tools/jupyter/getimages.sh
- 最好使用上面的脚本事先下载,以免安装时等待时间过长或超时退出。
- 修改proxy:service: type:为 NodePort。
- 运行安装:
- helm install ./jupyterhub --version=v0.6 --name=jupyter --namespace=jupyter
- 运行 kubectl --namespace=jupyter get svc proxy-public,查看端口。
- 显示类似PORT(S)80:32600/TCP,浏览器打开 localhost:32600即可。
以下为官方文档描述的方法,目前按照下面方法自建的config.yaml安装时会出错,可能与helm chart编写、Helm版本等都有关系,还需要完善。建议参照上面的方法来安装。
2、准备配置文件
准备一个配置文件 (config file). 使用 YAML 文件格式来指定JupyterHub的配置参数。
保存该配置文件到安全的地方,以后还会用来更新JupyterHub的设置。
执行下面的步骤,我们使用 nano 编辑器。
-
创建文件
config.yaml
,执行nano config.yaml
然后编辑。 -
创建随机hex string作为安全令牌,运行:
openssl rand -hex 32
复制下来。
-
插入文件
config.yaml
。当编辑YAML 文件时,使用空格缩进,不要用tab键。替换RANDOM_STRING
为上面openssl rand -hex 32
生成的字符串。proxy:secretToken: "<OUTPUT-OF-`openssl rand -hex 32`>"
-
Azure AKS有效,如果使用 Azure AKS, 必须关闭RBAC,设置如下的配置
:
rbac:enabled: false
查看 RBAC documentation 获得更多细节。
-
ctl+x保存
config.yaml
文件。
3、安装 JupyterHub
-
添加 JupyterHub helm repository 到本地 repo中,以便从中直接安装JupyterHub。这使使用 JupyterHub chart 更为方便,而不必输入长长的URL。
helm repo add jupyterhub https://jupyterhub.github.io/helm-chart/ helm repo update
输出如下:
Hang tight while we grab the latest from your chart repositories... ...Skip local chart repository ...Successfully got an update from the "stable" chart repository ...Successfully got an update from the "jupyterhub" chart repository Update Complete. ⎈ Happy Helming!⎈
-
从包含
config.yaml
文件的目录运行如下命令,来安装JupyterHub:helm install jupyterhub/jupyterhub \--version=v0.6 \--name=<YOUR-RELEASE-NAME> \--namespace=<YOUR-NAMESPACE> \-f config.yaml
建议
--name
和--namespace
设为一样,以减少混淆,虽然不是必须。注意:
--name
helm deployment的名称,可使用helm list查看。--namespace
是 Kubernetes (among other things) 的命名空间,安装时会自动创建。后续的kubectl
执行操作需要指明在特定的命名空间下操作,如 -n mynamespace。- 这需要一些时间,没有任何输出,请耐心等待一会。JupyterHub安装在后台执行。
- 如果返回
release named <YOUR-RELEASE-NAME> already exists
error,通过运行helm delete --purge <YOUR-RELEASE-NAME> 来删除已有的安装。如果换是不行,使用
kubectl delete <YOUR-NAMESPACE>
来删除,再重新安装。 - 彻底删除使用
helm delete --purge <YOUR-RELEASE-NAME>
。 - 如果拉去大的Docker Image,可能报错
Error: timed out waiting for the condition
error, 添加--timeout=SOME-LARGE-NUMBER
到helm install
命令。 - 这里的
--version
对应于helm chart的版本,而不是JupyterHub版本。每一个JupyterHub helm chart 对应于JupyterHub的版本,比如v0.5的 helm chart运行JupyterHub v0.8。
4、使用JupyterHub
查看安装后产生的pod:
kubectl --namespace=<YOUR-NAMESPACE> get pod
等到 hub 和 proxy pod 开始运行。
查到JupyterHub的服务 IP,如下:
kubectl --namespace=<YOUR-NAMESPACE> get svc
这里的 proxy-public
service 的external IP一会儿就可以访问了。
注意:
如果proxy-public
输出过长,可以使用:
kubectl --namespace=<YOUR-NAMESPACE> describe svc proxy-public --output=wide
到浏览器,输入proxy-public
service 的 external IP。在登录页面输入任何username 和 password 的组合都可以进入jupyterhub页面。
你还可以很多种方式 extend it ,可以使用预先构建的用户容器镜像,或者自己构建一个,使用不同的权限和安装不同的软件,里面的软件包使用conda管理。后续再介绍详细的方法。