들어가며
- Docker hub에 존재하는 이미지를 이용하여, k8s 클러스터에 나만의 jupyter notebook 을 띄우는 방법에 대해 알아보겠습니다.
Jupyter Notebook 띄우기
컨테이너 실행하기
docker hub에 존재하는 jupyter notebook 이미지로 컨테이너를 실행합니다.
docker run -itd --name jupyter-notebook jupyter/datascience-notebook docker exec -it jupyter-notebook bash
비밀번호 설정하기
jupyter notebook의 비밀번호를 설정합니다.
ipython
In [1]: from notebook.auth import passwd In [2]: passwd() Enter password: Verify password: Out[2]: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$PpIg9K0MLJ9f2E71rPJbVA$5btwlcebBSl9d8l7nG+ZsXaGRpM0Y4Qi8Ste64vP2sc' In [3]: exit
config 설정하기
jupyter notebook의 config 파일을 설정합니다.
위에서 비밀번호를 입력하여 생성된 문자열 값을 복사하여 입력해 줍니다.
apt-get update apt-get install -y vim vi ~/.jupyter/jupyter_notebook_config.py
# c.NotebookApp.password_required 을 True 로 수정한 뒤, 주석을 제거한다. c.NotebookApp.password_required = True # c.NotebookApp.password 의 '' 부분에, 위에서 생성한 passwd 를 입력한 뒤, 주석을 제거한다. c.NotebookApp.password = ''
컨테이너를 이미지로 저장하기
설정이 적용된 컨테이너를 재시작한 뒤, 새로운 이미지로 저장합니다.
docker restart jupyter-notebook docker commit jupyter-notebook docker tag $SHA jupyter/my-notebook
k8s 리소스 생성하기
만든 이미지를 가지고, deployment와 service를 생성하여 jupyter notebook을 실행합니다.
vi deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: jupyter-deployment labels: app: notebook namespace: default spec: replicas: 1 selector: matchLabels: app: notebook template: metadata: labels: app: notebook spec: containers: - name: jupyter image: jupyter/my-notebook imagePullPolicy: "IfNotPresent" ports: - containerPort: 8888 volumeMounts: - name: data mountPath: /data volumes: - name: data hostPath: path: /data/jupyter
본 예시에서는 Node Port 타입의 서비스를 생성합니다.
vi svc.yaml
apiVersion: v1 kind: Service metadata: name: jupyter-svc labels: app: notebook namespace: default spec: ports: - port: 8888 name: jupyter protocol: TCP targetPort: 8888 #nodePort: 12345 selector: app: notebook type: NodePort
kubectl apply -f deploy.yaml deployment.apps/jupyter-deployment created kubectl apply -f svc.yaml service/jupyter-svc created
kubectl get all -n default NAME READY STATUS RESTARTS AGE pod/jupyter-deployment-59f8db8cf-lzj2z 1/1 Running 0 41m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/jupyter-svc NodePort 6.5.109.174 <none> 8888:30988/TCP 65m service/kubernetes ClusterIP 6.5.0.1 <none> 443/TCP 42d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/jupyter-deployment 1/1 1 1 43m NAME DESIRED CURRENT READY AGE replicaset.apps/jupyter-deployment-59f8db8cf 1 1 1 41m
jupyter notebook 접속하기
클러스터의 node IP 와 서비스의 Node Port를 사용하여 jupyter notebook에 접속합니다.
이미지 만들 때 설정한 비밀번호를 입력하여 접속합니다.
마무리
- kubernetes 클러스터에 jupyter notebook을 실행하는 방법에 대해 알아보았습니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.