快速設置JupyterHub for K8s

Kubernetes已經Release 1.17.0,直接使用kubeadm建立高可用集羣成爲現實。這裏咱們將進一步快速建立並設置JupyterHub for K8s。因爲Helm在2019年已經大幅度更新,安裝方法也有比較大的區別。如下詳述具體步驟。html

一、安裝helm

helm是一個模版化的k8s服務安裝系統,其版本參考以下:python

獲取helm步驟以下:linux

wget https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz
tar -vxf helm-v3.0.2-linux-amd64.tar.gz
sudo cp linux-amd64/helm /usr/local/bin/

二、添加JupyterHub的helm repo

 添加repo的命令以下:git

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!⎈

三、設置JupyteHub

  • 建立一個 32 bytes的隨機數用做security token.。運行下面的命令並複製輸出結果:github

    openssl rand -hex 32
  • 建立並編輯文件 config.yaml。使用 nano editor, 也可使用其它的。shell

    nano config.yaml
  • 將上面的token複製到 config.yaml 文件中,替代 <RANDOM-HEX> 這一部份內容。json

    proxy:
      secretToken: "<RANDOM_HEX>"

 安裝chart,使用配置文件 config.yaml。以下:api

# Suggested values: advanced users of Kubernetes and Helm should feel
# free to use different values.
RELEASE=jhub
NAMESPACE=jhub

helm upgrade --install $RELEASE jupyterhub/jupyterhub \
  --namespace $NAMESPACE  \
  --version=0.8.2 \
  --values config.yaml

 查看pod,咱們將jupyterhub安裝到了jhub命名空間中。瀏覽器

kubectl get pod --namespace jhub

注意:bash

建議 enable autocompletion for kubectl 並設置 --namespace flag:

kubectl config set-context $(kubectl config current-context) --namespace ${NAMESPACE:-jhub}

四、訪問JupyterHub服務

缺省安裝使用LoadBalancer提供對外服務。

找到JupyterHub的服務IP。

運行下面的命令,直到 EXTERNAL-IP of the proxy-public service 可用。

kubectl get service --namespace jhub
獲得:
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
hub            ClusterIP      10.51.243.14    <none>          8081/TCP       1m
proxy-api      ClusterIP      10.51.247.198   <none>          8001/TCP       1m
proxy-public   LoadBalancer   10.51.248.230   104.196.41.97   80:31916/TCP   1m

注意:

這裏 IP for proxy-public 若是顯示太長,考慮使用:

kubectl describe service proxy-public --namespace jhub

爲了使用 JupyterHub,輸入 external IP for the proxy-public 到瀏覽器地址欄。缺省狀況下,可使用任何的username and password 組合進入。

也可使用Proxy或NodePort來提供外部訪問(參考 Kubernetes 1.17.0管理界面Dashboard 2 的設置方法)。

  • 注意:若是升級到最近的python3版本,JupyterHub運行時出現錯誤,Notebook Server沒法啓動,進pod日誌發現提示信息"NoneType",能夠採用下面的方法修復:

kubectl patch deploy -n jhub hub --type json \
--patch '[{"op": "replace", "path": "/spec/template/spec/containers/0/command", "value": ["bash", "-c", "\nmkdir -p ~/hotfix\ncp \
-r /usr/local/lib/python3.6/dist-packages/kubespawner ~/hotfix\nls -R ~/hotfix\npatch ~/hotfix/kubespawner/spawner.py \
<< EOT\n72c72\n<             key=lambda x: x.last_timestamp,\n---\n>             key=lambda x: x.last_timestamp and x.last_timestamp.timestamp() or 0.,\nEOT\n\nPYTHONPATH=$HOME/hotfix \
jupyterhub --config /srv/jupyterhub_config.py --upgrade-db\n"]}]'

再去訪問JupyterHub的服務,恢復正常。

五、更多參考

相關文章
相關標籤/搜索