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 로 접속해보자. 아이디 비밀번호는 기억하기 바란다.. 접속하면 아래와 같은 화면을 확인할 수 있다!
