본문 바로가기
개발

Kubeflow 1.3 설치 (Ubuntu 21.04 + minikube)

by kim.sardine 2021. 7. 12.

우분투 데스크탑을 새로 구매했는데 마침 Kubeflow v1.3 이 릴리즈되어서 새로 셋업을 진행해봤다.

 

시작하기 전에

Kubeflow 1.3 의 가장 큰 특징은 바로 Kubeflow 배포 yaml 파일이 더 이상 Kubeflow 커뮤니티에 의해 관리되지 않는다는 것이다.

예전의 Kubeflow 가 Kubeflow 가 제공하는 종합 선물 세트였다면... Kubeflow 1.3 은 각 플랫폼 담당자가 제공하는 종합 선물 세트 또는 알아서 선물 골라담기 방식이다.

Kubeflow v1.2 까지는 kfctl_istio_dex.v1.2.0.yaml 처럼 Kubeflow 배포 yaml 파일이 Kubeflow 커뮤니티에 의해 관리되고있었다.

하지만 Kubeflow 내부에 워낙 다양한 컴포넌트들이 존재하기도하고 클러스터 운영 환경에 따라 사용하는 k8s 리소스가 달라지기 때문에 모든 시나리오에 대해 배포 yaml 파일을 만들어야 했고, 그 결과 수많은 파일들이 생겨났다.

너무 많아..

그래서 Kubeflow 1.3 부터 Kubeflow 는 Pipeline, Notebook 과 같은 내부 컴포넌트에 집중하고, 배포 패키징은 각 환경별 담당자들이 책임지도록 바꿔버렸다. (참고)

그래서 우리는 이제 외부에 의해 제공되는 배포 패키지를 이용해 Kubeflow 를 설치하거나, 아니면 직접 원하는 Kubeflow 컴포넌트를 선택하여 설치해야 한다. 

이 글에서는 minikube 환경에 직접 Kubeflow 컴포넌트를 설치해보겠다.

 

환경 셋업

minikube 설치 및 실행

참고 : https://minikube.sigs.k8s.io/docs/start/

$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube

 

minikube 실행

$ minikube start --cpus 4 --memory 5120 --driver docker
😄  minikube v1.22.0 on Ubuntu 21.04
✨  Using the docker driver based on user configuration
❗  Your cgroup does not allow setting memory.
    ▪ More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities
👍  Starting control plane node minikube in cluster minikube
🚜  Pulling base image ...
💾  Downloading Kubernetes v1.21.2 preload ...
    > preloaded-images-k8s-v11-v1...: 502.14 MiB / 502.14 MiB  100.00% 19.41 Mi
    > gcr.io/k8s-minikube/kicbase...: 361.08 MiB / 361.09 MiB  100.00% 11.67 Mi
🔥  Creating docker container (CPUs=4, Memory=5120MB) ...
🐳  Preparing Kubernetes v1.21.2 on Docker 20.10.7 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: default-storageclass, storage-provisioner
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

설치 결과를 보면 Kubernetes v1.21.2 가 설치된 것을 알 수 있다.

 

kubectl 설치

참고 : https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

위에서 설치된 Kubernetes 버전에 맞춰 kubectl 을 다운로드 받는다.

# curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ curl -LO "https://dl.k8s.io/release/v1.21.2/bin/linux/amd64/kubectl"

$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:59:11Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:53:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}

$ kubectl get pods -A     
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-558bd4d5db-vd68p           1/1     Running   0          56s
kube-system   etcd-minikube                      1/1     Running   0          63s
kube-system   kube-apiserver-minikube            1/1     Running   0          70s
kube-system   kube-controller-manager-minikube   1/1     Running   0          63s
kube-system   kube-proxy-9gsn9                   1/1     Running   0          56s
kube-system   kube-scheduler-minikube            1/1     Running   0          63s
kube-system   storage-provisioner                1/1     Running   1          68s

 

kustomize 설치

Kubeflow 1.3 부터는 kfctl 을 사용하지않고 kustomize 를 사용한다.

prerequisites 에서 알 수 있듯이 Kubeflow 1.3 은 최신 Kustomize 4.x 와 호환이 안된다. 3.2 버전을 다운로드 받아야한다.

$ wget https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_linux_amd64

--2021-07-10 13:24:19--  https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_linux_amd64
Resolving github.com (github.com)... 15.164.81.167
...
kustomize_3.2.0_linux_amd64           100%[=======================>]  25.36M  11.2MB/s    in 2.3s    

