JupyterHub on Kubernetes-Helm安装

原创
2018/06/28 12:03
阅读数 5.8K

JupyterHub on Kubernetes-Helm安装

当我们有了 Kubernetes clusterhelm 安装好后,就可以开始安装 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"或其它的存储引擎。
  • 所有的image的tag改为具体的版本号。目前安装时自动替换占位符功能不可用。
  • 修改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-NUMBERhelm 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管理。后续再介绍详细的方法。

展开阅读全文
打赏
1
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
1
分享
返回顶部
顶部