Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

KJH

Kubeflow(v1.1, v1.2) install (CentOS 7) 본문

DevOps

Kubeflow(v1.1, v1.2) install (CentOS 7)

모이스쳐라이징 2021. 6. 20. 18:55

[GCP 인스턴스 생성]

노란색으로 표시된 부분은 nfs-client-provisioner을 위해 추가한 디스크로 선택 사항입니다.

디스크 추가 항목은 인스턴스 생성 하는 화면에는 없고 인스턴스 수정을 통해 추가할 수 있습니다.

gcp 인스턴스 생성 및 설정

 

docker, microk8s 설치

----------
# centos
sudo yum install -y epel-release snapd wget git openssl checksum
----------

sudo systemctl enable --now snapd.socket
curl https://releases.rancher.com/install-docker/20.10.3.sh | sh -
sudo usermod -a -G docker ${USER}

sudo ln -s /var/lib/snapd/snap /snap
# snap 설치 이후 곧바로 사용할 경우 에러가 날때가 있음
sudo snap install microk8s --classic  --channel=1.20/stable

sudo snap  alias microk8s.kubectl k 
sudo snap  alias microk8s.kubectl kubectl 

mkdir ~/.kube/

sudo usermod -a -G microk8s ${USER}
sudo chown -f -R ${USER} ~/.kube

# exit 후 재접속

# config가 644면 helm이 안될 수 도 있음 600으로 변경 (권한 확인 필요)
k config view --raw  > $HOME/.kube/config
chmod 600 config

# ingress enable (istio ingress-http 사용)
microk8s enable dns

 

nfs 설치 및 설정

# 볼륨 추가 이후

# 볼륨확인
lsblk
# 볼륨포맷
sudo mkfs -t ext4 /dev/sdb
# 저장소생성
sudo mkdir /nfs_root
# 볼륨 마운트
sudo mount /dev/sdb/ /nfs_root

# 권한변경
sudo chown -R ${USER}. /nfs_root
sudo chmod -R 777 /nfs_root

# nfs 설치
sudo yum -y install nfs-utils nfs-utils-lib

# nfs 설정
sudo vi /etc/exports
----------------------------------------
/nfs_root {server-IP}(rw,no_root_squash,no_subtree_check)
----------------------------------------

# 설정 적용
sudo systemctl start nfs
sudo exportfs -ra
sudo systemctl status nfs

 

Helm 설치 및 nfs-client-provisioner 배포

# helm 간편 설치
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
chmod +x get_helm.sh 
./get_helm.sh 

# stable repo 추가
helm repo add stable https://charts.helm.sh/stable

# nfs client provisioner 설치
helm install nfs-client-provisioner  \
  --set nfs.server={nfs-server-ip} \
  --set nfs.path={nfs-dir-path} \
  --set storageClass.name=nfs \
  --set storageClass.defaultClass=true \
  stable/nfs-client-provisioner

 

Kubeflow 설치 [version 1.1.0]

# v1.1 설치시 apply하는 yaml 수정 필요, v1.2는 수정없이 설치 가능

wget https://github.com/kubeflow/kfctl/releases/download/v1.1.0/kfctl_v1.1.0-0-g9a3621e_linux.tar.gz

tar -zxvf kfctl_v1.1.0-0-g9a3621e_linux.tar.gz

sudo cp kfctl /usr/local/bin
sudo ln -s /usr/local/bin /usr/bin/kfctl

export KF_NAME=handson-kubeflow
export BASE_DIR=/home/${USER}
export KF_DIR=${BASE_DIR}/${KF_NAME}
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_k8s_istio.v1.1.0.yaml"

mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl build -V -f ${CONFIG_URI}

export CONFIG_FILE=${KF_DIR}/kfctl_k8s_istio.v1.1.0.yaml

vi kfctl_k8s_istio.v1.1.0.yaml
파일 맨아래 github주소를 바꿔줘야함 kubeflow -> DavidSpek
DavidSpek 이라는 사람이 kubeflow를 포크 떠가서 코드 수정함 kubeflow 측에서 인증도 받음
--------------
 repos:
  - name: manifests
    uri: https://github.com/DavidSpek/manifests/archive/v1.1-branch.tar.gz
  version: v1.1-branch
--------------

[엄청 오래걸림]
kfctl apply -V -f ./kfctl_k8s_istio.v1.1.0.yaml

중간에 5번 정도 같은 에러가 나는데 무시해도됨

 

Kubeflow 설치 [version 1.2.0]

# v1.2

wget https://github.com/kubeflow/kfctl/releases/download/v1.2.0/kfctl_v1.2.0-0-gbc038f9_linux.tar.gz

tar -zxvf kfctl_v1.2.0-0-gbc038f9_linux.tar.gz

sudo cp kfctl /usr/local/bin
sudo ln -s /usr/local/bin /usr/bin/kfctl

export KF_NAME=handson-kubeflow
export BASE_DIR=/home/${USER}
export KF_DIR=${BASE_DIR}/${KF_NAME}
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.2-branch/kfdef/kfctl_k8s_istio.v1.2.0.yaml"

mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl build -V -f ${CONFIG_URI}

export CONFIG_FILE=${KF_DIR}/kfctl_k8s_istio.v1.2.0.yaml


[엄청 오래걸림]
kfctl apply -V -f ./kfctl_k8s_istio.v1.2.0.yaml

중간에 5번 정도 같은 에러가 나는데 무시해도됨

 

Kubeflow 접속

함께 설치된 istio-http 노드포트로 접속가능 {external-ip}:{31380}

10분 이상 기다리면 namespace 이름 설정하고 시작하는 화면이 뜸

 

 

microk8s dashboard

# dashboard 추가
microk8s enable dashboard

# nodeport 오픈
kubectl -n kube-system edit service kubernetes-dashboard
---------------------------
  ports:
  - nodePort: 32443
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort
  ---------------------------
  
 # 접속
 https://{external-IP}:{nodePort}
 
 # KubeConfig로 접속
 cat ~/.ssh/config 를 파일로 저장 후 사용

 

miniconda install & Kubeflow pipeline 설정

sudo yum install -y bzip2
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

bash Miniconda3-latest-Linux-x86_64.sh

which conda

export PATH=/home/${USER}/miniconda3/bin:$PATH

conda create --name mlpipeline python=3.7

# window는 conda로 실행
conda activate mlpipeline

# Linux는 source로 실행
source activate mlpipeline

# 에러 발생시 pip3 install kfp --upgrade --user 로 재시도
pip3 install kfp --upgrade

# pipeline.py 파일을 tar.gz로 압축
dsl-compile --py pipeline.py --output kjh-iris-pipeline.tar.gz

 

pipeline issue

# pipeline 실행시 docker container를 찾을 수 없다는 error 로그가 찍힐 수 있는데
# 임시 방편으로 containerRuntimeExecutor: docker, > pns, 로 변경 해주고 retry 하면 정상 배포가 된다
kubectl edit configmap workflow-controller-configmap -n kubeflow
----------------------------
apiVersion: v1
data:
  config: |
    {
    executorImage: argoproj/argoexec:v2.3.0,
    containerRuntimeExecutor: pns,
    artifactRepository:
    {
----------------------------

'DevOps' 카테고리의 다른 글

LVM 구성  (0) 2021.07.08
CentOS AirGap Repository 구성  (0) 2021.07.08
Elastic Search 데이터 삭제 정책 등록(ILM)  (0) 2021.07.08
Jenkinsfile 작성법  (0) 2020.10.11
Groovy 기본 문법  (0) 2020.10.11