iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0

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/


上一篇
範例一:使用MNIST資料進行訓練與模型部署
下一篇
說明Jupyterhub config內容
系列文
AI平台初學者工作坊: 從training、tracking到serving30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言