본문 바로가기
Engineering

[Set Up] Ubuntu에서 Virtualbox로 Kubeflow 환경 구성하기

by 박서현 2023. 2. 22.

1. VirtualBox 설치

2. Ubuntu VM 올리기

3. ssh 설정

4. Anaconda 설치

# 파이썬 3.8 버전의 conda 설치
wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
bash Anaconda3-2021.05-Linux-x86_64.sh

license -> enter / yes

conda init -> yes

설치 경로 -> 기본적으로 /home/{username}/에 설치, sudo 명령어를 사용하거나 root 계정이라면 /root/에 설치

source ~/anaconda3/bin/activate
# 또는 source /home/{username}/anaconda3/bin/activate

설치 시 conda init -> yes를 안 한 경우 

conda init
source ~/.bashrc

 

5. 도커 설치

공식 문서 참고 : https://docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

 

docs.docker.com

Linux post intall : https://docs.docker.com/engine/install/linux-postinstall/

 

Linux post-installation steps for Docker Engine

 

docs.docker.com

 

6. Minikube 설치 (v1.22.0)

# v1.22.0 다운로드
curl -LO https://storage.googleapis.com/minikube/releases/v1.22.0/minikube-linux-amd64

공식 문서 참고 : https://minikube.sigs.k8s.io/docs/start/

 

minikube start

minikube is local Kubernetes

minikube.sigs.k8s.io

 

7. kubectl 설치

공식 문서 "Install kubectl binary with curl on Linux" 참고 : https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux

 

Install and Set Up kubectl on Linux

Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.26 client can communicate with v1.25, v1.26, and v1.27 control planes. Using the latest compatible version of kubectl helps avoid

kubernetes.io

 

- 스왑 비활성화

# 추후 오류 방지
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo swapoff -a

 

8. Minikube설치

1) Kustomize 설치 (v3.2.0)

wget https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_linux_amd64
chmod +x kustomize_3.2.0_linux_amd64
sudo mv kustomize_3.2.0_linux_amd64 /usr/local/bin/kustomize

kustomize version

2) minikube start

minikube start --driver=docker \
  --cpus='4' --memory='12g' \
  --kubernetes-version=v1.23.8 \
  --bootstrapper=kubeadm \
  --extra-config=kubelet.authentication-token-webhook=true\
  --extra-config=kubelet.authorization-mode=Webhook \
  --extra-config=scheduler.bind-address=0.0.0.0 \
  --extra-config=controller-manager.bind-address=0.0.0.0 \
  --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key \
  --extra-config=apiserver.service-account-issuer=kubernetes.default.svc

만약 minikube 설치 중에 kubelet이 실행되지 않는다는 에러가 발생하면 k8s version을 1.23.8로 실행해 볼 것.

9. Kubeflow 설치

1) Git clone kubeflow/manifasts

git clone https://github.com/kubeflow/manifests.git

2) 컴포넌트 설치 (v1.4.0)

! 컴포넌트들을 설치할 때 오류가 발생한다면 최신버전의 manifests를 설치하면 된다.

cd manifests

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

"STDIN" 이 포함된 에러 메세지가 나올 경우 잠시 기다린 다음 설치 명령어를 다시 수행한다. 컴포넌트 사이에 의존성 때문에 특정 컴포넌트의 구성 파드가 Running되기 전에 설치 명령어를 수행할 경우 에러가 발생하는 경우가 있다.

! kubeflow pod 에러

kubectl get pods -ns kubeflow

pod 실행 로그를 보면  too many open files인 경우가 있다.

kubectl logs -n kubeflow ml-pipeline-859d8dd888-dx4jm

# too many open files

linux 시스템에서 사용자마다 열 수 있는 파일 수를 제한해두기 때문에 이 제한을 풀어야 한다. uimit -aS 명령어를 통해 open files 제한이 1024임을 알 수 있다.

ulimit -aS

# 사용자 ID당 작성할 수 있는 최대 인스턴스 수 정의
sudo sysctl fs.inotify.max_user_instances=1280
# 최대 사용자 수를 정의
sudo sysctl fs.inotify.max_user_watches=655360

3) kubeflow dashboard 접속

포트포워딩 : localhost:8080으로 kubeflow 대시보드에 접속

kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
  • kubeflow manifests 배포할 때, Dex 설치 시에 접속 정보 설정을 변경하지 않으면 default 정보로 접속하면 된다

 

10. Tunneling

Local Laptop/Desktop -  ( Remote Server - VM ) 으로 환경을 구성한 경우

  1. Remote Server에 접속할 때 MobaXterm을 이용하는 것을 권장
  2. 9.5) kubeflow dashboard에서 localhost:8080에서 localhost는 RemoㅅeServer를 의미.
  3. MobaXterm의 Tunneling 기능을 이용해 Local Laptop/Desktop에서 VM의 Kubeflow Dashboard 접속 가능 
  4. 아래 그림(MobaXterm Tunneling)에서 하얀색으로 색칠한 부분은 VM 접속 정보(Bridge 네트워크 IP, 사용자이름, Port)다. Remote Server는 VM 안에서 Kubeflow Dashboard를 받는 IP, Port다. (127.0.0.1:8080으로 고정) Local clients에는 Local Laptop/Desktop에서 VM에 연결할 포트번호를 임의로 지정한다. 기존에 점유하고 있는 Port로 설정을 가능하다 Tunneling 실행이되지 않으니 유의해야 한다. (특히 아무런 feedback이 없어 어떤 이유로 실행이 안되는지 파악하기 힘들다.) 
  5. 이후 Laptop/Desktop에서 Internet Browser에 localhost:8080을 입력해 Kubeflow Dashboard에 접속할 수 있다.

'Engineering' 카테고리의 다른 글

도커와 컨테이너와 쿠버네티스  (0) 2022.11.18