JupyterHub/Deployment: Difference between revisions

From E-Learning Challenge
Jump to navigation Jump to search
Created page with "Diese Seite beschreibt die Implementierung von JupyterHub für die Abschlusspräsentation von Team Hertz. Möglichkeiten für eine allgemeinere Implementation si..."
 
Dockerfile: add matplotlib
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
<small>Zurück zu [[JupyterHub]]</small>
Diese Seite beschreibt die Implementierung von [[JupyterHub]] für die Abschlusspräsentation von [[Hertz|Team Hertz]]. Möglichkeiten für eine allgemeinere Implementation sind auch aufgenommen, z.B. für self-hosting durch die Uni Heidelberg.
Diese Seite beschreibt die Implementierung von [[JupyterHub]] für die Abschlusspräsentation von [[Hertz|Team Hertz]]. Möglichkeiten für eine allgemeinere Implementation sind auch aufgenommen, z.B. für self-hosting durch die Uni Heidelberg.


Line 4: Line 6:


=== Docker ===
=== Docker ===
* 1 Container enthält sowohl JupyterHub als auch die einzelnen Notebooks der Anwender enthält. Jeder Anwender hat einen Account innerhalb des Containers.  Skaliert bis zu 100 Anwender (https://jupyterhub.readthedocs.io/en/stable/index.html).
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/)
** [https://jupyterhub.readthedocs.io/en/stable/quickstart.html]<nowiki>https://jupyterhub.readthedocs.io/en/stable/quickstart.html</nowiki>
** Mögliche Anbieter
*** Microsoft Azure ([https://azure.microsoft.com/en-us/services/container-instances/]https://azure.microsoft.com/en-us/services/container-instances/)
*** Virtuelle Maschine (Docker for Windows, Linux)


Skaliert bis zu 100 Anwender (https://jupyterhub.readthedocs.io/en/stable/index.html).
* https://jupyterhub.readthedocs.io/en/stable/quickstart.html
* Mögliche Anbieter
** Microsoft Azure (https://azure.microsoft.com/en-us/services/container-instances/)
** Virtuelle Maschine (Docker for Windows, Linux)
=== Docker Compose ===
=== Docker Compose ===
Speichert im Gegensatz zur 1-Container Lösung jedes Anwender-Note in einem einzelnen Docker container. Die Notebooks sind standardmäßig nicht permanent, können aber so konfiguriert werden. (https://github.com/jupyterhub/dockerspawner/#data-persistence-and-dockerspawner)
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 (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".
Skaliert nach Angaben von https://opendreamkit.org/2018/10/17/jupyterhub-docker/ auf "mehrere hundert Anwender".
* [https://github.com/jupyterhub/jupyterhub-deploy-docker]https://github.com/jupyterhub/jupyterhub-deploy-docker
* Siehe https://github.com/jupyterhub/jupyterhub-deploy-docker für eine vollständige Implementation, inklusive Speichern von Anwenderdaten und SSL.
* Mögliche Anbieter
* Mögliche Anbieter
** Microsoft Azure ([https://docs.microsoft.com/en-us/azure/cognitive-services/containers/docker-compose-recipe]https://docs.microsoft.com/en-us/azure/cognitive-services/containers/docker-compose-recipe)
** Microsoft Azure (https://docs.microsoft.com/en-us/azure/cognitive-services/containers/docker-compose-recipe)
** Virtuelle Maschine (Docker for Windows, Linux)
** Virtuelle Maschine (Docker for Windows, Linux)


Line 22: Line 25:
Non-plus-ultra Variante mit deutlich komplizierterer Aufsetzung bzw. Konfiguration.
Non-plus-ultra Variante mit deutlich komplizierterer Aufsetzung bzw. Konfiguration.


Skaliert bis zu 10.000 Anwender. (<nowiki>https://jupyterhub.readthedocs.io/en/stable/getting-started/institutional-faq.html</nowiki>)
Skaliert bis zu 10.000 Anwender. (https://jupyterhub.readthedocs.io/en/stable/getting-started/institutional-faq.html)
* Mögliche Anbieter
* Mögliche Anbieter
** Google Kubernetes Engine ([https://cloud.google.com/kubernetes-engine]<nowiki>https://cloud.google.com/kubernetes-engine</nowiki>)
** Google Kubernetes Engine (https://cloud.google.com/kubernetes-engine)
** Azure Kubernetes Service ([https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes]<nowiki>https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes</nowiki>)
** Azure Kubernetes Service (https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes)


=== Virtuelle Maschine ===
=== Virtuelle Maschine ===
Line 32: Line 35:
''Wichtig:'' Bei direkter Installation soll die virtuelle Maschine '''Linux''' verwenden, da JupyterHub Windows nicht unterstützt.
''Wichtig:'' Bei direkter Installation soll die virtuelle Maschine '''Linux''' verwenden, da JupyterHub Windows nicht unterstützt.
* Mögliche Anbieter
* Mögliche Anbieter
** digitalocean Bietet bis zu $1000 Kredit für COVID-19 Projekte (digitalocean.com/community/pages/covid-19)
** digitalocean - Bietet bis zu $1000 Kredit für COVID-19 Projekte (<nowiki>https://digitalocean.com/community/pages/covid-19</nowiki>)
** netcup.de
** netcup.de
** Microsoft Azure Bietet bis zu $100 Kredit für Studenten (Azure for Students)
** 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.
** 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:<pre>
mkdir /etc/jupyterhub
env -C /etc/jupyterhub jupyterhub --generate-config
</pre>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: <pre>
jupyterhub -f /etc/jupyterhub/jupyterhub_config.py</pre>
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:
# Notebook-Server anderer Anwender stoppen bzw. starten;
# 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<pre>
c.Authenticator.admin_users = {'admin1', 'admin2', 'admin3'}
c.JupyterHub.admin_access = True
</pre>
 
== 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.<pre>
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"


== Installation ==
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
</pre>Siehe: https://github.com/fvanmaele/hertz-jupyterhub/blob/master/Dockerfile (Passwörter entsprechen jeweils den Usernames und wurden mit '''mkpasswd''' kodiert)

Latest revision as of 11:54, 2 April 2020

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)