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