어제는 성공한 게 아니었습니다
주피터 허브는 열렸는데 노트북이 열리지 않고 무한 pending에 빠지는 바람에..
우선 참고한 문서부터
https://z2jh.jupyter.org/en/latest/jupyterhub/installation.html
https://z2jh.jupyter.org/en/latest/jupyterhub/customization.html
https://github.com/jupyterhub/zero-to-jupyterhub-k8s/blob/main/jupyterhub/values.yaml
트러블슈팅
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/issues/114
https://stackoverflow.com/questions/50156124/kubernetes-nfs-persistent-volumes-permission-denied
https://docs.run.ai/admin/integration/jupyterhub/
https://discourse.jupyter.org/t/singleuser-pods-stuck-in-pending/6349/11
제가 최종 작성한 config.yaml 는 아래와 같습니다.
앞으로 계속 수정이 있을 예정입니다.
정답이 아니고, 수많은 시행착오를 거쳐 수정에 수정을 거듭하여,,
제가 했을 때 이렇게 하니 되더라 ~ 이니 참고'만' 하시고,
나머지는 위의 문서들 보고 입맛대로 작성하시는 편이 좋겠습니다
꿀팁 드리자면 한국어 레퍼런스는 8할이 k3s, 미니큐브, 퍼블릭 클라우드 등
나와는 관계 없는 환경에서 진행한 것들이기에 그냥 스택 오버플로우나 https://discourse.jupyter.org/ 보시는게 좋습니다
proxy:
secretToken: "<#터미널에서 openssl rand -hex 32의 결과를 여기에 복붙#>"
service:
nodePorts:
http: 30360 # 임의 지정
loadBalancerIP: 192.168.0.100 # 임의 지정
ingress:
enabled: true
cull:
enabled: true
timeout: 3600
every: 300
singleuser:
cmd: ["jupyterhub-singleuser"]
profileList:
- display_name: "선택할 프로필"
description: "에 대한 설명"
default: true
memory:
limit:
guarantee: 1G
cpu:
limit:
guarantee: 0.5
storage:
homeMountPath: /home/{username}
dynamic:
storageClass: nfs-client
storageAccessModes: [ReadWriteMany]
capacity: 100Gi
extraFiles:
jupyter_notebook_config.json:
mountPath: /etc/jupyter/jupyter_notebook_config.json
data:
MappingKernelManager:
cull_idle_timeout: 1800
cull_interval: 600
cull_connected: false
cull_busy: false
scheduling:
userScheduler:
enabled: false
hub:
service:
type: ClusterIP
config:
JupyterHub:
admin_access: true
admin_users:
- cslab
debug:
enabled: true
설치 과정은 위의 공식 문서와 동일하게
helm upgrade --cleanup-on-fail \
--install jupyter jupyterhub/jupyterhub \
--namespace jupyter \ # 미리 namespace를 만들어 두시거나, create 옵션을 넣어주시기 바랍니다
--version=1.2.0 \ # 2.0.0은 알 수 없는 오류가 많아서 1.2.0으로 돌아왔습니다
--values config.yaml # 위에서 작성한 config.yaml, 해당 디렉토리에서 설치 수행해야 함
helm 차트를 사용합니다.
이상입니다. 간단합니다
이러고 나서
kubectl get svc -n jupyter
로 proxy-public의 EXTERNAL IP, port를 확인하여 접속하시면 되는데
그렇게 간단할 리가 없겠죠 ?
제가 겪었던 문제들을 읊어보도록 하겠습니다.
PVC가 bound 되지 않는 문제
저는 마스터가 아닌 노드에서 NFS 서버를 열어 그곳을 저장소로 사용하였는데
PVC가 바운딩 되지 않는 문제가 발생하였습니다.
위의 helm 명령어를 실행하면 자동으로 생성되는 PVC를
kubectl delete pvc hub-db-dir -n jupyter
로 지워버리고
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
meta.helm.sh/release-name: jupyterhub
meta.helm.sh/release-namespace: jhub
labels:
app: jupyterhub
app.kubernetes.io/managed-by: Helm
chart: jupyterhub-1.2.0
component: hub
heritage: Helm
release: jupyterhub
name: hub-db-dir
namespace: jupyter
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs-client
volumeMode: Filesystem
위와 같이 pvc.yaml을 작성하여
kubectl apply -f pvc.yaml -n jupyter
PVC를 새로 만들어 주었습니다.
만약 PVC를 생성하였는데도 문제가 발생한다면
kubectl get sc -A
를 찍어보시고 storageclass가 있는지, pvc에 할당이 되어있는지 확인하시기 바랍니다.
동적 프로비저닝을 사용하였는데 이 부분도 추후에 수정하겠습니다.
외부 접속이 되지 않을 때
config.yaml의 ingress.enabled를 true로 고쳐보시기 바랍니다
허브가 열리지만 user pod이 pending에서 머무르다가 Timeout 될 경우
config.yaml의 scheduling.userScheduler:enabled 를 false로 바꿔보시기 바랍니다
위의 오류들과 트러블슈팅에 사용한 문서 이외에도 수정한 사항이 굉장히 많습니다.
시도해본 것이 너무 많아 모두 정리하지 못해 아직 부족합니다.
이후에 메모해둔 것들과 기억나는 것을 모두 종합해서 글 수정하도록 하겠습니다.
다음 시간에는 스파크와 GPU 연산을 해보겠습니다.
감사합니다
'클러스터 부활' 카테고리의 다른 글
NVIDIA 드라이버, CUDA 설치 이후 전원 꺼짐(절전모드) 해결 (0) | 2023.02.08 |
---|---|
Temporary failure in name resolution 해결 (0) | 2023.02.08 |
6회차 일단 신나서 글부터 쓰고 봄 (0) | 2023.01.16 |
5회차 - 클러스터 구성 완료, 클러스터 조인 스크립트 (0) | 2023.01.09 |
4일차 - 조립 완료 (3) | 2023.01.05 |