JupyterHub/Deployment: Difference between revisions

From E-Learning Challenge
Jump to navigation Jump to search
m remove bullet
Dockerfile: add matplotlib
 
(9 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>
 
Skaliert bis zu 100 Anwender (https://jupyterhub.readthedocs.io/en/stable/index.html).
* https://jupyterhub.readthedocs.io/en/stable/quickstart.html
* Mögliche Anbieter
* Mögliche Anbieter
** Microsoft Azure ([https://azure.microsoft.com/en-us/services/container-instances/]https://azure.microsoft.com/en-us/services/container-instances/)
** Microsoft Azure (https://azure.microsoft.com/en-us/services/container-instances/)
** Virtuelle Maschine (Docker for Windows, Linux)
** 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 21: 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 31: 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)