Skip to main content

Jak zainstalować JupyterHub na Magnum Kubernetes Cluster w NSIS Cloud

Notatniki Jupyter to popularna metoda prezentowania kodu aplikacji, a także przeprowadzania w wygodny sposób eksperymentów badawczych i analiz z poziomu przeglądarki internetowej. Z poziomu notatnika Jupyter można uruchomić kod, zobaczyć wygenerowane wyniki w atrakcyjnej formie wizualnej, a często także interaktywnie korzystać z wygenerowanych danych wyjściowych.

JupyterHub to usługa typu open-source, która tworzy na żądanie oparte na chmurze serwery notatników Jupyter, umożliwiając użytkownikom uruchamianie swoich notatników bez konieczności zajmowania się konfiguracją oraz wymaganymi zasobami.

Szybkie wdrożenie JupyterHub za pomocą usługi Magnum Kubernetes, którą przedstawiamy w tym artykule, jest bardzo proste.

Co zostanie omówione?

  • Uwierzytelnianie w klastrze

  • Uruchamiania instalacji wykresu Helm Jupyterhub

  • Pobieranie danych szczegółowych usługi Jupyterhub

  • Uruchamianie Jupyterhub na HTTPS

Wymagania wstępne

Nr 1 Konto

Jest wymagane konto hostingowe NSIS z dostępem do interfejsu Horizon: https://horizon.cloudferro.com.

Nr 2 Uruchomiony i działający kubectl

Więcej informacji można znaleźć w artykule Jak uzyskać dostęp do klastra Kubernetes po wdrożeniu przy użyciu Kubectl na NSIS OpenStack Magnum?.

Nr 3 Działający Helm

Helm jest menedżerem pakietów dla Kubernetes, jak wyjaśniono w artykule

Wdrażanie Helm Charts na klastrach Magnum Kubernetes w chmurze NSIS

Nr 4 Dostępna zarejestrowana nazwa domeny

Aby zobaczyć wyniki instalacji, musisz mieć zarejestrowaną własną domenę. Zostanie ona użyta w kroku 5 do uruchomienia JupyterHub na HTTPS w przeglądarce.

Krok 1 Uwierzytelnienie w klastrze

Przede wszystkim musimy uwierzytelnić się w klastrze. Może się zdarzyć, że masz już dostępny klaster, a plik konfiguracyjny już istnieje. W takiej sytuacji możesz od razu wykonać polecenie kubectl.

Można również utworzyć nowy klaster i nazwać go na przykład jupyter-cluster, jak wyjaśniono w sekcji Wymaganie wstępne nr 2. W takim przypadku, aby utworzyć plik konfiguracyjny w bieżącym katalogu roboczym, należy uruchomić z komputera lokalnego następujące polecenie:

openstack coe cluster config jupyter-cluster

Spowoduje to wyświetlenie polecenia ustawiającego env KUBECONFIG, czyli jest zmienną wskazującą lokalizację nowo utworzonego klastra, na przykład

export KUBECONFIG=/home/eouser/config

Uruchom to polecenie.

Krok 2 Zastosowanie wstępnej konfiguracji

OpenStack Magnum domyślnie stosuje pewne ograniczenia w zasadach bezpieczeństwa dla podów działających w klastrze zgodnie z praktyką „najmniejszych uprawnień”. JupyterHub będzie wymagać dodatkowych uprawnień, aby działać poprawnie.

Zacznijmy od stworzenia dedykowanej przestrzeni nazw dla artefaktów Helm JupyterHub:

kubectl create namespace jupyterhub

Następnym krokiem jest utworzenie RoleBinding, które doda rolę klastra magnum:podsecuritypolicy:privileged do konta usługi, która zostanie później wdrożona przez wykres Helm JupyterHub w przestrzeni nazw jupyterhub. Rola ta włączy dodatkowe uprawnienia do tego konta usługi. Utwórz plik jupyterhub-rolebinding.yaml o następującej zawartości:

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

Następnie wykonaj polecenie:

kubectl apply -f jupyterhub-rolebinding.yaml

Krok 3 Uruchomienie instalacji wykresu Helm Jupyterhub

Aby zainstalować wykres Helm z domyślnymi ustawieniami, użyj poniższego zestawu poleceń. Spowoduje on:

  • pobranie i zaktualizowanie repozytorium JupyterHub, oraz

  • zainstalowanie wykresu w przestrzeni nazw 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

Poniżej przedstawiono wynik udanej instalacji wykresu Helm:

../_images/installation_done1.png

Krok 4 Uzyskanie szczegółowych informacji o usłudze

Gdy wszystkie zasoby Helm zostaną wdrożone w przestrzeni nazw jupyterhub, można wyświetlić ich stan i definicje za pomocą standardowych poleceń kubectl.

Aby wyświetlić zasoby usług utworzone przez Helm, wykonaj następujące polecenie:

kubectl get services -n jupyterhub

