JupyterHub/Deployment

From E-Learning Challenge
Revision as of 12:54, 2 April 2020 by Hertz-ferdinand (talk | contribs) (Dockerfile: add matplotlib)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Zurück zu JupyterHub

Diese Seite beschreibt die Implementierung von JupyterHub für die Abschlusspräsentation von Team Hertz. Möglichkeiten für eine allgemeinere Implementation sind auch aufgenommen, z.B. für self-hosting durch die Uni Heidelberg.

Infrastruktur

Docker

1 Container enthält sowohl JupyterHub als auch die einzelnen Notebooks der Anwender enthält. Jeder Anwender hat einen Account innerhalb des Containers. Anwenderdaten können mit Docker Volumes erhalten werden. (https://docs.docker.com/storage/volumes/)

Skaliert bis zu 100 Anwender (https://jupyterhub.readthedocs.io/en/stable/index.html).

Docker Compose

Speichert im Gegensatz zur 1-Container Lösung jedes Anwender-Note in einem einzelnen Docker container. Anwenderdaten können mit Docker Volumes erhalten werden.(https://github.com/jupyterhub/dockerspawner/#data-persistence-and-dockerspawner)

Skaliert nach Angaben von https://opendreamkit.org/2018/10/17/jupyterhub-docker/ auf "mehrere hundert Anwender".

Kubernetes

Non-plus-ultra Variante mit deutlich komplizierterer Aufsetzung bzw. Konfiguration.

Skaliert bis zu 10.000 Anwender. (https://jupyterhub.readthedocs.io/en/stable/getting-started/institutional-faq.html)

Virtuelle Maschine

Jupyterhub kann entweder direkt installiert werden (vgl. Docker, 1 Container) oder als Basis für Docker bzw. Kubernetes verwendet werden.

Wichtig: Bei direkter Installation soll die virtuelle Maschine Linux verwenden, da JupyterHub Windows nicht unterstützt.

  • Mögliche Anbieter
    • digitalocean - Bietet bis zu $1000 Kredit für COVID-19 Projekte (https://digitalocean.com/community/pages/covid-19)
    • netcup.de
    • Microsoft Azure - Bietet bis zu $100 Kredit für Studenten (Azure for Students)
    • URZ (self-hosted, Uni HD) - Nach Angaben von Dr. Koethe würde das URZ einen Server zur Verfügung stellen, falls JupyterHub gut ankommt.

Konfiguration

Eine dokumentierte Konfigurationsdatei kann mit:

mkdir /etc/jupyterhub
env -C /etc/jupyterhub jupyterhub --generate-config

angelegt werden. Die Konfiguration wird nach jupyter_config.py geschrieben in dem Verzeichnis wo jupyterhub ausgeführt wird, in diesem Fall /etc/jupyterhub/jupyter_config.py. Diese Datei soll dann mit -f referenziert werden:

jupyterhub -f /etc/jupyterhub/jupyterhub_config.py

Siehe: https://jupyterhub.readthedocs.io/en/stable/getting-started/config-basics.html

Anwender (Studenten)

Aus Anwendersicht handelt es sich um reguläre Jupyter notebooks.

Administratoren (Tutoren)

Administratoren in JupyterHub können zwei Aufgaben übernehmen:

  1. Notebook-Server anderer Anwender stoppen bzw. starten;
  2. sich anmelden bei Server anderer Anwender (z.B. für Code-Änderungen)

Die zweite Aufgabe muss explizit eingeschaltet werden (admin_access = True). Siehe: https://jupyterhub.readthedocs.io/en/stable/getting-started/authenticators-users-basics.html

c.Authenticator.admin_users = {'admin1', 'admin2', 'admin3'}
c.JupyterHub.admin_access = True

Installation (Demo)

Zu Demo-Zwecken werden nur wenige Anwender benötigt und müssen keine Daten dauerhaft gespeichert werden. Wir haben uns deshalb für eine einfache #Docker Variante entschieden. Nach https://github.com/jupyterhub/jupyterhub/issues/3007 fehlten einige Pakete; diese haben wir nachträglich installiert.

FROM jupyterhub/jupyterhub:latest

# Add notebook modules
RUN pip install notebook
RUN pip install numpy scipy matplotlib

# Generate default configuration
RUN mkdir /etc/jupyterhub
RUN env -C /etc/jupyterhub jupyterhub --generate-config

# Add sample users
RUN useradd -m user1 -s /bin/bash -p "IBYPkWyNvQ4Yo"
RUN useradd -m user2 -s /bin/bash -p "AgFd43c9zUDwc"
RUN useradd -m user3 -s /bin/bash -p "ZilU8izBUiOpc"

# Add sample admin users
RUN useradd -m admin1 -s /bin/bash -p "ChFOlpG5lYZ22"
RUN useradd -m admin2 -s /bin/bash -p "zek/wLLX0E.eQ"
RUN useradd -m admin3 -s /bin/bash -p "KXUP4Vp8iNfEI"

RUN echo "c.Authenticator.admin_users = {'admin1', 'admin2', 'admin3'}" \
    >> /etc/jupyterhub/jupyterhub_config.py
RUN echo "c.JupyterHub.admin_access = True" >> /etc/jupyterhub/jupyterhub_config.py

Siehe: https://github.com/fvanmaele/hertz-jupyterhub/blob/master/Dockerfile (Passwörter entsprechen jeweils den Usernames und wurden mit mkpasswd kodiert)