Installation von JupyterHub auf Magnum Kubernetes Cluster auf der CODE-DE 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 CODE-DE 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 CODE-DE 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:

../_images/installation_done.png

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:

../_images/image2023-1-13_13-6-5.png

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:

../_images/image2023-2-6_15-25-4.png

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.