Utworzono kilka zasobów i kilka usług. Dla nas najbardziej interesująca jest usługa proxy-public typu load balancer, która udostępnia JupyterHub w sieci publicznej:

$ kubectl get services -n jupyterhub
NAME           TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE
hub            ClusterIP      10.254.187.150   <none>         8081/TCP       6m48s
proxy-api      ClusterIP      10.254.107.200   <none>         8001/TCP       6m48s
proxy-public   LoadBalancer   10.254.74.19     46.60.18.178   80:31403/TCP   6m48s

Zewnętrzny adres IP usługi proxy-public będzie początkowo w stanie <pending>. Wykonaj ponownie to polecenie, a po 2-5 minutach zobaczysz adres Floating IP przypisany do usługi. Następnie można wpisać ten adres IP w przeglądarce.

Zanim uruchomimy Jupyterhub to najpierw zapewnijmy mu odpowiednią konfigurację połączenia poda na którym będzie nasz user z hub. W tym celu stwórzmy plik values.yaml. Potem umieśćmy w nim to:

scheduling:
  userScheduler:
    enabled: false
 singleuser:
   defaultUrl: /lab

Następnie zajmimy się Network Policy, wpisując tą komendę pozwalamy na połączenie poda do hub bez większych problemów.

kubectl delete networkpolicy -n jupyterhub --all
kubectl rollout restart deploy/hub -n jupyterhub
kubectl rollout restart deploy/proxy -n jupyterhub

Na koniec wpisz tą komendę aby ustawienia values,yaml zostały wprowadzone na klaster z JupyterHub. .. code:

helm upgrade jupyterhub jupyterhub/jupyterhub   --version 3.0.0   -n jupyterhub   -f values.yaml

Ostrzeżenie

Jeżeli podczas helm install lub helm upgrade pojawi się np. taki błąd,

Error: UPGRADE FAILED: chart requires kubeVersion: >=1.28.0-0 which is incompatible with Kubernetes v1.27.11, oznacza to, że wybrana wersja Helm charta JupyterHub wymaga nowszej wersji Kubernetes niż ta, która działa w klastrze. W takiej sytuacji należy najpierw sprawdzić wersję Kubernetes w klastrze i ustalić, jakie API jest dostępne. Następnie należy wyświetlić listę dostępnych wersji charta JupyterHub i na tej podstawie dobrać wersję charta zgodną z wersją Kubernetes używaną w klastrze. Wybrana wersja charta musi być jawnie wskazana podczas instalacji lub aktualizacji, aby Helm nie próbował użyć domyślnej, nowszej wersji niekompatybilnej z API klastra.

Po wpisaniu adresu external-ip najpierw zostanie wyświetlony ekran logowania. Podaj dowolną fikcyjną kombinację loginu i hasła, a po chwili JupyterHub zostanie załadowany do przeglądarki:

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

JupyterHub działa teraz na protokole HTTP z bezpośrednim adresem IP i można z niego korzystać bez zmian.

Ostrzeżenie

Jeśli w następnym kroku uruchomisz JupyterHub na HTTPS, nie będzie można uruchomić go jako usługi HTTP, chyba że zostanie ponownie uruchomiony.

Krok 5 Uruchomienie na HTTPS

Wykres Helm JupyterHub umożliwia natywne wdrażanie HTTPS. Po wdrożeniu tego wykresu możemy po prostu go zaktualizować, aby umożliwić jego obsługę przez HTTPS. Wykres wygeneruje w tle certyfikaty za pomocą urzędu certyfikacji Let’s Encrypt.

Aby włączyć HTTPS, przygotuj plik służący do zastąpienia konfiguracji, na przykład jupyter-https-values.yaml z następującą zawartością (dostosuj adres e-mail i domenę, używając własnych danych):

jupyter-https-values.yaml

proxy:
  https:
    enabled: true
    hosts:
      - mysampledomain.info
    letsencrypt:
      contactEmail: pturkowski@cloudferro.com

Następnie zaktualizuj wykres za pomocą następującego polecenia upgrade:

helm upgrade -n jupyterhub jupyterhub jupyterhub/jupyterhub -f jupyter-https-values.yaml

Jak wspomniano w sekcji Wymaganie wstępne nr 4, musisz mieć dostępną zarejestrowaną domenę, aby można było teraz wskazać ją jako adres, który zwrócił powyżej load balancer dla usługi proxy-public. Upewnij się, że rekordy u rejestratora domeny są poprawnie powiązane. W tym przypadku skojarzyliśmy zestaw rekordów A mysampledomain.info z rekordem 46.60.18.178 (publiczny adres IP naszej usługi). Po wykonaniu tej czynności JupyterHub będzie obsługiwany przez protokół HTTPS:

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

Co można zrobić dalej?

W przypadku środowiska produkcyjnego zastąp fikcyjne uwierzytelnianie alternatywnym mechanizmem uwierzytelniania oraz zapewnij trwałość, na. Przykład przez połączenie z bazą danych Postgres. Opis tych kroków wykracza poza zakres tego artykułu.