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:
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:
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:
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.