호돌찌의 AI 연구소
article thumbnail

 

1. 개념

Kubenetes 위에서 DS, ML Engineer, 분석가 등 모델 학습, 서빙하는 것이 처음부터는 쉽지가 않습니다. 구글에서 kubeflow라는 프로젝트를 만들었습니다. 이 것은 모듈별로 쪼개져 있는 것이 핵심입니다. 구성요소가 Experiments 페이즈와 Production 페이즈로 나누어져 있습니다.  여기에 한번 그림과 내용을 참고하시는 것을 추천드립니다. 

https://www.kubeflow.org/docs/started/architecture/#introducing-the-ml-workflow
https://www.kubeflow.org/docs/started/architecture/#introducing-the-ml-workflow

 

 

2. Pipeline 

쿠버네티스에서 Pipeline이라는 것이 핵심이라고 할 수 있습니다.

Pipeline의 정의는 다음과 같습니다. 

Pipeline의 목표는 다음과 같습니다.

Pipeline의 아키텍처는 아래와 같습니다. 

https://www.kubeflow.org/docs/components/pipelines/introduction/

 

3. kustomize란?

이제 kubeflow를 설치할 예정인데 그전에 알아야 할 명령어 중 하나가 kustomize입니다. helm과 비슷한 역할을 담당합니다. 여러 개의 yaml 파일을 쉽게 관리하기 위한 도구라고 보면 됩니다. 여러 resource 들의 configuration을 템플릿(base)과 Customization한 부분(overlay)을 나누어서 관리할 수 있는 도구입니다. "kustomize build" 명령을 통해 base + overlay 가 merge 된 형태의 yaml 파일들을 generate 할 수 있습니다.

 

4. kubeflow 설치 방식

3가지 방식이 존재합니다. kfctl, Minikf 방식이 있지만 공식적으로 지원하지 않는 버전이나 특정 버전까지만 release 되는 경우이기 때문에 Kubeflow manifests 방식으로 설치합니다. 가장 정석적인 방법이며 Kustomize v3 기반으로 manifests 파일을 관리합니다.

Repository

 

GitHub - kubeflow/manifests: A repository for Kustomize manifests

A repository for Kustomize manifests. Contribute to kubeflow/manifests development by creating an account on GitHub.

github.com

5. kubeflow 설치

아래 환경 아래에서 설치를 합니다. 

  • Kubernetes 환경
    • 버전 : v1.17 ~ v1.21
      • v1.19.3 사용
    • Default StorageClass
      • Dynamic provisioning 지원하는 storageclass
    • TokenRequest API 활성화
      • alpha version의 API 이므로, k8s APIServer에 해당 feature gate를 설정해주어야 함
  • Kustomize
    • 버전 : v3.x
      • v3.2.0 사용

 

step 1) kustomize 설정

바이너리를 다운로드하는데, os에 맞게 다운로드합니다. https://github.com/kubernetes-sigs/kustomize/releases/tag/v3.2.0 

 

Release v3.2.0 · kubernetes-sigs/kustomize

Changelog f59d799 Add an example of reusable builtin plugins with custom config. 3f1b2bb Add configs aabbbf0 Add cover target to Makefile 5dfa929 Add create subcommand ed91bce Add example plugin fo...

github.com

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

# file mode 변경
chmod +x kustomize_3.2.0_linux_amd64

# file 위치 변경
sudo mv kustomize_3.2.0_linux_amd64 /usr/local/bin/kustomize

# 버전 확인
kustomize version

 

step 2) minikube start

저 같은 경우, kubernetes version이 안 맞아서 kubernetes delete를 수행 후 아래를 수행하였습니다. 

# minikube start
# docker driver option
# cpu 4 개 할당
# memory 7g 할당
# kubernetes version v.19.3 설정
# --extra-config 부분은 tokenRequest 활성화 관련 설정
minikube start --driver=docker \
  --cpus='4' --memory='7g' \
  --kubernetes-version=v1.19.3 \
  --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key \
  --extra-config=apiserver.service-account-issuer=kubernetes.default.svc

다음과 같이 default-storageclass는 기본적으로 addon 이 활성화되어있습니다.

🔎  Kubernetes 구성 요소를 확인...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  애드온 활성화 : storage-provisioner, default-storageclass

 

 

 

 

 

 

 

 

 

step 3) manifests git clone 하기

https://github.com/kubeflow/manifests

 

