몰입과 소통

Ubuntu 18.04에서 Minikube, Kubeflow 구축하기 본문

개발

Ubuntu 18.04에서 Minikube, Kubeflow 구축하기

Dev Teddy 2024. 3. 3. 20:24

Minikube, Kubeflow 공식 문서 등 여러가지를 참고하였으나,

정확한 가이드가 없어서 따로 정리하였습니다. 설치 순서는 다음과 같습니다.

  1. Kubectl 설치
  2. Minikube 설치
  3. Kustomize 설치
  4. Kubeflow 설치

버전을 특정하여 설치하였기 때문에 버전 특정이 굉장히 중요하다고 생각됩니다.

  • Nvidia Driver : 사용 중인 GPU에 맞추어 설치 (저는 nvidia-driver-470을 사용했습니다.)
  • Docker : 23.0.1
  • Minikube : 1.21.0
  • Kubeflow : 1.4.0
  • Kustomize : 3.2.3
  • Kubectl : 1.21.7

Nvidia Driver와 Docker 설치방법은 이전 포스트인 Ubuntu 18.04에서 Nvidia Driver, Nvidia Docker 구축하기를 참고해주세요. 

설치 시작하겠습니다.


1. Kubectl 설치

kubectl은 쿠버네티스 클러스터를 제어하기 위한 명령줄 인터페이스(CLI) 도구입니다. 
kubectl을 사용하면 사용자는 쿠버네티스 클러스터에 대한 다양한 작업을 수행할 수 있습니다. 예를 들어, 애플리케이션을 배포하고, 클러스터 리소스를 조회하고 수정하며, 로그를 확인하고, 클러스터의 상태를 모니터링할 수 있습니다.

 

다음 명령어로 kubectl을 다운로드하고 설치합니다.

# kubectl 다운로드
curl -LO https://dl.k8s.io/release/v1.21.7/bin/linux/amd64/kubectl
# kubectl 설치
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

 

설치 후 확인을 위해 버전 확인 명령어를 입력합니다. 

저희는 Kubectl 버전을 지정하여 설치했기에 GitVersion:"v1.21.7"이 출력되어야 정상입니다. 

kubectl version --client

# 출력 예시
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.7", GitCommit:"1f86634ff08f37e54e8bfcd86bc90b61c98f84d4", GitTreeState:"clean", BuildDate:"2021-11-17T14:41:19Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}

 

2. Minikube 설치

Minikube는 로컬 컴퓨터에서 쿠버네티스 환경을 쉽게 실행할 수 있게 해주는 도구입니다. 
Minikube는 단일 노드 쿠버네티스 클러스터를 생성하며, 이 클러스터는 개발자가 쿠버네티스를 학습하거나 개발 과정에서 쿠버네티스 애플리케이션을 테스트할 때 사용하기 적합합니다. 

 

다음 명령어로 Minikube를 다운로드하고 설치합니다.

# Minikube 다운로드
sudo apt install conntrack
curl -LO https://storage.googleapis.com/minikube/releases/v1.21.0/minikube-linux-amd64

# Minikube 설치
sudo install minikube-linux-amd64 /usr/local/bin/minikube

 

설치 후 확인을 위해 버전 확인 명령어를 입력합니다. 

저희는 Minikube 버전을 지정하여 설치했기에 minikube version: v1.21.0이 출력되어야 정상입니다. 

minikube version

# 출력 예시
minikube version: v1.21.0

 

이제 Minkube를 실행해 보겠습니다.

minikube에서 GPU를 사용하신다면, driver 옵션은 무조건 none을 유지하셔야 합니다. 

다른 driver 옵션을 설정하신다면, GPU가 잡히지 않습니다.

sudo su
minikube start --driver=none

 

minikube start 명령어 실행 후 터미널 창을 하나 더 열으시고 아래 커맨드로 모든 Pod가 Running인지 확인합니다.

모든 Pod의 Status가 Running이어야만 minikube가 정상 작동인 것입니다.

kubectl get pod -A

출력 예시
NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
kube-system   coredns-64897985d-748ll                 1/1     Running   0          81s
kube-system   etcd-ip-10-0-2-146                      1/1     Running   0          96s
kube-system   kube-apiserver-ip-10-0-2-146            1/1     Running   0          92s
kube-system   kube-controller-manager-ip-10-0-2-146   1/1     Running   0          92s
kube-system   kube-proxy-m7rjw                        1/1     Running   0          81s
kube-system   kube-scheduler-ip-10-0-2-146            1/1     Running   0          95s
kube-system   storage-provisioner                     1/1     Running   0          91s

 

이제 GPU를 Pod에서 사용할 수 있게끔 설정하겠습니다.

kubectl get nodes 명령어 실행 시 보유하고 계신 GPU 수만큼 출력이 되어야 합니다.

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta4/nvidia-device-plugin.yml
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

# 출력 예시(PC에 있는 GPU 수만큼 나와야 함)
NAME       GPU
minikube   1

 

3. Kustomize 설치

