Jupyter Notebook 띄우기

작성자 김아름 수정일 2023-02-22 09:05

#kubernetes, #docker, #쿠버네티스, #도커, #주피터

들어가며

  • 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을 실행하는 방법에 대해 알아보았습니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300