Ubuntu 20.04가 설치되어 있는 데스크탑에 Kubeflow 1.4 설치하는 방법을 정리하려고 해요. docker, minikube, kubectl, kustomize는 설치방법이 정말 많이 나와있으니 적절히 설치 후에 과정을 진행해주세요. 제 PC에 설치된 스펙은 다음과 같습니다.
- Docker: 20.10.10
- minikube: 1.21.0
- kubectl: 1.21.7
- kustomize: 3.2.0 (4.0 이상은 kubeflow 설치에 지원안된다고 공식 문서에 나와잇습니다)
목차
- Minikube로 Kubernetes Cluster 구성하기
- Kubeflow 1.4 설치
1. Minikube로 Kubernetes Cluster 구성하기
Minikube가 설치되어 있다면 쿠버네티스 클러스터 만들기는 되게 간단해요. 아래의 명령어를 입력하면 됩니다.
(주의!, 저는 놀고있는 16 core CPU, 32 GB RAM을 가진 데스크탑에 환경을 구성하는 것이여서 크게 잡았어요. 사양에 따라 적절한 cpu 코어수와 memory를 설정해주세요)
minikube start --cpus 8 --memory 12288
2. Kubeflow 1.4 설치
Kubeflow 1.3 버전이후로 kustomize를 이용해서 정말 간단하게 Kubeflow를 설치할 수 있어요! 먼저 kubeflow manifests 레포지토리를 가져오겠습니다.
git clone https://github.com/kubeflow/manifests.git
지금 글을 작성하는 시점에 master로 설치하면 1.3 버전이 설치가 돼요. 저는 1.4 버전을 설치할 것이기 때문에 master
브랜치에서 v1.4-branch
브랜치로 변경할게요
git checkout v1.4-branch
이제 설치하면 되는데 그 전에 한가지만 더 하고 설치할게요. user profile과 namespace에 관한 부분입니다. 2곳을 수정할 거에요.
첫번째 수정할 곳!! manifests/common/user-namespace/base/params.env
# before
user=user@example.com
profile-name=kubeflow-user-example-com
# after
user=jsuwan961205@gmail.com
profile-name=suwan
두번째 수정할 곳!! manifests/common/dex/base/config-map.yaml
기존의 user에 대한 정보를 변경해도 무방하긴하다. 나는 아래에 내 계정을 추가해줬다. hash에 대한 부분은 여기에 접속해 원하는 비밀번호를 입력하면 암호화 된 해시 값을 받을 수 있다.
# before
staticPasswords:
- email: user@example.com
hash: $2y$12$4K/VkmDd1q1Orb3xAt82zu8gk7Ad6ReFR4LCP9UeYE90NLiN9Df72
# https://github.com/dexidp/dex/pull/1601/commits
# FIXME: Use hashFromEnv instead
username: user
userID: "15841185641784"
# after
staticPasswords:
- email: user@example.com
hash: $2y$12$4K/VkmDd1q1Orb3xAt82zu8gk7Ad6ReFR4LCP9UeYE90NLiN9Df72
# https://github.com/dexidp/dex/pull/1601/commits
# FIXME: Use hashFromEnv instead
username: user
userID: "15841185641784"
- email: jsuwan961205@gmail.com
hash: $2b$10$lufPa5m5SCTDkSVIiFlbYe4VFc5rbGC1XzCZgHWqDonVI90UHMFvi
username: suwan
userID: suwan
두가지를 잘 변경했다면 이제 진짜로 설치해보자.manifests
폴더로 이동한뒤 아래의 명령어를 수행한다.
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
뭐가 믹 이것저것 뜰텐데 example 폴더 내부에 있는 kustomization.yaml에 있는 다양한 리소스들을 쿠버네티스위에 설치하겠다는 내용들이다. 당연히 실제 설치는 쿠버네티스의 pods를 통해서 확인할 수 있다. 확인해보자
kubectl get pods -A
시작과 함께 위의 명령어를 입력하면 대부분 STATUS 부분에 Container Creating 혹은 Pending 혹은 Init 으로 확인될 것이다. 하지만 약 15분정도의 시간이 지나면 아래와 같은 결과를 확인할 수 있을 것이다. watch 명령어로 아래의 결과를 모니터링 하면서 기도하면 시간가는 줄 모른다!! watch kubectl get pods -A
를 입력해보자
NAMESPACE NAME READY STATUS RESTARTS AGE
auth dex-5ddf47d88d-p6crv 1/1 Running 1 19m
cert-manager cert-manager-7dd5854bb4-5jhbf 1/1 Running 0 19m
cert-manager cert-manager-cainjector-64c949654c-gtdw7 1/1 Running 0 19m
cert-manager cert-manager-webhook-6bdffc7c9d-nl6cn 1/1 Running 0 19m
istio-system authservice-0 1/1 Running 0 18m
istio-system cluster-local-gateway-7bf6b98855-4m8m8 1/1 Running 0 19m
istio-system istio-ingressgateway-78bc678876-wk77z 1/1 Running 0 19m
istio-system istiod-755f4cc457-sp542 1/1 Running 0 18m
knative-eventing eventing-controller-64d97555b-w56fq 1/1 Running 0 18m
knative-eventing eventing-webhook-5c5b8d5c6d-jzcbq 1/1 Running 0 18m
knative-eventing imc-controller-688df5bdb4-nf7xt 1/1 Running 0 18m
knative-eventing imc-dispatcher-5dbb47f555-ff2ll 1/1 Running 0 18m
knative-eventing mt-broker-controller-856784c8ff-xc8gm 1/1 Running 0 18m
knative-eventing mt-broker-filter-68fcfcc6c8-ncj9c 1/1 Running 0 18m
knative-eventing mt-broker-ingress-bd54bc995-lwhq2 1/1 Running 0 18m
knative-serving activator-546897c9dd-tcw4t 2/2 Running 1 17m
knative-serving autoscaler-7ffbf6d595-lxfc6 2/2 Running 1 17m
knative-serving controller-5894998d7b-6xplt 2/2 Running 1 17m
knative-serving istio-webhook-578b6b7654-bqt9j 2/2 Running 1 17m
knative-serving networking-istio-6b88f745c-k8jkf 2/2 Running 1 17m
knative-serving webhook-c59cc5b48-4pqcj 2/2 Running 1 17m
kube-system coredns-74ff55c5b-k7mpt 1/1 Running 0 49m
kube-system etcd-minikube 1/1 Running 0 49m
kube-system kube-apiserver-minikube 1/1 Running 0 49m
kube-system kube-controller-manager-minikube 1/1 Running 0 49m
kube-system kube-proxy-rfr2k 1/1 Running 0 49m
kube-system kube-scheduler-minikube 1/1 Running 0 49m
kube-system storage-provisioner 1/1 Running 1 49m
kubeflow admission-webhook-deployment-667bd68d94-rztsg 1/1 Running 0 17m
kubeflow cache-deployer-deployment-79fdf9c5c9-xzh2t 2/2 Running 1 17m
kubeflow cache-server-5bdf4f4457-ddd8n 2/2 Running 0 17m
kubeflow centraldashboard-7d496c59bb-hgllh 1/1 Running 0 17m
kubeflow jupyter-web-app-deployment-6f744fbc54-b4jgx 1/1 Running 0 17m
kubeflow katib-controller-68c47fbf8b-pndjj 1/1 Running 0 17m
kubeflow katib-db-manager-6c76bdc855-7kvxz 1/1 Running 1 17m
kubeflow katib-mysql-6dcb447c6f-fdjhn 1/1 Running 0 17m
kubeflow katib-ui-64bb96d5bf-zrjnr 1/1 Running 0 17m
kubeflow kfserving-controller-manager-0 2/2 Running 0 17m
kubeflow kfserving-models-web-app-7884f597cf-sg76c 2/2 Running 0 17m
kubeflow kubeflow-pipelines-profile-controller-7b947f4748-v28xq 1/1 Running 0 17m
kubeflow metacontroller-0 1/1 Running 0 17m
kubeflow metadata-envoy-deployment-5b4856dd5-ftw8c 1/1 Running 0 17m
kubeflow metadata-grpc-deployment-748f868f64-s4hs4 2/2 Running 2 17m
kubeflow metadata-writer-548bd879bb-4w94k 2/2 Running 0 17m
kubeflow minio-5b65df66c9-lz9vs 2/2 Running 0 17m
kubeflow ml-pipeline-5784f9d9cc-z4zw8 2/2 Running 1 17m
kubeflow ml-pipeline-persistenceagent-d6bdc77bd-q8fl9 2/2 Running 0 17m
kubeflow ml-pipeline-scheduledworkflow-5db54d75c5-chsfw 2/2 Running 0 17m
kubeflow ml-pipeline-ui-5447cb9556-zrk2v 2/2 Running 0 17m
kubeflow ml-pipeline-viewer-crd-68fb5f4d58-sqtp2 2/2 Running 1 17m
kubeflow ml-pipeline-visualizationserver-cf88b98f7-n5tc6 2/2 Running 0 17m
kubeflow mpi-operator-5c55d6cb8f-j92hp 1/1 Running 0 17m
kubeflow mysql-f7b9b7dd4-whs8v 2/2 Running 0 17m
kubeflow notebook-controller-deployment-578fd4dc97-tppwj 1/1 Running 0 17m
kubeflow profiles-deployment-7cc7956dfd-q8g2c 2/2 Running 0 17m
kubeflow tensorboard-controller-controller-manager-954b7c544-94dgs 3/3 Running 1 17m
kubeflow tensorboards-web-app-deployment-6ff79b7f44-8sq2f 1/1 Running 0 17m
kubeflow training-operator-795c5cb864-2wg2b 1/1 Running 0 17m
kubeflow volumes-web-app-deployment-8589d664cc-k7pjs 1/1 Running 0 17m
kubeflow workflow-controller-76dd87cd85-x5qqk 2/2 Running 1 17m
suwan ml-pipeline-ui-artifact-5dd95d555b-v7bwv 2/2 Running 0 8m43s
suwan ml-pipeline-visualizationserver-6b44c6759f-8k28p 2/2 Running 0 8m43s
이제 마지막으로 Dashboard에 접속해보자. Kubeflow 1.4 버전에선 istio기반의 ingressgateway를 통해 각 서비스가 연결된 대시보드를 제공한다. NodePort기 때문에 NodeIP:NodePort를 통해서 접속할수도 있지만 간단히 Port-forwarding을 통해 접속해보자
kubectl port-forward svc/istio-ingressgateway -n istio-system 8888:80
localhost:8888 로 접속해보자. 아이디 비밀번호는 기억하기 바란다.. 접속하면 아래와 같은 화면을 확인할 수 있다!