일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 시험
- cloud monitor
- 알리바바클라우드
- hashicorp
- CKAD
- alibabacloud
- helm
- recreate
- kubeadm
- alibaba cloud
- Naver Cloud
- Deployment
- Kubernetes
- GIT
- NCP
- Cluster
- IAC
- cicd
- RollingUpdate
- alibaba
- argocd
- slack
- terraform
- 자동화
- 테라폼
- cloudmonitor
- slack app
- k8s
- 네이버클라우드
- 쿠버네티스
- Today
- Total
Room9
Kubeflow 1.4 설치 본문

Overview
앞서 Kubernetes Cluster H/A 구성은 Kubeflow 설치를 위해 구축을 진행하였습니다. Kubeflow는 Kubernetes + ML flow를 합한 의미로, 파이프라인이라는 ML워크플로를 구축하고 배포하기 위해 제공되는 플랫폼입니다. 개발, 테스트 및 프로덕션 수준 서비스를 위해 다양한 환경에 ML 시스템을 배포하려는 ML 엔지니어 및 운영 팀을 위한 것입니다.
Kubeflow는 Kubernetes용 ML 툴킷입니다 .
다음 다이어그램은 Kubernetes 위에 ML 시스템의 구성 요소를 정렬하기 위한 플랫폼으로 Kubeflow를 보여줍니다.

Kubeflow 는 복잡한 시스템을 배포, 확장 및 관리하기 위한 시스템 으로 Kubernetes 를 기반으로 합니다.
Kubeflow 구성 인터페이스를 사용하여 워크플로에 필요한 ML 도구를 지정할 수 있습니다. 그런 다음 실험 및 프로덕션 사용을 위해 다양한 클라우드, 로컬 및 온프레미스 플랫폼에 워크플로를 배포할 수 있습니다.
자세한 내용은 링크를 확인하여주시면 됩니다.
- 이미 쿠버네티스 기반의 인프라가 있거나, 새로운 머신 러닝 플랫폼을 만들려는 경우
- 다양한 환경(예 : 로컬, 온 프레미스 및 클라우드)에서 머신 러닝 모델을 학습하거나 서비스하려는 경우
- 자원(예 : CPU 또는 GPU)를 할당하여 작업을 하려는 경우
- Jupyter 노트북을 사용하여 머신 러닝 작업을 하려는 경우
- Kubeflow에는 Jupyter 노트북 생성 및 관리를 위한 서비스를 이용할 때
- Kubeflow Pipelines는 Docker 컨테이너를 기반으로하는 다단계 ML 워크 플로를 구축, 배포 및 관리할 때
- Kubeflow는 여러 플랫폼에서 ML 학습, 초 매개 변수 조정, 워크로드를 자동으로 작업하려는 경우
Detail
- Kustomize install
- Helm
- NFS Client Provisioner
- Kubeflow install
- NAVER Cloud Network Proxy LoadBalancer config
Kustomize install
Kustomize는 쿠버네티스 리소스를 배포하고 관리할 수 있게 도와주는 패키지 매니징 도구입니다. 다른 도구로는 나중에 설치할 Helm이 있습니다.
Kubeflow를 설치하기 위해 3.2 버전이 필요하다고 되어 있어 3.2 또는 3.10 버전을 설치 하시면됩니다.
wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.10.0/kustomize_v3.10.0_linux_amd64.tar.gz
다운 받아진 Kustomize 압축을 풀고 파일의 위치를 변경하여 사용할 준비를 합시다.
tar -zxvf kustomize_v3.10.0_linux_amd64.tar.gz
sudo mv kustomize /usr/local/bin/kustomize
설치 확인
kustomize version
{Version:kustomize/v3.10.0 GitCommit:602ad8aa98e2e17f6c9119e027a09757e63c8bec BuildDate:2021-02-10T00:00:50Z GoOs:linux GoArch:amd64}
Helm
Kustomize와 마찬가지로 Helm도 패키지 설치 매니저입니다. 해당 글에서는 NFS Client Provisioner 설치를 위해 Helm을 설치하고 사용합니다.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
설치 확인
helm version
version.BuildInfo{Version:"v3.8.2", GitCommit:"6e3701edea09e5d55a8ca2aae03a68917630e91b", GitTreeState:"clean", GoVersion:"go1.17.5"}
NFS Client Provisioner
쿠버네티스에서 볼륨을 할당하는 방법은 여러가지가 있습니다. 그중 동적 볼륨 할당을 위해서는 NFS Client Provisioner를 사용하여 네이버 클라우드에 생성된 쿠버네티스 클러스터에 설치하여 NAS를 이용한 동적 볼륨 할당을 진행하겠습니다.


