Installation von JupyterHub auf Magnum Kubernetes Cluster auf der EO-Lab FRA1-1 Cloud
Jupyter-Notizbücher sind eine beliebte Methode, um Anwendungscode zu präsentieren sowie Experimente und Analysen bequem über einen Webbrowser auszuführen. In einem Jupyter-Notebook kann man Code ausführen, die generierten Ergebnisse in attraktiver visueller Form sehen und oft auch interaktiv mit der generierten Ausgabe interagieren.
JupyterHub ist ein Open-Source-Dienst, der Cloud-basierte Jupyter-Notebook-Server auf Abruf bereitstellt und es den Benutzern ermöglicht, ihre Notebooks auszuführen, ohne sich um die Einrichtung und die erforderlichen Ressourcen kümmern zu müssen.
Es ist einfach, JupyterHub mit Hilfe des Magnum Kubernetes-Dienstes, den wir in diesem Artikel vorstellen, schnell auf FRA1-1 bereitzustellen.
Was wir behandeln werden
Authentifizierung beim Cluster
Jupyterhub Helm Chart-Installation ausführen
Abrufen von Details des Jupyterhub-Dienstes
Jupyterhub über HTTPS ausführen
Voraussetzungen
No. 1 Konto
Sie benötigen ein Hosting-Konto mit Zugriff auf die Horizon-Schnittstelle: https://cloud.fra1-1.cloudferro.com/auth/login/?next=/.
Nr. 2 kubectl ist einsatzbereit
Weitere Anweisungen finden Sie unter Zugriff auf Kubernetes-Cluster nach der Bereitstellung mit Kubectl auf EO-Lab OpenStack Magnum
Nr. 3 Helm einsatzbereit
Helm ist ein Paketmanager für Kubernetes, wie im Artikel
Einsatz von Helm Charts auf Magnum Kubernetes-Clustern auf der EO-Lab FRA1-1 Cloud
Nr. 4 Ein registrierter Domainname muss vorhanden sein
Um die Ergebnisse der Installation zu sehen, sollten Sie über eine eigene registrierte Domain verfügen. Sie werden sie in Schritt 5 verwenden, um JupyterHub über HTTPS in einem Browser auszuführen.
Schritt 1 Authentifizieren Sie sich bei dem Cluster
Zunächst einmal müssen wir uns beim Cluster authentifizieren. Es kann sein, dass Sie bereits über einen Cluster verfügen und dass die Konfigurationsdatei bereits vorhanden ist. Dann können Sie den Befehl kubectl sofort ausführen.
Sie können auch einen neuen Cluster erstellen und ihn z.B. jupyter-cluster nennen, wie in Voraussetzung Nr. 2 erläutert. In diesem Fall führen Sie von Ihrem lokalen Rechner aus den folgenden Befehl aus, um eine Konfigurationsdatei im aktuellen Arbeitsverzeichnis zu erstellen:
openstack coe cluster config jupyter-cluster
Dies gibt den Befehl zum Setzen von KUBECONFIG env aus, eine Variable, die auf den Speicherort Ihres neu erstellten Clusters verweist, z. B.
export KUBECONFIG=/home/eouser/config
Führen Sie den o.a. Befehl aus.
Schritt 2 Vorläufige Konfiguration anwenden
OpenStack Magnum wendet standardmäßig bestimmte Sicherheitsbeschränkungen für Pods an, die auf dem Cluster laufen, entsprechend der Praxis der „geringsten Privilegien“. JupyterHub benötigt einige zusätzliche Privilegien, um korrekt zu laufen.
Wir beginnen mit der Erstellung eines dedizierten Namespace für unsere JupyterHub-Helm-Artefakte:
kubectl create namespace jupyterhub
Im nächsten Schritt wird eine RoleBinding erstellt, die dem ServiceAccount eine magnum:podsecuritypolicy:privileged ClusterRole hinzufügt, die später von JupyterHub Helm chart im jupyterhub-Namensraum bereitgestellt wird. Diese Rolle ermöglicht zusätzliche Privilegien für diesen Service-Account. Erstellen Sie eine Datei jupyterhub-rolebinding.yaml mit dem folgenden Inhalt:
jupyterhub-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: jupyterhub-rolebinding
namespace: jupyterhub
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:serviceaccounts
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: magnum:podsecuritypolicy:privileged
Dann anwenden mit: .. code:
kubectl apply -f jupyterhub-rolebinding.yaml
Schritt 3 Ausführen der Jupyterhub Helm-Diagramminstallation
Um Helm Chart mit den Standardeinstellungen zu installieren, verwenden Sie die unten aufgeführten Befehle zum
Herunterladen und Aktualisieren des JupyterHub-Repositorys und
Installieren der Chart im Namespace jupyterhub.
helm repo add jupyterhub https://hub.jupyter.org/helm-chart/
helm repo update
helm install jupyterhub jupyterhub/jupyterhub --version 2.0.0 --namespace jupyterhub
Dies ist das Ergebnis einer erfolgreichen Installation der Helm-Chart:

