Kubeflow 1.4.0은 Kubernetes 1.21과 Kustomize 3.4.0 기반에서 설치를 해야한다
(https://github.com/kubeflow/manifests 참조)
Kubernetes 1.21은 m1을 지원하나 아직 호환성 체크를 못해보아서 Intel Mac 기준으로 작성하였다
Kubernetes 1.22부터는 m1을 공식 지원하는 것으로 알고 있으나 Kubeflow 1.5까지는 Kubernetes 1.21 버전을 사용한다
추후 kubeflow 1.6 버전에서는 kubernetes 1.22 버전을 지원한다고 하였으나 2022년 4월에 공식적으로 논의되어 업그레이드 작업이 시작되어 언제 완료될지 미정이다
추가적으로 일부 폐쇄환경에서 *.gcr.io 접근이 되지않아 여기서는 minikube 등이 아닌 Docker for Mac에서 지원하는 Kubernetes 클러스터를 통하여 Kubeflow를 설치하기로 하였다
따라서 이 문서는 다음과 같은 환경에서 Kubeflow가 설치된다
HW : Intel Mac
OS : Bigsur
Docker for Mac : 4.2.0 (kubernetes 1.21을 지원함)
Kubernetes : 1.21
Kustomize : 3.4.0
만약 기존에 Docker for Mac 버전이 4.2.0 보다 높다면 다운그레이드가 필요하다
(주의사항 : 기존 도커 컨테이너들이 사라질 수 있습니다)
(경험상으로 docker compose를 사용해서 띄운 이미지들은 다운그레이드 후 다시 docker compose up 하면 정상 작동하였습니다)
다음 링크에서 4.2.0 버전을 찾아서 Intel 버전을 다운로드 받는다
(링크 : https://docs.docker.com/desktop/mac/release-notes/)
Docker for Mac 다운그레이드는 다음과 같이 진행된다
1. 작업표시줄의 Docker 아이콘 오른쪽 클릭
2. Quit Docker Desktop 클릭
3. Docker Desktop 종료되면 앞서 받은 4.2.0 버전을 설치한다
4. 이때 이미 설치되어 있으므로 replace(대치)를 선택해서 덮어씌운다
5. 설치가 완료되면 Finder의 Application에서 도커 아이콘을 더블클릭해서 실행한다
6. 정상적으로 기존 도커 컨테이너가 띄어지는지 확인한다
설치가 완료되었으면 Kubernetes를 적용한다
Docker Desktop을 이용한 Kubernetes는 대시보드로 들어가서 Settings에 있다
Kubernetes 버전이 1.21인것을 확인하면 Kubernets 사용을 한다고 체크한다
Kubernetes 설치가 완료되면 터미널에서 다음 명령어로 kubectl 버전을 확인한다
$ kubectl version
다음은 Kustomize를 설치한다
직접 설치가 필요하기 때문에 다음 링크에서 v3.2.0에서 Assets를 클릭해서 darwin_amd_64 버전을 다운로드 받는다
(링크 : https://github.com/kubernetes-sigs/kustomize/releases?q=v3.2.0&expanded=true)
설치 명령어는 다음과 같다 (다운로드 받은 디렉토리 위치에서 실행)
$ sudo install ./kustomize_3.2.0_darwin_amd64 /usr/local/bin/kustomize
설치가 완료되면 다음 명령어로 정상적으로 설치가 됐는지 확인한다
$ kustomize version
추가적으로 쿠버네티스 네임스페이스의 전환을 자유롭게 할 수 있는 kubectx도 설치한다 (명령어 : kubens)
$ brew install kubectx
Kubeflow 설치는 manifests의 README.md를 바탕으로 설치한다
우선 Tags에서 1.4.0 버전을 선택하고 초록색 버튼의 Code를 눌러 Download Zip을 눌러 다운로드 받는다
압축을 해제하고 README.md에서 Install individual components를 찾는다
다음과 같은 화면이 보인다
다운로드 받은 kubeflow-manifest 디렉토리 안에서 다음 명령어들을 실행하며 cert-manager부터 순차적으로 설치한다
(주의사항 : 이때 cert-manager는 반드시 첫번째 명령어부터 실행하고 두번째 명령어를 실행해야한다)
cert-manager
# 먼저 설치
$ kustomize build common/cert-manager/cert-manager/base | kubectl apply -f -
# base 설치된 후 설치
$ kustomize build common/cert-manager/kubeflow-issuer/base | kubectl apply -f -
istio
$ kustomize build common/istio-1-9/istio-crds/base | kubectl apply -f -
$ kustomize build common/istio-1-9/istio-namespace/base | kubectl apply -f -
$ kustomize build common/istio-1-9/istio-install/base | kubectl apply -f -
dex
$ kustomize build common/dex/overlays/istio | kubectl apply -f -
oidc
$ kustomize build common/oidc-authservice/base | kubectl apply -f -
kubeflow-namespace
kustomize build common/kubeflow-namespace/base | kubectl apply -f -
kubeflow-roles
kustomize build common/kubeflow-roles/base | kubectl apply -f -
istio-resources
kustomize build common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f -
kubeflow-pipeline (컨테이너 환경이 도커가 아닐때는 다른 명령어를 사용해야한다)
kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -
katib
kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f -
central dashboard
kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f -
admission webhook
kustomize build apps/admission-webhook/upstream/overlays/cert-manager | kubectl apply -f -
Notebooks
kustomize build apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f -
kustomize build apps/jupyter/jupyter-web-app/upstream/overlays/istio | kubectl apply -f -
profiles
kustomize build apps/profiles/upstream/overlays/kubeflow | kubectl apply -f -
volumes web app
kustomize build apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f -
tensor board
kustomize build apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f -
kustomize build apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f -
user namespace
kustomize build common/user-namespace/base | kubectl apply -f -
설치 중 pod들은 다음과 같이 확인한다(상태가 변경된것마다 다시 갱신된다)
kubectl get po -A -w
일반적으로 전체 pod 확인은 다음 명령어를 사용한다
kubectl get po -A
# namespace별 pod 확인
kubectl get po -n {namespace}
혹시 설치가 잘못되면 해당 namespace를 지우고 다시 설치하면 된다
명령어는 다음과 같다
# namespace 확인
kubens
# 삭제
kubectl delete namespace {삭제할 namespace}
모든 pod이 running 상태이면 다음 명령어로 kubeflow 대시보드를 접속한다
kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
# 이외 대시보드 확인
kubectl port-forward svc/ml-pipeline-ui -n kubeflow 8888:80
kubectl port-forward svc/katib-ui -n kubeflow 8081:80
kubectl port-forward svc/centraldashboard -n kubeflow 8082:80
이후 localhost:8080 을 브라우저에서 접속하면 Kubeflow 대시보드를 확인할 수 있다