본문 바로가기 대메뉴 바로가기

테크니컬 스토리

아이티마야의 새로운 기술 뉴스를 만나보세요.
Kubeflow 설치 및 활용
등록일
2023.05.16
첨부파일
오픈소스 MLOps 중 가장 많이 사용하는 Kubeflow 설치 및 활용 방안
Kubeflow 설치 및 활용
  • Kubeflow 사용 이유

Kubeflow는 오픈소스로 구성된 MLOps 제품입니다. 분석/트레이닝/서빙을 모두 처리할 수 있고, 사용방법이 쉽습니다.

  • 전제 조건
  • 1.kubenetes (1개 노드 이상 구성)
  • 2.Default Storage Class
  • 3.(선택) Master Node
  • kustomize 설치
snap repo에서 설치하는 kustomize 5.0.1 버전은 호환 문제가 있어, kustomize는 아래 방식으로 구성합니다.
  • $ sudo snap remove kustomize
  • $ curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
  • $ sudo mv kustomize /usr/local/bin/
  • kubeflow manifest 다운로드
1.6.1 버전으로 구성 시 기본 istio-gateway 구성이 NodePort로 되어 있어 외부 접속이 가능한 상태로 구성됩니다.
SSL 인증도 마찬가지로 외부 접속이 가능한 상태로 구성되어 별도의 수정이 필요 없습니다.
그 외 모든 버전은 istio 기본 구성이 ClusterIP입니다.
  • $ cd ~
  • $ git clone -b v1.6.1 https://github.com/kubeflow/manifests.git
  • kustomize 설치
  • $ cd ~/manifests
  • $ while ! kustomize build example | awk '!/well-defined/' | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
  • 구성 확인
  • $ kubectl get pod -A
pod 초기화 및 컨테이너 생성에 상당한 시간이 소요됩니다.
만약 pod 생성 중 에러가 나거나, imagepull 이 되지 않는다면, pod 생성 순서가 잘못되어 있을 수 있습니다.
설치 스크립트를 다시 실행하면 재구성됩니다.
  • dashboard 접근
istio gateway 가 nodeport 서비스로 변경되고, 80포트와 연결된 포트를 확인합니다.
  • $ kubectl get svc istio-ingressgateway -n istio-system
  • dex 기본 계정
  • 계정 : user@example.com
  • 비번 : 12341234
  • K8s Dashboard 설치
  • $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
  • K8s Dashboard NodePort 변경
  • $ kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
  • selector:
  •   k8s-app: kubernetes-dashboard
  •  sessionAffinity: None
  •  type: NodePort ###########변경
  • status:
  •  loadBalancer: {}
  • K8s Dashboard Role 추가
  • $ vi kuebernetes-dashboard-service-account.yaml
  • apiVersion: v1
  • kind: ServiceAccount
  • metadata:
  •   name: admin-user
  •   namespace: kube-system
  • ---
  • apiVersion: rbac.authorization.k8s.io/v1
  • kind: ClusterRoleBinding
  • metadata:
  •   name: admin-user
  • roleRef:
  •   apiGroup: rbac.authorization.k8s.io
  • kind: ClusterRole
  •   name: cluster-admin
  • subjects:
  • - kind: ServiceAccount
  •   name: admin-user
  •   namespace: kube-system
  • $ kubectl apply -f kuebernetes-dashboard-service-account.yaml
  • 토큰확인
  • $ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
  • K8s 대시보드 접근
443 포트와 포워딩된 포트로 사용합니다. (https://IPaddress로 접속)
  • $ kubectl get svc kubernetes-dashboard -n kubernetes-dashboard
PLEASE WAIT WHILE LOADING...