Kustomize는 쿠버네티스 리소스의 구성을 관리하기 위한 도구입니다. 
쿠버네티스 애플리케이션의 설정을 선언적으로 관리할 수 있게 해주며, YAML 파일을 기반으로 합니다. 
이를 통해 다양한 환경(예: 개발, 스테이징, 프로덕션)에 맞게 애플리케이션을 쉽게 배포할 수 있습니다.

 

다음 명령어로 다운로드 및 설치를 진행합니다.

curl --silent --location --remote-name \
"https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.2.3/kustomize_kustomize.v3.2.3_linux_amd64" && \
chmod a+x kustomize_kustomize.v3.2.3_linux_amd64 && \
sudo mv kustomize_kustomize.v3.2.3_linux_amd64 /usr/local/bin/kustomize

 

설치된 Kustomize 버전을 확인합니다. 저희는 Version:kustomize/v3.2.3이 출력되어야합니다.

kustomize version

# 출력 예시
Version: {Version:kustomize/v3.2.3 GitCommit:f8412aa3d39f32151525aff97a351288f5a7470b BuildDate:2019-10-08T23:30:25Z GoOs:linux GoArch:amd64}

 

4. Kubeflow 설치

드디어 마지막 Kubeflow 설치입니다.

Kubeflow는 쿠버네티스 위에서 머신러닝(ML) 워크플로우를 구축, 배포, 관리하기 위한 오픈 소스 프로젝트입니다. 
쿠버네티스의 확장성과 이동성을 활용하여 머신러닝 모델을 효율적으로 개발하고, 학습시키며, 배포할 수 있습니다.

 

먼저 Git Clone을 실행하여 Kubeflow를 다운로드 합니다.

git clone https://github.com/kubeflow/manifests.git

 

그 후 해당 폴더 이동 및 특정 버전 설치 준비를 합니다.
저희는 1.4.0 버전을 설치할 것이기에 1.4.0 버전으로 설치를 준비하겠습니다.

cd manifests
git checkout tags/v1.4.0

# 실행 결과
Note: checking out 'tags/v1.4.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 39c01994 Finalize the v1.4-branch (#2056)

 

모든 설치 준비가 완료되었습니다. 이제 아래 명령어로 설치를 진행하겠습니다.
Kubeflow 설치는 꽤 오래 걸리는 작업이기에 명령어 실행 후 20~30분 정도 기다리셔야 합니다.

while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done

 

설치가 완료되셨다면, 터미널 창을 하나 더 열으시고 아래 커맨드로 모든 Pod가 Running인지 확인합니다.

모든 Pod의 Status가 Running이어야만 minikube와 Kubeflow가 정상 작동인 것입니다.

kubectl get pods -A

# 실행 결과
# 모두 Running으로 바뀌어야 함. 천천히 확인하자. 시간이 꽤 걸림.(20~30분)
NAMESPACE                   NAME                                                        READY   STATUS    RESTARTS   AGE
auth                        dex-5ddf47d88d-vzggb                                        1/1     Running   1          58m
cert-manager                cert-manager-7dd5854bb4-vp69p                               1/1     Running   0          58m
cert-manager                cert-manager-cainjector-64c949654c-zfq8j                    1/1     Running   0          58m
cert-manager                cert-manager-webhook-6bdffc7c9d-895kx                       1/1     Running   0          58m
# ...
# 굉장히 많은 Pod들이 출력될것입니다.(약 50~60개정도)
# 모든 Pod들이 Running 상태여야합니다.
# ...
kubeflow                    ml-pipeline-visualizationserver-cf88b98f7-wcbf6             2/2     Running   0          58m
kubeflow                    mpi-operator-5c55d6cb8f-4n8lc                               1/1     Running   0          58m
kubeflow                    mysql-f7b9b7dd4-hwss6                                       2/2     Running   0          58m
kubeflow                    notebook-controller-deployment-578fd4dc97-h2tgj             1/1     Running   0          58m
kubeflow                    profiles-deployment-7cc7956dfd-g8f4g                        2/2     Running   0          58m
kubeflow                    tensorboard-controller-controller-manager-954b7c544-8m72n   3/3     Running   2          58m
kubeflow                    tensorboards-web-app-deployment-6ff79b7f44-kg4ts            1/1     Running   0          58m
kubeflow                    training-operator-795c5cb864-vwv7r                          1/1     Running   0          58m
kubeflow                    volumes-web-app-deployment-8589d664cc-frd5p                 1/1     Running   0          58m
kubeflow                    workflow-controller-76dd87cd85-w9vgw                        2/2     Running   1          58m

 

수고하셨습니다. 여기까지 Minikube와 Kubeflow 설치 방법에 대해 알아보았습니다.

이제 여러분은 로컬 환경에서 쿠버네티스 클러스터를 쉽게 구성하고, Kubeflow를 활용해 머신러닝 워크플로우를 실험할 준비가 되었습니다. 이 과정을 통해 쿠버네티스와 머신러닝의 강력한 결합을 직접 체험해보시기 바랍니다.

여러분의 다음 큰 프로젝트가 기대됩니다.

 

궁금한 점이 있으시면 댓글이나 이메일로 문의해 주세요. 확인하는 대로 답변드리겠습니다.