1. Docker 설치2. Minikube 설치Minikube 설치 및 실행 시, 주의사항2-1. Kubernetes 버전2-2. Kustomize 버전3. Kubeflow 설치4. Kubeflow Dashboard 에 원격접속 허용하기설치할때부터 대시보드 접속 이메일과 유저정보 그리고 비밀번호를 변경하고 싶다면...?마무리
On-premise Ubuntu 서버에서 Minikube 를 이용해서 Kubernetes, Kubeflow 설치하는 과정을 작성하며, 설치 과정 중 몇 가지 이슈가 있어 이를 해결하는 과정을 소개한다.
1. Docker 설치
먼저, Minikube 는 Kubernetes VM 을 관리하기 위해 Docker Machine 을 사용하는데, 이를 위해 Hyperkit 또는 Docker Driver 의 설치 및 사용을 추천한다.
# 쉘로 작성해서 한번에 실행 가능하다. # 주의! Linux x86-64 전용이므로, uname -m 을 통해 아키텍처를 꼭 확인할 것! sudo apt-get update -y sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update -y sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
2. Minikube 설치
# 쉘로 작성해서 사용이 가능하다. # 주의! Linux x86-64 전용이므로, uname -m 을 통해 아키텍처를 꼭 확인할 것! curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube rm minikube-linux-amd64 echo "alias kubectl=\"minikube kubectl --\"" >> ~/.bashrc # kubeflow 사용을 위해서 kustomize 를 3.2.0 버전으로 다시 설치할 것이다. # 따라서 minikube 의 kubectl 에 내장되어 있는 kustomize 는 사용하지 않을 것이다. ## echo "alias kustomize=\"minikube kubectl kustomize --\"" >> ~/.bashrc source ~/.bashrc # 바로 아래 스크립트에서 3.2.x 버전은 tar 가 아니라서 오류가 날 것이다. ## curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash -s <version> # 3.2.0 버전의 설치 파일을 직접 다운로드 작아서 설치하도록 하자. wget https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_linux_amd64 chmod +x kustomize_3.2.0_linux_amd64 sudo mv kustomize_3.2.0_linux_amd64 /usr/local/bin/kustomize # K8s 1.22 버전 이상에서는 Kubeflow 가 동작하지 않아서 그 이하 버전을 지정했다. # 또한 Kubectl version 이 1.21 이상인 경우, Kustomize version 이 v4 이상이 되어버린다. # kubeflow 는 kustomize 4.x 버전과는 호환되지 않으며, v3.2.0 사용을 권고하고 있다. minikube start --driver=docker --kubernetes-version=1.21.12
위 설치 스크립트를 살펴보면, minikube 에 kubectl 이 내장되어 있다는 것을 확인할 수 있다.
또한, kubectl 1.14 버전부터는 kustomize 가 내장되어 있다.
아래 사진은 Kustomize 의 Github Repository 에 기재된 내용이다.

Minikube 설치 및 실행 시, 주의사항

위 사진은 Kubeflow 의 Github Repository 에 작성된 권장 사항이다.
2-1. Kubernetes 버전
- Kubernetes 1.21 버전을 권장하고 있다.
- 1.22 이상인 버전에서는 호환성이 없다. 실제로 오류가 많이 난다.
2-2. Kustomize 버전
- Kustomize 3.2.0 버전을 권장하고 있다.
- 3.2.x 버전과 호환성의 문제가 없다.
- 4.x.x 버전을 이용하면 kubeflow 설치 자체가 진행되지 않는다.
3. Kubeflow 설치
# 쉘로 작성해서 사용이 가능하다. if [[ ! -d "kubeflow-manifests" ]] then git clone https://github.com/kubeflow/manifests.git kubeflow-manifests cd kubeflow-manifests fi # Install with a single command ## while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done while ! kustomize build example | minikube kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done # 설치 후, 확인 ## kubectl get pod -A | egrep 'NAME|^auth|^cert-manager|^istio-system|^knative-|^kubeflow' minikube kubectl get pod -A | egrep 'NAME|^auth|^cert-manager|^istio-system|^knative-|^kubeflow'
위 스크립트를 살펴보면, 조금 어색하다.
우리는 minikube 에 내장된 kubectl 을 사용하고 있기 때문에 그렇다.
만약, Minikube 를 설치하는 과정중에 alias 를 제대로 해주었다면
minikube kubectl
대신 kubectl
만으로 명령어 실행이 가능하다.설치 과정은 비교적 쉬워보인다.
스크립트에 모든것을 설명해 놓았기 때문에 쿡북처럼, 잘 따라왔다면 문제 없이 설치되었을 것이다.
이제 마지막이다.
4. Kubeflow Dashboard 에 원격접속 허용하기
먼저, Dashboard 에 접속하기 위해서는 URl 을 알아내야 한다.
# Kubeflow 는 istio 를 통해서 각 서비스가 제공된다. kubectl get svc istio-ingressgateway -n istio-system # 그래서 istio-ingressgateway 서비스의 NodePort 정보를 알아야 한다. minikube service list
아래는 그 결과이다.

이제 http://192.168.49.2:32670 으로 접속하면, 대시보드를 확인할 수 있다. (단, 로컬에서...)
그럼 외부에서 접속하려면 어떻게 해야할까?
iptables 조작등의 여러가지 방법이 있을 수 있지만, 우리는 쉬운 방법을 택하자.
SSH 터널링을 통해서 접속해볼 것이다.
# ssh -L <접속포트>:<목적지IP>:<목적지포트> user@<IP> -p <접속포트> ssh -L 22:192.168.49.2:32670 user@222.x.x.x -p 22
SSH 연결하듯이, 터미널 접속이 되었나? 그럼 성공이다.
브라우저에
localhost:22
으로 접속해보자.
처음 셋팅된 아이디와 비밀번호는 다음과 같다. user@example.com / 12341234
설치할때부터 대시보드 접속 이메일과 유저정보 그리고 비밀번호를 변경하고 싶다면...?
kubeflow 를 설치하기 전에, 아래 두 가지 파일을 수정한다.
manifests/common/user-namespace/base/params.env
manifests/common/dex/base/config-map.yaml
마무리
요약해서 보면, 설치과정은 간단해 보인다.
하지만 버전 이슈와 On-promise 설치 후 외부 접속 이슈가 존재한다.
이를 찾아보고 물어보는 개발자들이 많아서, 글을 작성해본다.