안녕하세요!
오늘은 문제가 많은 AWS(EKS) 인프라를 기반으로 구축하는 Kubeflow 1.2 버전이 아닌,
온프레미스 환경에서(Minikube를 이용합니다!) Kubeflow 1.4버전을 구축해보도록 하겠습니다.
minikube에 Kubeflow 1.4.1을 설치한다.
Kubeflow 설치 방식이 버전 1.2까지는 kfctl를 사용하였으나, 1.3부터는 kustomize를 사용한다.
- 이전에 AWS 상에 쿠버플로를 구축하였을 때 계속 kfctl을 사용하신 것 기억하시나요?
✓ kfctl is a CLI for deploying and managing Kubeflow, Latest release: 1.2.0(21 Nov 2020), https://github.com/kubeflow/kfctl
▷ Kubeflow 1.2 in On-prem 구성
▷ Kubeflow 1.2 in Minikube 구성
✓ Kubeflow 1.4.1는 Istio 1.9.6, Knative 0.22.1을 포함하고 있다.
kubeflow 1.4.1
minikube 1.17.1
kubernetes 1.20.11
macOS Monteret 12.0.1
Kubeflow Install
- 참고 문서: https://github.com/kubeflow/manifests
미니큐브 공식 홈페이지를 통해 brew install을 진행하겠습니다.
brew install minikube
내 맥의 환경정보을 확인합니다.(https://luran.me/403)
드라이버를 설치합니다.
brew install hyperkit
앞으로 Minikube kubectl
을 이용해 작업을 진행할 것이기 때문에,
간단하게 미니쿠버를 어떻게 이용하는지 살펴봅시다.
minikube start --driver=hyperkit --kubernetes-version=1.20.11 --memory=8g —cpus=4 --profile kf-1.4
minikube start --driver=hyperkit --kubernetes-version=1.20.11 --memory=12288 —cpus=6 --disk-size=55g --profile mk
(base) noharam@nohalam-ui-MacBookPro ~ % minikube start --driver=hyperkit --kubernetes-version=1.20.11 --memory=8g —cpus=4 --profile kf-1.4
😄 [kf-1.4] Darwin 12.0.1 의 minikube v1.24.0
✨ 유저 환경 설정 정보에 기반하여 hyperkit 드라이버를 사용하는 중
💾 드라이버 docker-machine-driver-hyperkit 다운로드 중 :
> docker-machine-driver-hyper...: 65 B / 65 B [----------] 100.00% ? p/s 0s
> docker-machine-driver-hyper...: 8.35 MiB / 8.35 MiB 100.00% 6.55 MiB p/s
🔑 The 'hyperkit' driver requires elevated permissions. The following commands will be executed:
$ sudo chown root:wheel /Users/noharam/.minikube/bin/docker-machine-driver-hyperkit
$ sudo chmod u+s /Users/noharam/.minikube/bin/docker-machine-driver-hyperkit
Password:
💿 가상 머신 부트 이미지 다운로드 중 ...
> minikube-v1.24.0.iso.sha256: 65 B / 65 B [-------------] 100.00% ? p/s 0s
> minikube-v1.24.0.iso: 225.58 MiB / 225.58 MiB [] 100.00% 5.68 MiB p/s 40s
👍 kf-1.4 클러스터의 kf-1.4 컨트롤 플레인 노드를 시작하는 중
💾 쿠버네티스 v1.20.11 을 다운로드 중 ...
> preloaded-images-k8s-v13-v1...: 471.84 MiB / 471.84 MiB 100.00% 5.35 MiB
🔥 hyperkit VM (CPUs=2, Memory=8192MB, Disk=20000MB) 를 생성하는 중 ...
🐳 쿠버네티스 v1.20.11 을 Docker 20.10.8 런타임으로 설치하는 중
▪ 인증서 및 키를 생성하는 중 ...
▪ 컨트롤 플레인이 부팅...
▪ RBAC 규칙을 구성하는 중 ...
🔎 Kubernetes 구성 요소를 확인...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 애드온 활성화 : storage-provisioner, default-storageclass
❗ /usr/local/bin/kubectl is version 1.23.1, which may have incompatibilites with Kubernetes 1.20.11.
▪ Want kubectl v1.20.11? Try 'minikube kubectl -- get pods -A'
🏄 끝났습니다! kubectl이 "kf-1.4" 클러스터와 "default" 네임스페이스를 기본적으로 사용하도록 구성되었습니다.
(base) noharam@nohalam-ui-MacBookPro ~ % minikube addons list -p kf-1.4
|-----------------------------|---------|--------------|-----------------------|
| ADDON NAME | PROFILE | STATUS | MAINTAINER |
|-----------------------------|---------|--------------|-----------------------|
| ambassador | kf-1.4 | disabled | unknown (third-party) |
| auto-pause | kf-1.4 | disabled | google |
| csi-hostpath-driver | kf-1.4 | disabled | kubernetes |
| dashboard | kf-1.4 | disabled | kubernetes |
| default-storageclass | kf-1.4 | enabled ✅ | kubernetes |
| efk | kf-1.4 | disabled | unknown (third-party) |
| freshpod | kf-1.4 | disabled | google |
| gcp-auth | kf-1.4 | disabled | google |
| gvisor | kf-1.4 | disabled | google |
| helm-tiller | kf-1.4 | disabled | unknown (third-party) |
| ingress | kf-1.4 | disabled | unknown (third-party) |
| ingress-dns | kf-1.4 | disabled | unknown (third-party) |
| istio | kf-1.4 | disabled | unknown (third-party) |
| istio-provisioner | kf-1.4 | disabled | unknown (third-party) |
| kubevirt | kf-1.4 | disabled | unknown (third-party) |
| logviewer | kf-1.4 | disabled | google |
| metallb | kf-1.4 | disabled | unknown (third-party) |
| metrics-server | kf-1.4 | disabled | kubernetes |
| nvidia-driver-installer | kf-1.4 | disabled | google |
| nvidia-gpu-device-plugin | kf-1.4 | disabled | unknown (third-party) |
| olm | kf-1.4 | disabled | unknown (third-party) |
| pod-security-policy | kf-1.4 | disabled | unknown (third-party) |
| portainer | kf-1.4 | disabled | portainer.io |
| registry | kf-1.4 | disabled | google |
| registry-aliases | kf-1.4 | disabled | unknown (third-party) |
| registry-creds | kf-1.4 | disabled | unknown (third-party) |
| storage-provisioner | kf-1.4 | enabled ✅ | kubernetes |
| storage-provisioner-gluster | kf-1.4 | disabled | unknown (third-party) |
| volumesnapshots | kf-1.4 | disabled | kubernetes |
|-----------------------------|---------|--------------|-----------------------|
(base) noharam@nohalam-ui-MacBookPro ~ % minikube profile list
|---------|-----------|---------|--------------|------|----------|---------|-------|
| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes |
|---------|-----------|---------|--------------|------|----------|---------|-------|
| kf-1.4 | hyperkit | docker | 192.168.64.2 | 8443 | v1.20.11 | Running | 1 |
|---------|-----------|---------|--------------|------|----------|---------|-------|
kubectl
- kubectl version --short
설치후 kubectl이 "kf-1.4" 클러스터와 "default" 네임스페이스를 기본적으로 사용하도록 구성되었습니다
라고 하나 /usr/local/bin/kubectl
에 미리 구성해둔 버전이 1.23.1 버전이기 때문에 방금 설치한 1.20.11 버전을 사용하기 위해선 'minikube kubectl -- get pods -A'
를 이용하라고 하네요.kubectl이 이미 설치되어 있다면 이제 이를 사용하여 새 클러스터에 액세스할 수 있습니다.
- kubectl get po -A
alias k="kubectl"
minikube kubectl -- get pods -A
을 입력했을 때 미니쿠브 서버를 찾지 못하는 오류가 있었습니다. 이유는 모르겠지만, kubectl
이 방금 설치한 쿠버네티스를 잘 인식하는 것을 확인했기 때문에 일단 진행합니다!대시보드도 확인해봅시다. minikube dashboard -p kf-1.4
- 프로필을 설정해주면 minikube 명령 입력시 프로필을 지정해주지 않아도 됩니다. minikube profile kf-1.4
-> minikube dashboard
가 가능해집니다.
추가적으로 AWS와 컨텍스트 등을 혼동하지 않기 위해 현재 컨텍스트가 잘 설정되어있나 확인을 진행했습니다.
(base) noharam@nohalam-ui-MacBookPro ~ % kubectl config current-context
kf-1.4
(base) noharam@nohalam-ui-MacBookPro ~ % kubectl config get-clusters
NAME
kf-1.4
arn:aws:eks:ap-northeast-2:174950111464:cluster/automl-dsme-knu
arn:aws:eks:ap-northeast-2:174950111464:cluster/environment-predict
(base) noharam@nohalam-ui-MacBookPro ~ % kubectl config get-user
error: unknown command "get-user"
See 'kubectl config -h' for help and examples
(base) noharam@nohalam-ui-MacBookPro ~ % kubectl config get-users
NAME
arn:aws:eks:ap-northeast-2:174950111464:cluster/automl-dsme-knu
arn:aws:eks:ap-northeast-2:174950111464:cluster/environment-predict
kf-1.4
Kubernetes
Minikube에서 Kubeflow가 설치/실행 될 수 있도록 리소스(CPU/Memory)를 할당,
kubernetes 1.20.11를 설치한다.
minikube start --driver=hyperkit --kubernetes-version=1.20.11 --memory=8g —cpus=4 --profile kf-1.4
kubeflow 설치에 필요한 default storageclass는 자동으로 구성된다.
Kustomize
✓ Kustomize는 kustomization 파일을 통해 Kubernetes 오브젝트를 사용자가 원하는 대로 변경하는(customize) 툴이다.
✓ 본 문서에서는 맥에 설치되어 있는 kustomize (v4.0.5)를 사용하였다.
✓ Kubeflow 문서에서는 kustomize 4.x 최신 버전과는 호환되지 않으며 3.2.0 사용을 권고하고 있다.
wget https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_darwin_amd64
chmod +x kustomize_3.2.0_darwin_amd64
mv kustomize_3.2.0_darwin_amd64 /usr/local/bin/kustomize
export PATH=$PATH:/usr/local/bin/kustomize
(base) noharam@nohalam-ui-MacBookPro kustomize % kustomize version
Version: {KustomizeVersion:3.2.0 GitCommit:a3103f1e62ddb5b696daa3fd359bb6f2e8333b49 BuildDate:2019-09-18T16:26:36Z GoOs:darwin GoArch:amd64}
Kubeflow를 설치하는 방법으로는 단일 명령어 설치와 개별 컴포넌트 설치가 있다.
github에서 Kubeflow Manifests 최신 소스를 복제한다.
git clone https://github.com/kubeflow/manifests.git
(base) noharam@nohalam-ui-MacBookPro minikube % git clone https://github.com/kubeflow/manifests.git
'manifests'에 복제합니다...
remote: Enumerating objects: 24463, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 24463 (delta 5), reused 8 (delta 2), pack-reused 24445
오브젝트를 받는 중: 100% (24463/24463), 41.43 MiB | 5.49 MiB/s, 완료.
델타를 알아내는 중: 100% (14559/14559), 완료.
Updating files: 100% (7077/7077), 완료.
(base) noharam@nohalam-ui-MacBookPro minikube % ls
manifests
(base) noharam@nohalam-ui-MacBookPro minikube % cd manifests
(base) noharam@nohalam-ui-MacBookPro manifests %
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
minikube stop
2. vim ~/.minikube/config/config.json
(설정 변경 후 저장해주세요) 3. minikube start
입니다.minikube delete
로 클러스터를 삭제한 후 설정을 바꿔 새로 클러스터를 생성하시기 바랍니다.k get svc istio-ingressgateway -n istio-system
(base) noharam@nohalam-ui-MacBookPro manifests % minikube profile mk
✅ minikube profile was successfully set to mk
(base) noharam@nohalam-ui-MacBookPro manifests % m service list
|---------------------------|-----------------------------------------------------------|-------------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|---------------------------|-----------------------------------------------------------|-------------------|---------------------------|
| auth | dex | dex/5556 | http://192.168.64.5:32000 |
| cert-manager | cert-manager | No node port |
| cert-manager | cert-manager-webhook | No node port |
| default | kubernetes | No node port |
| istio-system | authservice | No node port |
| istio-system | cluster-local-gateway | No node port |
| istio-system | istio-ingressgateway | status-port/15021 | http://192.168.64.5:30850 |
| | | http2/80 | http://192.168.64.5:31050 |
| | | https/443 | http://192.168.64.5:30199 |
| | | tcp/31400 | http://192.168.64.5:30602 |
| | | tls/15443 | http://192.168.64.5:30088 |
| istio-system | istiod | No node port |
AWS에서 한달 간 별의 별 방법을 다 써서 해결방법을 찾아도 실패했던
컴포넌트간 아티팩트 전달 파이프라인입니다..
과연 온프레미스 환경에서는 동작할까요!?!?!?
와... 됩니다.... 감동.......
이 예제 토대로 데이터 패싱 연습해서 실무에 바로 적용해보도록 하겠습니다!
https://minikube.sigs.k8s.io/docs/tutorials/multi_node/
minikube start --driver=hyperkit --kubernetes-version=1.23.1 --memory=max —cpus=max --disk-size=55g --nodes 3 --profile miku