온프레미스로 kubeflow 구축하기

snooby·2022년 11월 30일
1

🦾 ML

목록 보기
16/16
post-thumbnail

개요

minikube에 Kubeflow 1.4.1을 설치한다.

Kubeflow 설치 방식이 버전 1.2까지는 kfctl를 사용하였으나, 1.3부터는 kustomize를 사용한다.
✓ 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을 포함하고 있다.

Minikube install

미니큐브 공식 홈페이지를 통해 brew install을 진행하겠습니다.

brew install minikube
# 드라이버 설치
brew install hyperkit

How to use Minikube

앞으로 Minikube kubectl을 이용해 작업을 진행할 것이기 때문에,
간단하게 미니쿠버를 어떻게 이용하는지 살펴봅시다.

1. 클러스터 시작

관리자 액세스 권한이 있는 터미널에서(루트로 로그인하지 않음) 다음을 실행합니다.
minikube start --driver=hyperkit --kubernetes-version=1.20.11 --memory=12288 —cpus=6 --disk-size=55g --profile mk

(base)  % 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) % 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 |
|---------|-----------|---------|--------------|------|----------|---------|-------|
  • 대시보드 확인
    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) ~ % 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)  ~ % kubectl config get-user    
    error: unknown command "get-user"
    See 'kubectl config -h' for help and examples
    (base)  ~ % 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

    Prerequisites

  • 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
  • Kustomize

✓ Kustomize는 kustomization 파일을 통해 Kubernetes 오브젝트를 사용자가 원하는 대로 변경하는(customize) 툴이다.

✓ 본 문서에서는 맥에 설치되어 있는 kustomize (v4.0.5)를 사용하였다.

Install Kustomize

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)  % kustomize version
Version: {KustomizeVersion:3.2.0 GitCommit:a3103f1e62ddb5b696daa3fd359bb6f2e8333b49 BuildD

Install Kubeflow

Kubeflow를 설치하는 방법으로는 단일 명령어 설치와 개별 컴포넌트 설치가 있다.

github에서 Kubeflow Manifests 최신 소스를 복제한다.
git clone https://github.com/kubeflow/manifests.git

(base) % 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)  % ls
manifests
(base) % cd manifests 
(base) % 

Kubeflow 1.4.1를 단일 명령어로 설치한다.
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done

  • Kubeflow의 Pod들이 정상적으로 기동 되었는지 확인한다.
    저는 cpus:4, memory=8196으로 설정했음에도 메모리가 부족해서 13개 정도의 pods가 계속 pending 상태로 진행하지 못하고 있습니다. 심지어 memory를 16g로 올려서 설정해도 마찬가지입니다.

설정 변경은
1. minikube stop
2. vim ~/.minikube/config/config.json(설정 변경 후 저장해주세요)
3. minikube start 입니다.

해당 방식으로는 hyperkit 드라이버로 설치한 경우에 가능하다는 이야기가 있습니다. 혹시 안될 경우 minikube delete로 클러스터를 삭제한 후 설정을 바꿔 새로 클러스터를 생성하시기 바랍니다.

Kubeflow Central Dashboard 접속

  • Dashboard에 접속하기 위한 URL 정보를 조회한다.
    Kubeflow Central Dashboard는 Istio를 통해서 제공되기 때문에 istio-ingressgateway 서비스의 NodePort 정보를 알아야 합니다.
    k get svc istio-ingressgateway -n istio-system

  • 서비스 리스트에서 http2/80의 URL를 찾아서 접속해주시면 됩니다!

  • Dashboard에 접속한다.

profile
DevOps 🐥

0개의 댓글