카테고리 없음

Kubeflow microk8s 설치

uicheon 2023. 9. 2. 20:03

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 를 쳐본다.

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 명령으로 배포가 정상적인지 확인해보자.

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
  1. (번외) 만약 VM에 띄웠다면
    아니 나는 VM에 kubeflow를 띄웠고, 그기엔 접속 못하는데요? 하면 한가지 방법으로 낑겨 들어 갈 수 있다.
  • ssh 터널링
      1. 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
      2. 터널링 했으므로 localhost:1111로 접속한다.
        단, 이렇게하면 dashboard만 뜬다. 뭔가 이상하다!
  • SOCK proxy
    • 다이나믹 포트 포워드 하나 열자. 다음 명령어를 이용한다
      ssh -D 9999 user@remoteServerIP