JupyterHub/Deployment: Difference between revisions
m formatting |
Dockerfile: add matplotlib |
||
(8 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/) | ||
* | |||
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 ( | ** 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. | 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". | ||
* | * 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 ( | ** 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. ( | 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 ( | ** Google Kubernetes Engine (https://cloud.google.com/kubernetes-engine) | ||
** Azure Kubernetes Service ( | ** 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. | ||
== Installation == | == 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" | |||
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).
- 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
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".
- Siehe https://github.com/jupyterhub/jupyterhub-deploy-docker für eine vollständige Implementation, inklusive Speichern von Anwenderdaten und SSL.
- Mögliche Anbieter
- Microsoft Azure (https://docs.microsoft.com/en-us/azure/cognitive-services/containers/docker-compose-recipe)
- Virtuelle Maschine (Docker for Windows, Linux)
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)
- Mögliche Anbieter
- Google Kubernetes Engine (https://cloud.google.com/kubernetes-engine)
- Azure Kubernetes Service (https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes)
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:
- 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
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)