Schritt 4 Abrufen von Details zu Ihrem Dienst
Sobald alle Helm-Ressourcen im jupyterhub-Namensraum bereitgestellt wurden, können wir ihren Status und ihre Definitionen mit den Standardbefehlen kubectl anzeigen.
Um die von Helm erstellte Serviceressource anzuzeigen, führen Sie den folgenden Befehl aus:
kubectl get services -n jupyterhub
Es wurden mehrere Ressourcen und einige Dienste erstellt. Der für uns interessanteste ist der proxy-public-Dienst vom Typ LoadBalancer, der JupyterHub dem öffentlichen Netzwerk zur Verfügung stellt:
$ kubectl get services -n jupyterhub
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hub ClusterIP 10.254.209.133 <none> 8081/TCP 18d
proxy-api ClusterIP 10.254.86.239 <none> 8001/TCP 18d
proxy-public LoadBalancer 10.254.168.141 64.225.131.136 80:31027/TCP 18d
Die externe IP des proxy-public-Dienstes befindet sich zunächst im Status <pending>. Aktualisieren Sie diesen Befehl und nach 2-5 Minuten sehen Sie die dem Dienst zugewiesene freie IP. Sie können diese IP dann in den Browser eingeben.
Zunächst wird der Anmeldebildschirm angezeigt. Geben Sie eine beliebige Kombination aus Dummy-Login und Passwort ein und nach einem Moment wird JupyterHub in den Browser geladen:

JupyterHub funktioniert jetzt über HTTP und eine direkte IP-Adresse und kann so verwendet werden.
Warnung
Wenn Sie im nächsten Schritt einen JupyterHub über HTTPS laufen lassen, können Sie ihn nicht als HTTP-Dienst ausführen, solange er nicht neu gestartet wurde.
Schritt 5 Mit HTTPS ausführen
Das JupyterHub Helm-Diagramm ermöglicht HTTPS-Einsätze nativ. Nachdem wir das Diagramm oben bereitgestellt haben, können wir das Diagramm einfach aktualisieren, um die Bereitstellung über HTTPS zu ermöglichen. Im Hintergrund werden die Zertifikate mit der Let’s Encrypt-Zertifizierungsstelle generiert.
Um HTTPS zu aktivieren, bereiten Sie eine Datei für die Konfigurationsüberschreibung vor, z. B. jupyter-https-values.yaml mit dem folgenden Inhalt (passen Sie die E-Mail und die Domäne an Ihre eigenen an):
jupyter-https-values.yaml
proxy:
https:
enabled: true
hosts:
- mysampledomain.info
letsencrypt:
contactEmail: [email protected]
Aktualisieren Sie dann die Karte mit dem folgenden Befehl upgrade:
helm upgrade -n jupyterhub jupyterhub jupyterhub/jupyterhub -f jupyter-https-values.yaml
Wie in Voraussetzung Nr. 4 erwähnt, sollten Sie eine freie registrierte Domain haben, die nun auf die Adresse zeigen kann, die der LoadBalancer für den Dienst proxy-public oben zurückgegeben hat. Bitte stellen Sie sicher, dass die Einträge in Ihrem Domain-Registrar korrekt zugeordnet sind. Konkret haben wir den A-Datensatz von mysampledomain.info mit dem Datensatz 64.225.131.136 (die öffentliche IP-Adresse unseres Dienstes) verknüpft. Sobald dies geschehen ist, wird der JupyterHub über HTTPS bereitgestellt:

Was als nächstes zu tun ist
Für die Produktionsumgebung: Ersetzen Sie den Dummy-Authentifikator durch einen alternativen Authentifizierungsmechanismus, stellen Sie Persistenz sicher, indem Sie z.B. eine Verbindung zu einer Postgres-Datenbank herstellen. Diese Schritte würden den Rahmen dieses Artikels sprengen.