安装Jupyterhub

JupyterHub为一个提供可多人撰写的notebook的工具, 属於撰写notebook工具中的其中一个分支.

本次所安装的JupyterHub版本为jupyterhub for kubernetes, 这个版本是以kubernets为基础然後将JupyterHub安装在K8s之上, 一来容易安装, 二来也可以善用K8s的特性.

其官网的网址在这里:
https://zero-to-jupyterhub.readthedocs.io/en/latest/

安装前准备

在安装JupyterHub之前, 已先安装好NFS Server做为分享的储存空间, 这个空间在安装JupyterHub时会使用到, 资讯如下:

  • NFS Server IP: 172.23.180.15
  • Path: /mnt/Data/k8snfsshare

安装Jupyterhub

接下来我们就开始安装JupyterHub

  • 每一个K8s node上安装nfs-client

    • 因为我的OS是 ubuntu 18.04, 因此执行下列指令
      $sudo apt install nfs-common
      
  • 安装nfs provisioner

    • 这是要建立K8s的Storage Class, 之後建立pvc时可以让K8s知道可以指定storage class名称来创建所需的储存空间
      在Master node上执行下列指令

      $ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
      
      $ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
      --set nfs.server=172.23.180.15 \
      --set nfs.path=/mnt/Data/k8snfsshare
      

      执行完成之後, 所产生的storage class名称为nfs-client

      然後还要将所产生的storage class设定为default storage class

      kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
      

      storage class安装与设定好了之後, 可以使用kubectl get sc 看一下内容

      k8s@k8s-master:~$ kubectl get sc
      NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
      nfs-client (default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   23d
      
  • 安装helm
    因为安装Jupyterhub是以heml进行安装, 所以就来安装一下
    在Master node上执行下列指令

    $ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
    $ chmod 700 get_helm.sh
    $ ./get_helm.sh
    
  • 安装 jupytorHub

    • 先加入helm repo

      $helm repo add jupyterhub https://jupyterhub.github.io/helm-chart/
      $helm repo update
      
    • 产生security token
      这个token等一下会加在config.yaml参数档中.

      $openssl rand -hex 32
      

      例如产生出来的token字串为

      a1280b641f26b1cb683b5dab77ced6b74e8fe484625bce4f4529f4e43fc3ab6b
      
    • 编辑 config.yaml
      用你喜欢的文字编辑器, 我是使用vim

      $vim config.yaml
      

      这个档案是jupyterhub的参数档, 内容如下

      proxy:
        secretToken: "a1280b641f26b1cb683b5dab77ced6b74e8fe484625bce4f4529f4e43fc3ab6b"
        service:
          type: NodePort
      singleuser:
        storage:
          dynamic:
            storageClass: nfs-client
      hub:
        config:
          Authenticator:
            admin_users:
              - amdin
        service:
          type: NodePort 
      cull:
        enabled: false  
      
    • 然後执行下列指令进行安装

      helm upgrade --cleanup-on-fail \
      --install myjhub jupyterhub/jupyterhub \
      --namespace jhub \
      --create-namespace \
      --version=1.1.2 \
      --values config.yaml      
      

      其中

      • myjhub是自己取的名称
      • namespace是预计安装jupyterhub的namespace
      • version是helm chart的版本
        • 这里可以查到helm chart版本与 jupyterhub版本的对应
  • 开启Jupyterhub首页

    • 安装完成之後, 输入下列指令确认所对应出来的nodeport是多少

      $kubectl get svc -n jhub
      

      如下图, nodeport是32109
      https://ithelp.ithome.com.tw/upload/images/20210917/20140792nW6N7FyyhJ.png

    • 在网址列输入 http://172.23.180.10:32109 , 可以看到Jupyterhub首页
      https://ithelp.ithome.com.tw/upload/images/20210917/201407921H2CsjbXiR.png

到这里我们已安装好JupyterHub.

参考资料

https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
https://zero-to-jupyterhub.readthedocs.io/en/latest/
https://jupyterhub.github.io/helm-chart/


<<:  Day 3:747. Largest Number At Least Twice of Others

>>:  D11 新增测试页

Day 9 情报收集 - Information Gathering (netmask)

今天要介绍netmask,是可以让我们自由转换各种不同表示类型的网路地址以及子网遮罩,在划分子网路的...

Day20 跟着官方文件学习Laravel-Breeze

前面我们自己写了登入登出及注册,但其实laravel有提供我们身份验证的套件,这些工具包会自动提供我...

Basic NetSuite Customization Glossary

客制化, Customization 在 NetSuite 内提到 客制化 通常表示的是, 流程变更...

sed - 6 Hold Space简介

前篇回顾 sed - 简介 读取编辑文字档的好工具 sed - 2 Pattern sed - 3 ...

React源码 commit阶段详解

点击进入React源码调试仓库。 当render阶段完成後,意味着在内存中构建的workInProg...