쿠버네티스에 JupyterHub 구성하기
[배경]
회사에서 쿠버네티스(Kubernetes)를 이용해서 분석 환경을 구성하고 있습니다. 회사에서는 쿠버네티스를 Iaas(Infra as a service)를 제공하고, 각 팀에서는 본인의 팀 상황에 맞게 환경을 구축하는거죠.
제가 소속된 팀에서는 최근 JupyterHub를 도입하기로 결정했는데요. 그 이유는 3가지가 있습니다.
- Spark를 편리하게 사용하기 위해 노트북 환경이 필요함.
- 보안 설정을 위해 이미지를 따로 빌드해야 함.
- VSCode에서 SSH로 연결해서 사용 가능하도록 각자의 Instance(Pod)을 따로 구성해야 함.
Spark를 사용하기에는 Zeppelin이 더 편리한 부분이 있지만 특히 보안 이슈와 VSCode 접근 목적으로 결국 JupyterHub를 사용하기로 결정했습니다.
그리고 쿠버네티스의 패키지 도구인 헬름(Helm)을 이용하면 정말 쉽게 서비스를 배포할 수 있는데, JupyterHub에서는 자체적으로 헬름 차트(Chart)를 지원합니다.
[배포]
헬름을 이용하면 JupyterHub의 배포는 정말 쉽습니다.
1. config.yaml 정의
JupyterHub를 커스터마이징하기 위해 config.yaml를 정의해야 합니다.
참고로 {}로 적혀있는 부분은 직접 적어줘야 하는 부분이고, 간단한 구성에 필요없는 설정들은 제외한 점은 참고해주세요!
## config.yaml # 레퍼런스 참고 # https://zero-to-jupyterhub.readthedocs.io/en/stable/resources/reference.html # https://github.com/jupyterhub/zero-to-jupyterhub-k8s/blob/1.1.3/jupyterhub/values.yaml ingress: # 외부와 연결을 위한 Ingress 설정 enabled: true singleuser: # 개인마다 JupyterLab이 생성될 때의 설정 startTimeout: 600 defaultUrl: "/lab" cull: enabled: false hub: # Hub Control Panel 설정 networkPolicy: interNamespaceAccessLabels: accept extraConfig: httpTimeout: | c.KubeSpawner.http_timeout = 3000
2. Helm을 이용한 설치
## helm repo 추가 helm repo add jupyterhub https://jupyterhub.github.io/helm-chart/ helm repo update ## helm chart 설치 helm upgrade --cleanup-on-fail \ --install test-jupyterhub jupyterhub/jupyterhub \ --namespace default \ --version=1.2.0 \ --values config.yaml
설치가 끝났습니다!
3. 접속
## 접속할 서비스 확인 kubectl --namespace=default get svc proxy-public ## 포트 포워딩 kubectl port-forward service/proxy-public 8088:80
포트 포워딩이 정상적으로 됐다면 http://localhost:8088/로 JupyterHub 접속이 가능합니다.
접근이 가능한 계정을 따로 정의해두지 않았기 때문에 임의의 계정을 입력하면 자동으로 계정이 생성되어 접속이 가능합니다.
이렇게 접속이 되는 모습을 볼 수 있습니다!
어쨌든 배포는 했는데... Spark를 사용하기 위해서는 추가 설정과 난관이 있어서, 다음 포스팅에서 이야기해보겠습니다.
[Reference]
'스터디 > DevOps' 카테고리의 다른 글
[Kubernetes] #4 ReplicaSet (0) | 2022.10.29 |
---|---|
[Kubernetes] #3 Pod (2) | 2022.10.08 |
[Kubernetes] #2 Kubernetes Architecture (0) | 2022.09.29 |
[Kubernetes] #1 Kubernetes(쿠버네티스) 개요 및 가상화 기술 (0) | 2022.09.29 |
[Kubernetes] 쿠버네티스(Kubernetes)에서 주피터허브(JupyterHub)에 Random Port 설정하기 (0) | 2022.04.17 |