Skip to main content
  • »
  • Instalacja JupyterHub na klastrze Magnum Kubernetes w NSIS Cloud

Instalacja JupyterHub na klastrze Magnum Kubernetes w NSIS Cloud

Notatniki Jupyter to popularna metoda prezentowania kodu aplikacji, a także przeprowadzania eksperymentów eksploracyjnych i analiz w wygodny sposób 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 współdziałać z wygenerowanymi danymi wyjściowymi.

JupyterHub to usługa typu open-source, która tworzy oparte na chmurze serwery notatników Jupyter na żądanie, umożliwiając użytkownikom uruchamianie swoich notatników bez martwienia się o konfigurację i wymagane zasoby.

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

Co będziemy omawiać

  • Uwierzytelnianie w klastrze

  • Uruchom instalację wykresu Jupyterhub Helm

  • Pobieranie szczegółów usługi Jupyterhub

  • Uruchom Jupyterhub na HTTPS

Wymagania wstępne

Nr 1 Konto

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

Nr 2 kubectl uruchomiony

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

Nr 3 Helm gotowy do pracy

Helm to menedżer pakietów dla Kubernetes, jak wyjaśniono w artykule

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

Nr 4 Dostępna zarejestrowana nazwa domeny

Aby zobaczyć wyniki instalacji, powinieneś 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ę tak zdarzyć, że masz już do dyspozycji klaster i że plik konfiguracyjny jest już na miejscu. Innymi słowy, możesz natychmiast wykonać polecenie kubectl.

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

openstack coe cluster config jupyter-cluster

Spowoduje to wyświetlenie polecenia ustawiającego KUBECONFIG env, które jest zmienną wskazującą lokalizację nowo utworzonego klastra, np.

export KUBECONFIG=/home/eouser/config

Uruchom to polecenie.

Krok 2 Zastosowanie wstępnej konfiguracji

OpenStack Magnum domyślnie stosuje pewne ograniczenia bezpieczeństwa dla kapsuł działających w klastrze, zgodnie z praktyką „najmniejszych uprawnień”. JupyterHub będzie wymagał dodatkowych uprawnień do poprawnego działania.

Zaczniemy od utworzenia dedykowanej przestrzeni nazw dla naszych artefaktów JupyterHub Helm:

kubectl create namespace jupyterhub

Następnym krokiem jest utworzenie RoleBinding, który doda magnum:podsecuritypolicy:privileged ClusterRole do ServiceAccount, który zostanie później wdrożony przez JupyterHub Helm chart 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 zastosuj:

kubectl apply -f jupyterhub-rolebinding.yaml

Krok 3 Uruchom instalację wykresu Jupyterhub Helm

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

  • pobrać i zaktualizować repozytorium JupyterHub, oraz

  • zainstalować wykres 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

Jest to 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 do przestrzeni nazw jupyterhub, możemy wyświetlić ich stan i definicje za pomocą standardowych poleceń kubectl.

Aby wyświetlić zasób usług utworzony 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 LoadBalancer, 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.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

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

Najpierw pojawi się ekran logowania. Podaj dowolną kombinację fikcyjnego loginu i hasła, a po chwili JupyterHub zostanie załadowany do przeglądarki:

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

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

Ostrzeżenie

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

Krok 5 Uruchomienie na HTTPS

Wykres JupyterHub Helm umożliwia natywne wdrażanie HTTPS. Po wdrożeniu powyższego wykresu możemy po prostu zaktualizować wykres, aby umożliwić jego obsługę w protokole HTTPS. Pod maską wygeneruje certyfikaty przy użyciu urzędu certyfikacji Let’s Encrypt.

Aby włączyć HTTPS, przygotuj plik do nadpisania konfiguracji, np. jupyter-https-values.yaml z następującą zawartością (dostosuj adres e-mail i domenę do własnych):

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 warunku wstępnym nr 4, powinieneś mieć dostępną zarejestrowaną domenę, abyś mógł teraz wskazać ją na adres, który LoadBalancer dla usługi proxy-public zwrócił powyżej. Upewnij się, że rekordy u rejestratora domeny są poprawnie powiązane. Konkretnie, skojarzyliśmy zestaw rekordów A mysampledomain.info z rekordem 64.225.131.136 (publiczny adres IP naszej usługi). Gdy to zrobimy, JupyterHub będzie obsługiwany przez HTTPS:

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

Co robić dalej

W przypadku środowiska produkcyjnego: zastąpienie fikcyjnego uwierzytelniacza alternatywnym mechanizmem uwierzytelniania, zapewnienie trwałości poprzez np. połączenie z bazą danych Postgres. Kroki te wykraczają poza zakres tego artykułu.