JupyterHub 배포
이 섹션에서는 Kubernetes 클러스터에 JupyterHub를 배포하기 위해 완료해야 하는 작업에 대해 설명합니다.
|
Kubernetes 외의 플랫폼에도 JupyterHub를 배포하는 것이 가능합니다. Kubernetes 이외의 플랫폼에 JupyterHub를 배포하는 것은 이 솔루션의 범위를 벗어납니다. |
필수 조건
이 섹션에 설명된 배포 연습을 수행하기 전에 다음 작업을 이미 수행했다고 가정합니다.
-
이미 작동하는 Kubernetes 클러스터가 있습니다.
-
Kubernetes 클러스터에 NetApp Trident 이미 설치하고 구성했습니다. Trident 에 대한 자세한 내용은 다음을 참조하세요."Trident 문서" .
Helm 설치
JupyterHub는 Kubernetes의 인기 있는 패키지 관리자인 Helm을 사용하여 배포됩니다. JupyterHub를 배포하기 전에 Kubernetes 제어 노드에 Helm을 설치해야 합니다. Helm을 설치하려면 다음을 따르세요. "설치 지침" 공식 Helm 문서에서.
기본 Kubernetes StorageClass 설정
JupyterHub를 배포하기 전에 Kubernetes 클러스터 내에서 기본 StorageClass를 지정해야 합니다. 클러스터 내에서 기본 StorageClass를 지정하려면 다음 지침을 따르세요."Kubeflow 배포" 부분. 클러스터 내에서 기본 StorageClass를 이미 지정한 경우 이 단계를 건너뛸 수 있습니다.
JupyterHub 배포
위의 단계를 완료하면 이제 JupyterHub를 배포할 준비가 되었습니다. JupyterHub를 배포하려면 다음 단계가 필요합니다.
JupyterHub 배포 구성
배포하기 전에 각자의 환경에 맞게 JupyterHub 배포를 최적화하는 것이 좋습니다. config.yaml 파일을 만들고 Helm 차트를 사용하여 배포하는 동안 활용할 수 있습니다.
예제 config.yaml 파일은 다음에서 찾을 수 있습니다. https://github.com/jupyterhub/zero-to-jupyterhub-k8s/blob/HEAD/jupyterhub/values.yaml
|
이 config.yaml 파일에서 NetApp Trident StorageClass에 대한 (singleuser.storage.dynamic.storageClass) 매개변수를 설정할 수 있습니다. 이는 개별 사용자 작업 공간에 대한 볼륨을 프로비저닝하는 데 사용되는 스토리지 클래스입니다. |
공유 볼륨 추가
모든 JupyterHub 사용자를 위한 공유 볼륨을 사용하려면 *config.yaml*을 적절히 조정하면 됩니다. 예를 들어, jupyterhub-shared-volume이라는 공유 PersistentVolumeClaim이 있는 경우 다음과 같이 모든 사용자 Pod에서 /home/shared로 마운트할 수 있습니다.
singleuser:
storage:
extraVolumes:
- name: jupyterhub-shared
persistentVolumeClaim:
claimName: jupyterhub-shared-volume
extraVolumeMounts:
- name: jupyterhub-shared
mountPath: /home/shared
|
이는 선택 사항이며, 귀하의 필요에 맞게 이러한 매개변수를 조정할 수 있습니다. |
Helm Chart로 JupyterHub 배포
Helm에 JupyterHub Helm 차트 저장소를 알립니다.
helm repo add jupyterhub https://hub.jupyter.org/helm-chart/
helm repo update
다음과 같은 출력이 표시됩니다.
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "jupyterhub" chart repository
Update Complete. ⎈ Happy Helming!⎈
이제 config.yaml이 포함된 디렉토리에서 다음 명령을 실행하여 config.yaml에 의해 구성된 차트를 설치하세요.
helm upgrade --cleanup-on-fail \
--install my-jupyterhub jupyterhub/jupyterhub \
--namespace my-namespace \
--create-namespace \
--values config.yaml
|
이 예에서는: |
<helm-release-name>은 my-jupyterhub로 설정되며, 이는 JupyterHub 릴리스의 이름이 됩니다. <k8s-namespace>는 JupyterHub를 설치하려는 네임스페이스인 my-namespace로 설정됩니다. --create-namespace 플래그는 네임스페이스가 아직 존재하지 않을 경우 네임스페이스를 생성하는 데 사용됩니다. --values 플래그는 원하는 구성 옵션이 포함된 config.yaml 파일을 지정합니다.
배포 확인
2단계가 실행되는 동안 다음 명령을 실행하면 포드가 생성되는 것을 볼 수 있습니다.
kubectl get pod --namespace <k8s-namespace>
허브와 프록시 포드가 실행 상태로 전환될 때까지 기다리세요.
NAME READY STATUS RESTARTS AGE
hub-5d4ffd57cf-k68z8 1/1 Running 0 37s
proxy-7cb9bc4cc-9bdlp 1/1 Running 0 37s
JupyterHub에 접속하세요
JupyterHub에 접속하는 데 사용할 수 있는 IP를 찾으세요. 예제 출력과 같이 proxy-public 서비스의 EXTERNAL-IP를 사용할 수 있을 때까지 다음 명령을 실행합니다.
|
config.yaml 파일에서 NodePort 서비스를 사용했는데, 설정(예: LoadBalancer)에 따라 환경에 맞게 조정할 수 있습니다. |
kubectl --namespace <k8s-namespace> get service proxy-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
proxy-public NodePort 10.51.248.230 104.196.41.97 80:30000/TCP 1m
JupyterHub를 사용하려면 프록시-공개 서비스의 외부 IP를 브라우저에 입력하세요.