Kubeflow microk8s 설치
1.들어가며
포스트는 charm kubeflow (Canonical) 설치 하는 페이지를 해석한 것에 가까우므로 원본 페이지를 보심을 추천드리나..
해당 포스트를 따라하다 보면 에러가 납니다.
juju deploy kubeflow --trust --channel=1.7/stable
이 부분에서 1.7 버전으로 설치하면 에러가 나서 1.6 버전으로 낮춰 설치함을 추천드립니다.
- 버전 바꿔 설치하는 것을 추천하지 않습니다.
- kubeflow, k8s, juju 모두 버전에 매우 민감합니다.
- 자세한 사항은 원하는 kubeflow 버전의 document 를 보면 충족하는 버전을 알 수 있습니다.
2. 준비물
- 시간 (takes < ~2 hour)
- 가상화 인프라
Ubuntu 20.04 (focal) or later.- Ubuntu 22.04 (sock proxy 사용한다면 필수)
- at least 4 cores
- 32GB RAM
- 50GB of disk space
- internet for downloading the required snaps and charms.
- python3
사실상 일반적인 PC에서 설치하기 매우 어렵다.
본인은 가상화 인프라 서버(HPE)가 있었으나, 만약에 32GB RAM, 50GB 이상의 디스크가 없다면
처음부터 설치하는 것을 말린다.
스펙 적게 하면 돌아가는 척 하면서 중간에 계속 터진다. (희망 고문)
3. 설치2
microk8s 설치
sudo snap install microk8s --classic --channel=1.24/stable
microk8s 유저 그룹 추가 (sudo 스킵)
아래 명령을 이용하면 sudo
를 안써도 microk8s를 사용할 수 있다.
설명에 따르면 newgrp microk8s
를 새로운 세션마다 입력한다.
sudo usermod -a -G microk8s $USER newgrp microk8s
kubectl 권한 추가
위와 비슷한 이유로 ~/.kube
파일의 소유자를 추가한다.
sudo chown -f -R $USER ~/.kube
microk8s add-on 설치
charmed kubeflow를 실행하려면 다음과 같은 에드온(서버?)가 필요하다.
DNS, hostpath-storgae, ingress, metalib이 10.64.140.43~10.64.140.49 IP를 할당 받아야 한다.
공식 홈페이지에선 함 해보라 하는데 아래와 같이 치면 된다.
microk8s enable dns hostpath-storage ingress metallb:10.64.140.43-10.64.140.49
이후 microk8s status
를 쳐본다.
만약 위와 같은 결과가 나오지 않는다면 무언가가 잘못 된 것이다. 라고 생각할 수 있지만, 사실 올라가는데 시간이 아주 조금 걸린다. 그래도 결과가 똑같다면 세션(ssh 등)을 로그아웃하고 다시 접속하면 정상 작동함을 알 수 있다.
juju 설치 및 microk8s 연결, kubeflow 모델 추가
juju
는 쿠버네티스 클러스터를 알아서 잘 딱 깔끔하고 센스있게(operation Lifecycle manager (OLM) for clouds, bare metal or Kubernetes.) 배포해주는 쿠버네티스 클러스터다.
sudo snap install juju --classic --channel=2.9/stable
juju bootstrap microk8s
juju add-model kubeflow
여기서 add-model 이후 kubeflow 이름 바꾸면 안된다.
kubeflow 배포하기
다음 명령어름 입력한다.
sudo sysctl fs.inotify.max_user_instances=1280 sudo sysctl fs.inotify.max_user_watches=655360
리붓 후에도 영구적으로 설정을 유지하고 싶으면 /etc/sysctl.conf
에서 다음을 추가한다.
fs.inotify.max_user_instances=1280
fs.inotify.max_user_watches=655360
1.6으로 배포하는게 정신건강에 좋다.
1.7의 katib-db, kfp-db는 mysql-k8s:8.0/stable charm을 사용하는데 kubeflow와 호환 문제가 생긴다.
mysql-k8s:beta로도 버전을 올려봤지만 해결되지 않았다.
1.6을 사용하자
juju deploy kubeflow --trust --channel=1.6/stable
20~30분 올라오는 환경창을 보며 기다리고, juju status
명령으로 배포가 정상적인지 확인해보자.
다는 아니어도, 거의 모든 컴포넌트가 active이길 바란다.
다음 명령어로 계속 명령어를 반복하지 않고 올라오는지 확인할 수 있다.
watch -c 'juju status --color | grep -E "blocked|error|maintenance|waiting|App|Unit"'
만약 kfp-api가 Workload failed health check을 뿜는다면 다음 명령어로 확인하고 조치하자.
juju ssh kfp-api/0 "PEBBLE_SOCKET=/charm/containers/ml-pipeline-api-server/pebble.socket /charm/bin/pebble services"
Service Startup Current Since
ml-pipeline-api-server enabled inactive -
서비스의 Current가 inactive
라면, 다음 명령어를 입력하자. 수동으로 kfp-api를 재실행한다.
juju ssh kfp-api/0 "PEBBLE_SOCKET=/charm/containers/ml-pipeline-api-server/pebble.socket /charm/bin/pebble replan"
kubeflow-dashboard 접속
다음 명령어로 istio loadbalancer IP를 알 수 있는데 10.64.140.43
가 보여야 한다.
microk8s kubectl -n kubeflow get svc istio-ingressgateway-workload -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
이제 접근하기 위해 다음 설정들을 입력해준다.이후, http://10.64.140.43.nip.io
에 접속해서 kubeflow dashboard가 뜨면 성공이다!
juju config dex-auth public-url=http://10.64.140.43.nip.io
juju config oidc-gatekeeper public-url=http://10.64.140.43.nip.io
juju config dex-auth static-username=admin
juju config dex-auth static-password=admin
- (번외) 만약 VM에 띄웠다면
아니 나는 VM에kubeflow
를 띄웠고, 그기엔 접속 못하는데요? 하면 한가지 방법으로 낑겨 들어 갈 수 있다.
- ssh 터널링
-
- ssh 터널을 만든다.
다음 명령어로 로컬 1111 포트에, remote 서버 내부의 10.152.183.37:8082 포트를 땡겨올 수 있다.
8082는 kubeflow-dashboard 클러스터 IP다.ssh -L 1111:10.152.183.37:8082 user@192.168.10.151
-
- 터널링 했으므로 localhost:1111로 접속한다.
단, 이렇게하면 dashboard만 뜬다. 뭔가 이상하다!
- ssh 터널을 만든다.
-
- SOCK proxy
- 다이나믹 포트 포워드 하나 열자. 다음 명령어를 이용한다
ssh -D 9999 user@remoteServerIP
- 다이나믹 포트 포워드 하나 열자. 다음 명령어를 이용한다