2021-07-10 13:24:22 (11.2 MB/s) - ‘kustomize_3.2.0_linux_amd64’ saved [26593696/26593696]

$ chmod u+x kustomize_3.2.0_linux_amd64
$ sudo mv kustomize /usr/local/bin/
$ kustomize version
Version: {KustomizeVersion:3.2.0 GitCommit:a3103f1e62ddb5b696daa3fd359bb6f2e8333b49 BuildDate:2019-09-18T16:26:36Z GoOs:linux GoArch:amd64}

 

준비 완료!

 

Kubeflow 1.3 설치

Kubeflow 를 직접 설치하려면 kubeflow/manifest 에서 원하는 Kubeflow 서비스 및 컴포넌트를 하나 하나 골라서 설치해야한다. (e.g Pipeline, KFServing, Centraldashboard, Jupyter, Tensorboard 등)

그런데 Kubeflow 는 워낙 많은 서비스들로 이뤄져있고 사용하는 서비스들이 대부분 비슷하다. 그래서 Kubeflow 는 이런 서비스들을 example 에 정리해뒀으며, 이를 활용하면 Kubeflow 를 쉽게 설치할 수 있다.

kubeflow/manifest 를 clone 받은 후 kustomize 를 사용해 설치를 진행하자

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

 

그 전에, example 에서는 사용자 관리를 위해 Dex 를 사용하는데 현재 master 브랜치 최신 버전 기준으로 Kubernetes v1.21 환경에서 Dex 를 설치할 때 에러가 발생한다. (issue)

이를 해결하는 PR 이 등록되어있는 상태이고, Merge 된다면 해당 이슈는 해결 될 것으로 보인다.

우선 이를 해결하기 위해 Dex deployment 를 수정해야하는데, 위 PR 을 참고하여 common/dex/base/deployment.yaml 을 수정하자

 

그 다음 example 내부 리소스들을 설치해주자 (link)

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

위 명령어는 example/kustomization.yaml 에 정리된 Kubeflow 컴포넌트들을 차례로 apply 하여 kubernetes 리소스를 생성한다.

 

설치가 완료되면 port forwarding 를 사용하여 Centraldashboard 에 접속해보자

$ kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

 

이후 http://127.0.0.1:8080 에 접속하면 아래와 같이 dex 로그인 화면을 볼 수 있다.

Default 계정은 user@example.com 이고 비밀번호는 12341234 이다. 이 설정은 여기에서 확인할 수 있다.

로그인에 성공하면 Centraldashboard 홈 화면이 성공적으로 출력된다.

생각보다 쉽게 Kubeflow 1.3 배포에 성공했다.

example 내용들을 입맛에 맞게 바꿔보거나 Kubernetes 운영 환경에 맞춰 설정을 변경하면서 테스트해보면 Kubeflow 를 이해하는데 큰 도움이 될 것이다.

 

 

마무리

Ubuntu 에서 설치해서 그런지 windows 에서 WSL2 사용하여 설치했을 때 보다 훨씬 쉽게 설치에 성공한 것 같다. 아니면 Kubeflow 의 소소한 에러들이 많이 고쳐저서 그런가?

Kubeflow 1.3 에서는 상당한 업데이트가 있었다. Jupyter notebook 에 Stop 기능이 생겼다거나 Tensorboard 컴포넌트가 추가되었다거나 istio 버전이 많이 올라갔다거나.. 여유가 있다면 1.3 으로의 버전 업데이트를 추천한다.

배포 방식이 완전히 바뀌어서 처음에는 혼란스러웠으나, 장기적으로 봤을 때 이런 방식이 Kubeflow 에는 더 잘 맞겠다는 생각도 든다. 너무 많은 서비스들을 포함하고있는 만큼 자유도가 높은 Kubeflow 이기 때문에 빡빡한 배포 정책이 오히려 Kubeflow 의 자유도를 해쳤을 수도 있으니까... 뭐든 장단점이 있고 결국은 선택의 문제이고 끝까지 살아남는 쪽이 이기는 문제이다.

'개발' 카테고리의 다른 글

2023년 8월 CKAD 합격 후기  (0) 2023.08.17
Kubeflow 1.2 설치 (Ubuntu 21.04 + minikube)  (3) 2021.07.18
Kubeflow 1.2 설치 (WSL2 Ubuntu + Docker Desktop)  (2) 2021.01.30

댓글