JupyterHub

JupyterHub - решение для многопользовательских сред.

  • HTTP-proxy, осуществляющий маршрутизацию запросов пользователей
  • HUB, который осуществляет аутентификацию пользователей (с помощью Authenticator) и управление индивидуальными jupyter-notebook (с помощью Spawners)

При входе пользователя для него создается Pod (с именем jupyter-username), в котором и будет работать пользователь. Для этого pod'а создается PersistentVolumeClaim, соотвественно нужен PersistentVolume.

https://z2jh.jupyter.org/en/latest/setup-jupyterhub/setup-jupyterhub.html
https://hub.docker.com/r/jupyterhub/k8s-hub/tags
https://zero-to-jupyterhub.readthedocs.io/en/latest/administrator/authentication.html
https://ipython-books.github.io/36-introducing-jupyterlab/

kubectl create ns jhub
helm repo add jupyterhub https://jupyterhub.github.io/helm-chart/
helm repo update
echo -e "proxy:\n  secretToken: '`openssl rand -hex 32`'" > ./jhub_config.yaml
helm upgrade --install jhub jupyterhub/jupyterhub --namespace jhub --version=0.9.0-beta.2 --values jhub_config.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: hub-db-dir-pv
  namespace: jhub
  labels:
    app: jupyterhub
    component: hub
spec:
  capacity:
    storage: 20Gi
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: "/kubernetes_volumes/jhub/hub-db-dir-pv"
    type: Directory
  persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jhub-admin-pv
  namespace: jhub 
  labels:
    app: jupyterhub
    component: singleuser-server
spec:
  capacity:
    storage: 20Gi
  accessModes:   
  - ReadWriteOnce
  hostPath:
    path: "/kubernetes_volumes/jhub/jhub-admin-pv"
    type: Directory
  persistentVolumeReclaimPolicy: Retain
Exception in Future <Task finished coro=<BaseHandler.spawn_single_user.<locals>.finish_user_spawn() done, defined at /usr/local/lib/python3.6/dist-packages/jupyterhub/handlers/base.py:629> exception=TypeError("'<' not supported between instances of 'datetime.datetime' and 'NoneType'",)> after timeout

Такая ошибка возникает, если запускать версию 0.8.2 в кластере kubernetes версии выше, чем 0.14. Решение для версии 0.8.2 можно найти тут: https://github.com/jupyterhub/kubespawner/issues/354
Либо можно обновить jhub до более новой версии :

 helm upgrade jhub jupyterhub/jupyterhub --namespace jhub --version=0.9.0-beta.2

Jupyter Notebook on kubernetes

Как выбрать подходящий docker-image: https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html
Я буду разворачивать jupyter/scipy-notebook.

kind: Namespace
apiVersion: v1
metadata:
  name: jupyter-notebook
  labels:
    name: jupyter-notebook
---
apiVersion: apps/v1
kind: Deployment
metadata:    
  name: jupyter-notebook
  namespace: jupyter-notebook
spec:
  replicas: 1
  selector:  
    matchLabels:
      app: jupyter-notebook
  template:  
    metadata:
      labels:
        app: jupyter-notebook
    spec:
      containers:    
        - name: jupyter-notebook
          image: jupyter/scipy-notebook:latest
---
apiVersion: v1
kind: Service
metadata:
  name: jupyter-notebook-http
  namespace: jupyter-notebook
spec:
  selector: 
    app: jupyter-notebook
  type: ClusterIP
  ports:
  - name: http
    port: 8888
    protocol: TCP
    targetPort: 8888
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
  name: jupyter-notebook-ingress
  namespace: jupyter-notebook
spec:
  rules:
  - host: jpn.autosys.tk
    http:
      paths:
      - backend:
          serviceName: jupyter-notebook-http
          servicePort: 8888
        path: /
  tls:
  - hosts:
    - jpn.autosys.tk
    secretName:  jpn-autosys-tk-tls
Enter your comment. Wiki syntax is allowed:
 
  • devops/deploy_jupyterhub_on_kubernetes.txt
  • Last modified: 2020/01/17 07:44
  • by admin