GitHub
쿠브플로우 관련 코드 내용은 GitHub에서 관리하고 있습니다.
https://github.com/Seokii/Study-MLOps
1. 컴퓨터 사양
제 PC 환경 및 사양은 다음과 같습니다.
OS : Ubuntu 22.04.1 LTS -> 20.04 LTS
CPU : AMD Ryzen 5 5600X 6-Core Processor
GPU : GeForce RTX 3070
본래는 윈도우로 사용하던 컴퓨터지만 실습하기 위해서 포맷하고 Ubuntu로 환경을 구성했습니다.
공부하는 책을 참고하여 도커, nvidia-docker, kubeadm, kubelet 등의 패키지를 설치하고
쿠버네티스를 설치하는 과정을 진행하고 있었는데,
저의 환경인 ubuntu 22.04에는 버전이 일치하지 않았고 책의 발간도 2020년이라서 매우 오류가 많이 발생했습니다. 그래서 열심히 구글링하고 삽질한 끝에 Microk8s의 존재를 알게 되었고,
Microk8s와 같이 구동할 수 있는 charmed kubeflow를 설치하게 되었습니다.
우분투 22.04에서 일반적인 쿠버네티스, Micro8ks, minikube 방식으로 모두 시도했으나 전부 과정 중에 에러가 발생하고 진행이 되지 않아 우분투를 20.04로 포맷하고 다시 진행했습니다.
kubernetes, microk8s, minikube도 다 실패했기 때문에 k3s 설치를 진행했습니다 ㅠㅠ
(2023.01.07 내용추가)
kubeflow fairing 공부 도중 계속 진행이 잘 되지 않고, 많은 에러들과 마주해서 우분투 버전을 낮추고는 시도해보지 않았기 때문에, 쿠버네티스와 쿠브플로우를 다시 설치하고자 결심하고 재진행했습니다.
현재 최신의 kubeflow v1.6으로 다시 설치가 완료되었습니다.
8번으로 이동해 내용을 확인할 수 있습니다.
2. Docker 설치
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release
도커 설치에 필요한 APT 패키지를 설치합니다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt-get update
apt-cache madison docker-ce | grep 5:20.10.11~3-0~ubuntu-focal
sudo apt-get install -y containerd.io docker-ce=5:20.10.11~3-0~ubuntu-focal docker-ce-cli=5:20.10.11~3-0~ubuntu-focal
sudo docker run hello-world
명령어를 순서대로 입력하고, 도커를 설치합니다.
과정은 도커의 GPG key를 받아오고, 원하는 도커의 버전을 지정하여 다운로드 하는 과정입니다.
sudo docker run hello-world 명령어를 톻애 도커가 정상적으로 설치되었음을 확인할 수 있습니다.
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
위 과정을 통해 도커 명령어를 sudo 키워드 없이 실행가능하도록 설정합니다.
3. kubectl 설치
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo swapoff -a
swap 가상메모리 종료를 통해 kubeclt이 정상적으로 작동할 수 있도록 합니다.
curl -LO https://dl.k8s.io/release/v1.21.7/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
kubectl을 다운로드하고 설치한 후, 잘 설치되었는지 버전을 확인합니다.
4. K3s 설치
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.21.7+k3s1 sh -s - server --disable traefik --disable servicelb --disable local-storage --docker
sudo cat /etc/rancher/k3s/k3s.yaml
순서대로 명령어를 입력해 k3s를 설치합니다.
sudo cat /etc/rancher/k3s/k3s.yaml 명령어를 입력해 yaml파일의 내용이 출려된다면 정상적으로 설치된 것입니다.
mkdir .kube
sudo cp /etc/rancher/k3s/k3s.yaml .kube/config
sudo chown $USER:$USER .kube/config
쿠버네티스 클러스터 세팅을 진행합니다.
k3s config를 클러스터의 kubeconfig로 사용하기 위해 복사합니다.
5. 기본 모듈 설치
# Helm 설치
wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz
tar -zxvf helm-v3.7.1-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
# Helm 설치 확인
helm help
# Kustomize 설치
wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.10.0/kustomize_v3.10.0_linux_amd64.tar.gz
tar -zxvf kustomize_v3.10.0_linux_amd64.tar.gz
sudo mv kustomize /usr/local/bin/kustomize
# Kustomize 설치 확인
kustomize help
# CSI Plugin 설치
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.20/deploy/local-path-storage.yaml
# CSI Plugin 설치 확인
kubectl -n local-path-storage get pod
# default storage class로 설정
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
# default storage class 확인
kubectl get sc
# 최종 확인
kubectl get nodes -o wide
명령어를 입력하고 Helm, Kustomize 등 필요한 모듈을 다운로드 하고 설치합니다.
kubectl get nodes -o wide 명령어를 통해 최종적으로 os, docker 버전 등을 확인합니다.
6. Kubeflow 설치
git clone -b v1.4.0 https://github.com/kubeflow/manifests.git
cd manifests
앞서 설치했던 kustomize를 통해 kubeflow를 설치할 수 있습니다.
필요한 kubeflow 파일을 깃으로 받아오고 폴더로 이동합니다.
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
위 명령어로 모든 구성 요소들을 한 번에 설치할 수 있지만,
설치하면서 에러가 발생할 수도 있기 때문에 필요한 구성 요소를 각각 설치했습니다.
아래의 과정처럼 진행해도 되고, 위의 명령어를 통해 설치해도 무방합니다.
6.1. Cert-manager
kustomize build common/cert-manager/cert-manager/base | kubectl apply -f -
명령어를 통해 위와 같은 화면이 나오면 정상적으로 설치된 것입니다.
kubectl get pod -n cert-manager
cert-manager의 pod가 모두 Running 상태임을 확인했습니다.
정상적으로 설치되었다면, 위와 같은 출력 결과가 나옵니다.
6.2. Istio
kustomize build common/istio-1-9/istio-crds/base | kubectl apply -f -
kustomize build common/istio-1-9/istio-namespace/base | kubectl apply -f -
Istio CRD와 Istio namespace를 설치한 결과입니다.
kustomize build common/istio-1-9/istio-install/base | kubectl apply -f -
kubectl get po -n istio-system
명령어를 통해 Istio를 설치하고 확인합니다.
두 개의 pod가 모두 Running 상태임을 확인합니다.
6.3. Dex
kustomize build common/dex/overlays/istio | kubectl apply -f -
kubectl get po -n auth
Dex를 설치하고 pod를 확인합니다.
6.4. OIDC AuthService
kustomize build common/oidc-authservice/base | kubectl apply -f -
kubectl get po -n istio-system -w
OIDC AuthService를 설치하고 결과를 확인합니다.
6.5. 나머지
# kubeflow namespace
kustomize build common/kubeflow-namespace/base | kubectl apply -f -
kubectl get ns kubeflow
# kubeflow roles
kustomize build common/kubeflow-roles/base | kubectl apply -f -
kubectl get clusterrole | grep kubeflow
# kubeflow istio resources
kustomize build common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f -
kubectl get clusterrole | grep kubeflow-istio
kubectl get gateway -n kubeflow
# kubeflow piplines
kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -
kubectl get po -n kubeflow # 모든 pod가 running이 될 때까지 기다리기! 오래 걸림!
# ml pipeline 접속 확인하기
# 아래의 명령어 입력후 웹 브라우저에서 http://localhost:8888로 접속해서 확인하기
kubectl port-forward svc/ml-pipeline-ui -n kubeflow 8888:80
# katib
kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f -
kubectl get po -n kubeflow | grep katib
# central dashboard
kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f -
kubectl get po -n kubeflow | grep centraldashboard
# pipeline 과정처럼 running 확인 후, 웹 브라우저로 확인하기
kubectl port-forward svc/centraldashboard -n kubeflow 8082:80
# admission webhook
kustomize build apps/admission-webhook/upstream/overlays/cert-manager | kubectl apply -f -
kubectl get po -n kubeflow | grep admission-webhook
# notebooks & jupyter web app
kustomize build apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f -
kubectl get po -n kubeflow | grep notebook-controller
kustomize build apps/jupyter/jupyter-web-app/upstream/overlays/istio | kubectl apply -f -
kubectl get po -n kubeflow | grep jupyter-web-app
# profiles, kfam
kustomize build apps/profiles/upstream/overlays/kubeflow | kubectl apply -f -
kubectl get po -n kubeflow | grep profiles-deployment
# volumes web app
kustomize build apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f -
kubectl get po -n kubeflow | grep volumes-web-app
# tensorboard, tensorboard web app
kustomize build apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f -
kubectl get po -n kubeflow | grep tensorboards-web-app
kustomize build apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f -
kubectl get po -n kubeflow | grep tensorboard-controller
# training operator
kustomize build apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f -
kubectl get po -n kubeflow | grep training-operator
# user namespace
kustomize build common/user-namespace/base | kubectl apply -f -
kubectl get profile
kubeflow를 사용하면서 더 필요한 구성 요소들은 위와 같은 방법으로 설치하면 됩니다.
7. 최종 확인
kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
email address : user@example.com
password : 12341234
로 접속하면 kubeflow가 드디어 설치되었음을 확인할 수 있습니다!
8. kind를 이용해 쿠버네티스 설치
2번, 3번, 5번 과정 진행 후 다음을 진행합니다.
/usr/local/bin/k3s-uninstall.sh
해당 명령어로 우선적으로 k3s를 제거했습니다.
8.1. kind 설치
kind는 로컬 쿠버네티스 클러스터 구동을 위한 툴입니다.
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.14.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
명령어를 통해 kind를 설치했습니다.
kind create user
# 확인
kubectl get nodes
kind를 통해 쿠버네티스 클러스터를 생성합니다.
완료가 되면 6번 이후의 과정을 진행합니다.
여러 번의 설치 및 제거 반복의 경험을 토대로 얻은 결론은 한 번에 설치하는 명령어로 쿠버네티스를 설치한다면, 에러가 발생할 가능성이 높고 제대로 설치하지 못할 확률이 크다고 생각합니다. 귀찮고 번거롭더라도 한줄씩 명령어를 순서대로 입력하고 설치하는 것이 더 좋은 방법인 것 같습니다.
설치되는 pod들이 많은 만큼 서로 의존하는 경향이 있는 것 같기 때문인 것 같습니다.
'MLOps' 카테고리의 다른 글
[MLOps] 쿠브플로우 카티브(Katib) 개념 이해와 설치하기 (0) | 2023.01.08 |
---|---|
[MLOps] 쿠브플로우 페어링(Fairing) mnist 학습하기 (2) | 2023.01.07 |
[MLOps] 쿠브플로우 페어링(Fairing) 개념 이해와 설치하기 (1) | 2023.01.05 |
[MLOps] 쿠브플로우 주피터 노트북 서버 만들기 (0) | 2023.01.02 |
[MLOps] 쿠버네티스와 쿠브플로우란? (0) | 2022.12.29 |
댓글