GitHub - kubeflow/manifests: A repository for Kustomize manifests

A repository for Kustomize manifests. Contribute to kubeflow/manifests development by creating an account on GitHub.

github.com

 

mkdir kubeflow-tutorial
cd kubeflow-tutorial

# git clone
git clone git@github.com:kubeflow/manifests.git


cd manifests

# v1.4.0 태그 시점으로 git checkout
git checkout tags/v1.4.0

 

step 4) 각각의 kubeflow 구성 요소 순서대로 설치하기

아래 깃허브에서의 README를 살펴보면 한 줄로 설치하는 것과 각각의 Componentes들을 하나씩 설치하는 방법들이 있습니다. 

https://github.com/kubeflow/manifests/tree/v1.4.0

 

GitHub - kubeflow/manifests: A repository for Kustomize manifests

A repository for Kustomize manifests. Contribute to kubeflow/manifests development by creating an account on GitHub.

github.com

 

이번 블로그에서 다루지 않는, Knative, KFServing, Training Operator, MPI Operator 들을 설치를 진행하지 않습니다. 아래에 cert-manager, istio,.... 수많은 components들이 있는데 kustomize build를 통해 하나씩 설치합니다. 

위의 그림에서 파란색으로 친 명령어 뿐만아니라 설치하고 싶은 Components에 대해서 모두 수행한다. 

여기서 kustomize build의 동작을 확인해보면 | pipe 연산자를 활용하여, kustomize build 의 결과물을 kubectl apply -f - 하여 적용한다는 것입니다. (즉, "kustomize build {components} | kubectl apply -f - )

 

하나씩 component를 설치하면서 볼 때 유의해야 할 점은 아래와 같이 error가 나타날 때가 있습니다.

조금만 있다가 설치하기

이는 순서대로 설치하는 데 있어서 선행 component가 설치가 아직 덜 되어서 나타나는 현상입니다. 그래서 조금만 있다가 수행하면 정상적으로 설치될 것입니다. 

성공

 

step 5) 모든 Components가 Running 이 될 때까지 하염없이 기다리기

kubectl get po -A -w
# pod 모든 namespace들 모니터링

 

각각의 Components에 도커 이미지들을 한꺼번에 pull을 받으려고 하다 보니 최초 실행 시에는 네트워크 상황에 따라 각각의 Kubeflow Components이 모두 러닝 되기까지 최대 30분 정도까지 소요가 됩니다. 

 

 

여러 Components의 상태가 "PodInitializing" > "ContainerCreating"으로 진행되지만 시간이 오래 걸리는 경우라면 정상적인 상황이지만, 상태가 "Error" or "CrashLoopBackOff" 라면 초기에 minikube start 시 설정을 다시 확인해주어야 합니다. 

조금 더 기다려야한다. 40분을 기다린 상태

 

 

6. Kubeflow 접속하기

Port Forwarding으로 접속합니다. 새 터미널을 켜서 수행합니다.

kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:8

그다음 gateway를 포트 포워딩하여 localhost:8080으로 kubeflow 대시보드에 접속합니다. kubeflow manifests 배포 시, user 접속 정보 관련 설정을 변경하지 않은 경우의 default 접속 정보는 아래와 같습니다.

접속하면 위와 같은 대시보드를 볼 수 있다. 

 

 

7. 다른 유용한 도구

추후 블로그 글에서 이 도구들이 설치가 되어있다고 가정하고 수행할 예정입니다. 

  • kubectx & kubens
    • https://github.com/ahmetb/kubectx
      • Install 방법도 매우 간편
    • kubernetes의 current-context와, kubernetes의 current-namespace를 변경할 수 있는 Tool 입니다.
      • 여러 개의 context 나 namespace를 다루는 경우에 유용하게 사용할 수 있습니다.
    • ex)
      • kubens kubeflow를 수행하면 현재 바라보고 있는 namespace 가 kubeflow로 변경됩니다.
  • kubectl-alias
    • https://github.com/ahmetb/kubectl-aliases
    • kubectl 관련 여러 명령어에 대한 alias를 자동 생성합니다.
      • 자주 사용하는 명령을 쉽게 수행할 수 있습니다. 아래 예시는 다음과 같습니다.
    • ex)
      • kubectl get pod → kgpo
      • kubectl get deployment -w → kgdepw

 

 

다음 글부터는 기능들을 조금씩 알아보겠습니다. 

 

 

 

 


https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!