모든 노드에서 NAS에 접근 할수 있도록 설정해줍니다.
이후 마스터 노드에서 NFS Client Provisioner 를 설치하겠습니다.
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server={NAS 서버정보} --set nfs.path=/{네이버클라우드 NAS Path}
kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
helm repo에 nfs-subdir-external-provisioner가 있는 저장소를 추가해주고, 본인의 NAS정보를 기입한 후 install 해줍니다. 이후 storagecalss를 기본으로 사용하게 defaults 설정을 해주면 완료입니다.
storageclass가 생성되었는지 확인 이후 pvc를 통해 호출하게되면 자동으로 pv가 생성되는것을 확인 할 수 있습니다.
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-client (default) cluster.local/nfs-subdir-external-provisioner Delete Immediate true 10d
Kubeflow install
Kubeflow v1.4.0버전을 설치 하기 위해, 설치에 필요한 manifests 파일들을 다운 받습니다.
git clone -b v1.4.0 https://github.com/kubeflow/manifests.git
cd manifests
manifests 폴더에서 확인해보면 Kubeflow에 각 구성요소들을 볼 수 있습니다. 개별적으로 각 구성요소들을 설치할수도 있습니다. 해당글에서는 설치 목적의 글이라 통합 설치를 진행하도록하겠습니다. (각 구성요소별 역할이라든지 설치방법에 대해 알아볼 필요가 있습니다.)
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
kubectl get pod -A | egrep 'NAME|^auth|^cert-manager|^istio-system|^knative-|^kubeflow'
NAMESPACE NAME READY STATUS RESTARTS AGE
auth dex-5ddf47d88d-2f5tb 1/1 Running 1 10d
cert-manager cert-manager-7dd5854bb4-5pl67 1/1 Running 0 10d
cert-manager cert-manager-cainjector-64c949654c-7j2h8 1/1 Running 0 10d
cert-manager cert-manager-webhook-6b57b9b886-q5l48 1/1 Running 0 10d
istio-system authservice-0 1/1 Running 0 10d
istio-system cluster-local-gateway-75cb7c6c88-fbz7c 1/1 Running 0 10d
istio-system istio-ingressgateway-79b665c95-ggwgx 1/1 Running 0 10d
istio-system istiod-86457659bb-4vl5b 1/1 Running 0 10d
knative-eventing eventing-controller-79895f9c56-4t94v 1/1 Running 0 10d
knative-eventing eventing-webhook-78f897666-pqp7j 1/1 Running 0 10d
knative-eventing imc-controller-688df5bdb4-68kl6 1/1 Running 0 10d
knative-eventing imc-dispatcher-646978d797-tcn7x 1/1 Running 0 10d
knative-eventing mt-broker-controller-67c977497-7pdt5 1/1 Running 0 10d
knative-eventing mt-broker-filter-66d4d77c8b-swnlj 1/1 Running 0 10d
knative-eventing mt-broker-ingress-5c8dc4b5d7-vcztv 1/1 Running 0 10d
knative-serving activator-7476cc56d4-xrwzk 1/1 Running 0 10d
knative-serving autoscaler-5c648f7465-qrl6k 1/1 Running 0 10d
knative-serving controller-57c545cbfb-hfcb4 2/2 Running 1 10d
knative-serving istio-webhook-578b6b7654-b7tnp 2/2 Running 1 10d
knative-serving networking-istio-6b88f745c-rv8cf 2/2 Running 1 10d
knative-serving webhook-6fffdc4d78-2mmpv 2/2 Running 1 10d
kubeflow-user-example-com ml-pipeline-ui-artifact-5dd95d555b-xs65x 2/2 Running 0 10d
kubeflow-user-example-com ml-pipeline-visualizationserver-6b44c6759f-m8h68 2/2 Running 0 10d
kubeflow admission-webhook-deployment-667bd68d94-vskzx 1/1 Running 0 10d
kubeflow cache-deployer-deployment-79fdf9c5c9-7rd85 2/2 Running 1 10d
kubeflow cache-server-6566dc7dbf-lbpkf 2/2 Running 0 10d
kubeflow centraldashboard-8fc7d8cc-fxkt4 1/1 Running 0 10d
kubeflow jupyter-web-app-deployment-84c459d4cd-5pktf 1/1 Running 0 10d
kubeflow katib-controller-68c47fbf8b-j85zd 1/1 Running 0 10d
kubeflow katib-db-manager-6c948b6b76-zkrkd 1/1 Running 0 10d
kubeflow katib-mysql-7894994f88-svst2 1/1 Running 0 10d
kubeflow katib-ui-64bb96d5bf-5tcdq 1/1 Running 0 10d
kubeflow kfserving-controller-manager-0 2/2 Running 0 10d
kubeflow kfserving-models-web-app-5d6cd6b5dd-v5872 2/2 Running 0 10d
kubeflow kubeflow-pipelines-profile-controller-69596b78cc-99b96 1/1 Running 0 10d
kubeflow metacontroller-0 1/1 Running 0 10d
kubeflow metadata-envoy-deployment-5b4856dd5-mn8pl 1/1 Running 0 10d
kubeflow metadata-grpc-deployment-6b5685488-hgcg6 2/2 Running 2 10d
kubeflow metadata-writer-548bd879bb-6xnzk 2/2 Running 0 10d
kubeflow minio-5b65df66c9-rhzbm 2/2 Running 0 10d
kubeflow ml-pipeline-847f9d7f78-hrvcw 2/2 Running 5 10d
kubeflow ml-pipeline-persistenceagent-d6bdc77bd-76bnw 2/2 Running 0 10d
kubeflow ml-pipeline-scheduledworkflow-5db54d75c5-zj4g9 2/2 Running 0 10d
kubeflow ml-pipeline-ui-5bd8d6dc84-rbsks 2/2 Running 0 10d
kubeflow ml-pipeline-viewer-crd-68fb5f4d58-cjshh 2/2 Running 1 10d
kubeflow ml-pipeline-visualizationserver-8476b5c645-snwk6 2/2 Running 0 10d
kubeflow mpi-operator-5c55d6cb8f-d5qm9 1/1 Running 2 10d
kubeflow mysql-f7b9b7dd4-mlg28 2/2 Running 0 10d
kubeflow notebook-controller-deployment-6b75d45f48-dd6sh 1/1 Running 0 10d
kubeflow profiles-deployment-58d7c94845-hmf7v 2/2 Running 0 10d
kubeflow tensorboard-controller-controller-manager-775777c4c5-wp5rz 3/3 Running 1 10d
kubeflow tensorboards-web-app-deployment-6ff79b7f44-ns5g6 1/1 Running 0 10d
kubeflow training-operator-7d98f9dd88-74fhw 1/1 Running 0 10d
kubeflow volumes-web-app-deployment-8589d664cc-k98xn 1/1 Running 0 10d
kubeflow workflow-controller-5cbbb49bd8-q6kkn 2/2 Running 2 10d
각 요소들이 모두 running 중인지 확인합니다.
설치 확인을 위해 Central Dashboard에 접속해봅시다.
초기 계정은 변경이 없다면
user@exmaple.com
12341234
입니다.
kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
authservice ClusterIP 10.102.59.208 <none> 8080/TCP 10d
cluster-local-gateway ClusterIP 10.101.170.47 <none> 15020/TCP,80/TCP 10d
istio-ingressgateway NodePort 10.107.14.178 <none> 15021:30854/TCP,80:31501/TCP,443:32728/TCP,31400:30170/TCP,15443:30722/TCP 10d
istiod ClusterIP 10.100.12.188 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 10d
knative-local-gateway ClusterIP 10.109.83.159 <none> 80/TCP
istio-ingressgateway가 LB가 없어 NodePort로 서비스 되고 있는걸 확인하였습니다.
노드IP:31501 접속시 Central Dashboard를 볼 수 있습니다.

NAVER Cloud Network Proxy LoadBalancer config
현재 Central Dashboard는 Kubeflow가 설치된 Kubernetes Cluster 와 통신이 가능한 사설IP대역에서만 접근이 가능합니다. 외부로 해당 서비스를 노출하기 위해 여러가지 방법이 있겠지만 가장 심플한 네이버클라우드의 LB를 통해 내부에 있는 Central Dashboard를 노출하였습니다.
네이버 클라우드의 LB 사용을 위해 Target Port 구성을 진행합니다. 클러스터의 istio-gateway가 31501포트를 열고 있어
LB의 타겟포트는 31501로 구성하였습니다.


NodePort 특성상 노드의 어떤 IP로도 접속이 가능하기 때문에 적용 Target 서버는 클러스터의 모든 노드로 생성하였습니다.

해당 Target 그룹을 대상으로하는 공인 LB를 생성하고 접속정보를 통해서 접속시에 Central Dashboard를 확인 할 수있습니다.
