- Database_Design
- Unix_System
- Image_classification
- Univ._Study
- C
- Kubernetes
- 자격증
- Java
- Algorithm
- c++
- Personal_Study
- app
- codingTest
- Operating_System
- 리눅스마스터2급
- 2023_1st_Semester
- 오블완
- 티스토리챌린지
- kubeflow
- tensorflow
- Artificial_Intelligence
- datastructure
- Python
- cloud_computing
- programmers
- Baekjoon
- Android
- Linux
- SingleProject
- study
코딩 기록 저장소
[쿠버플로우] 설치 및 세팅하기 본문
목차
Master노드 버전 정리
- kubernetes : v1.28.15
- kustomize : v5.6.0
- kubeflow : v1.8.0
1. Kubeflow 설치 및 접속
01. Kubeflow 설치하기
kustomize를 설치함
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
install kustomize /usr/bin/kustomize
manifest git을 clone 함
git clone https://github.com/kubeflow/manifests.git
cd manifests
git checkout v1.8.0
http로 접속할 수 있도록 설정함
- 아래 3개 파일의 secure_cookies를 false로 설정함
- apps/jupyter/jupyter-web-app/upstream/base/params.env
- apps/tensorboard/tensorboards-web-app/upstream/base/params.env
- apps/volumes-web-app/upstream/base/params.env
deployment.yaml 수정
common/oidc-client/oauth2-proxy/base/deployment.yaml
- ndots를 4로 설정
apiVersion: apps/v1
kind: Deployment
metadata:
name: oauth2-proxy
labels:
app: oauth2-proxy
spec:
replicas: 2
selector:
matchLabels:
app.kubernetes.io/name: oauth2-proxy
template:
metadata:
labels:
app.kubernetes.io/name: oauth2-proxy
spec:
dnsConfig:
options:
- name: ndots
value: "4"
kustomize를 사용해 kubeflow 설치하기
- 5분에서 10분 정도 소요됨
- 모든 pod가 running이 될 때까지 기다림
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 20; done
02. Kubeflow 접속하기
istio-ingressgateway 수정
- 기본적으로 ClusterIP 타입으로 생성되기 때문에, 호스트 환경에서 접속하기 위해 NodePort로 변경
kubectl edit -n istio-system svc istio-ingressgateway
Kubeflow 접속 해결
- http://{Node IP + 포트번호}로 접속
- 이때 Access to {IP주소} was denied You don't hava authorization to view this page. HTTP ERROR 403 이런 오류가 뜸
- PVC 정보 확인함
- authservice-pvc가 Pending 상태로 뜸
- 요청한 PersistentVolumeClaim(PVC)에 연결할 수 있는 PersistentVolume(PV)이 없음
- 이로 인해 oidc-authservice Pod도 실행되지 않고, 결국 403 인증 오류가 생김
kubectl get pvc -n istio-system
- local-path-provisioner 설치함
- 로컬 테스트 환경이라 local-path StorageClass를 사용함
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
- 설치 후 StorageClass 목록에 local-path가 나타나야 함
kubectl get storageclass
- PVC에 local-path 지정
- oidc-authservice에서 사용하는 PVC 리소스를 수정함
nano authservice-pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: authservice-pvc namespace: istio-system spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: local-path
- PVC yaml 파일 수정 후 적용함
kubectl delete pvc authservice-pvc -n auth kubectl apply -f authservice-pvc.yaml
- PVC 바인딩 상태 확인
kubectl get pvc -n istio-system
Kubeflow 접속
- http://{Node IP + 포트번호}로 접속
- 아래 사진과 같은 사이트가 뜨는데 기본 계정으로 로그인
- 기본 계정 : user@example.com
- 패스워드 : 12341234
- 이렇게 뜨면 접속 성공!
03. Kubeflow 삭제
- 단일 명령어로 Kubeflow 삭제가 가능함
cd /home/$USER/manifests
kustomize build example | kubectl delete -f -
2. kubeflow 사용자 세팅
01. 유저 프로필 생성하기
- profile.yaml을 활용해 유저 프로필 생성하기
- kubeflow > manifests > common > dex > base 경로에 yaml 파일 생성
- nang-profile.yaml로 생성함
apiVersion: kubeflow.org/v1 kind: Profile metadata: name: nang # 생성하고 싶은 프로필의 이름(네임스페이스로 지정할 이름) spec: owner: kind: User name: nang@example.com # 생성하고 싶은 프로필의 이메일(Kubeflow로그인ID)
- apply 명령어를 이용해 profile을 적용함
kubectl apply -f nang-profile.yaml
※ 프로필 생성 시 spec 하위에 resourceQuotaSpec 추가할 수 있음
- 유저를 추가할 때 프로필 별 사용할 수 있는 리소스 양 지정 가능
apiVersion: kubeflow.org/v1beta1 kind: Profile metadata: name: nang spec: owner: kind: User name: nang@example.com resourceQuotaSpec: hard: cpu: "2" memory: 1Gi persistentvolumeclaims: "1" requests.storage: "10Gi"
- config-map.yaml을 활용해 유저 등록
- kubeflow > manifests > common > dex > base >config-map.yaml 파일을 수정하면 위에서 생성한 유저의 네임스페이스와 Kubeflow의 정보를 매핑함
- username: 네임스페이스명 / email: Kubeflow 로그인 ID / hash: 암호화된 비밀번호
- config-map.yaml 적용함
kubectl apply -f config-map.yaml -n auth
- 적용 후 확인하기
- 네임스페이스 및 config 설정을 적용하기 위해서는 dex를 재실행해야 함
kubectl rollout restart deployment dex -n auth
- 적용이 잘 되었음!!
02. kubeflow 권한 제한하기
kim 프로필 생성
- 이 Profile을 만들면 kim 네임스페이스와 kim@example.com 사용자에게 edit 권한이 부여됨
Role 생성
- kim 사용자가 nang 네임스페이스에 접속했을 때 오직 Notebook만 생성/조회/삭제할 수 있도록 Role을 정의함
Rolebinding 부여
3. Kubeflow 대시보드 설정
01. MLflow 설치 및 대시보드 추가하기
- 두 가지 성격의 저장소가 필요함
- DB (metadata 저장)
- Storage (Artifact 저장)
- DB를 위해 일반적으로 PostgreSQL을 사용하고, 아티팩트를 저장하기 위해 S3를 사용함
- Kubeflow는 기본적으로 저장소로 MinIO를 사용하기에 여기에 mlflow용 버킷을 만들고 사용할 수 있음
MLflow를 위한 Minio bucket 생성
- Kubeflow를 위해 이미 설치된 minio 서비스에 접속해 버킷을 생성함
kubectl port-forward -n kubeflow svc/minio-service 9000:9000
- http://localhost:9000/ 에 접속한 뒤 아래 계정으로 로그인함
- Access Key: minio
- Secret Key: minio123
- 이후 mlflow라는 이름으로 버킷을 생성함
- mlflow를 위한 artifact 저장소가 준비됨
- mlflow를 설치할 Helm 차트에서 설치를 제공해서 따로 설치를 하지 않음
MLflow 설치
- 아래 명령어로 설치를 함
kubectl create ns mlflow
kubectl create -n mlflow secret generic mlflow-secret \
--from-literal=AWS_ACCESS_KEY_ID=minio \
--from-literal=AWS_SECRET_ACCESS_KEY='minio123'
helm repo add bitnami https://charts.bitnami.com/bitnami
helm upgrade --install mlflow bitnami/mlflow -n mlflow --version 0.10.3 \
--set minio.enabled=false \
--set externalS3.host=minio-service.kubeflow \
--set externalS3.port=9000 \
--set externalS3.existingSecret=mlflow-secret \
--set externalS3.existingSecretAccessKeyIDKey="AWS_ACCESS_KEY_ID" \
--set externalS3.existingSecretKeySecretKey="AWS_SECRET_ACCESS_KEY" \
--set externalS3.bucket="mlflow" \
--set externalS3.protocol=http
- http://localhost:32429에 접속하고 로그인하면 아래와 같은 화면이 나와야 함
- username: user
- password: kubectl get secret --namespace mlflow mlflow-tracking -o jsonpath="{.data.admin-password }" | base64 -d
virtual service 생성
- Kubeflow의 Central Dashboard에서 하나의 탭을 클릭할 때 다양한 엔드포인트로 라우팅 하기 위해 VirtualService를 사용 (Jupyter, Katib, pipeline 등)
- MLflow 버튼을 클릭하면 mlflow tracker UI로 라우팅 해야 하므로 추가로 Virtual Service를 생성해야 함
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: mlflow
namespace: kubeflow
spec:
gateways:
- kubeflow/kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /mlflow/
rewrite:
uri: /
route:
- destination:
host: mlflow-tracking.mlflow.svc.cluster.local
port:
number: 80
kubectl apply -f mlflow_virtual_service.yaml
- /mlflow/ 라는 라우터에 접근 시 mlflow-tracking.mlflow.svc.cluster.local:80로부터 요청을 받아옴
Central Dashboard 수정
- Central Dashboard에 버튼을 추가하기 위해, configmap에 정의된 것을 수정함
kubectl edit cm centraldashboard-config -n kubeflow
- 아래와 같은 내용을 추가함
{
"type": "item",
"link": "/mlflow/",
"text": "mlflow",
"icon": "device:access-alarm"
}
- 그 후 Central Dashboard를 재시작함
kubectl rollout restart deploy centraldashboard -n kubeflow
- 다시 대시보드에 접근하여 확인함!
02. Kubeflow 대시보드 탭 삭제하기
현재 탭 확인
- 이중에서 'Endpoints'부터 'Executions'까지의 탭을 전부 삭제하고 확인해볼 예정
configmap 수정
- 'Volumes'부터 이전에 추가한 'mlflow' 사이의 탭을 전부 삭제함
kubectl edit cm centraldashboard-config -n kubeflow
- 그 후 Central Dashboard를 재시작함
kubectl rollout restart deploy centraldashboard -n kubeflow
- 다시 대시보드에 접근하면 탭이 삭제된 것을 확인할 수 있음!
참고한 링크
1. Kubeflow 설치 및 접속
https://kyeongseo.tistory.com/entry/kubeflow-190-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
kubeflow 1.9.0 설치하기
kubernetes versionv1.29.8kubeflow version1.9.0kustomize versionv5.4.31. kustomize를 설치한다.curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash install kustomize /usr/bin/kustomize 2. manifes
kyeongseo.tistory.com
Minikube (k8s 1.28.2) + Kubeflow 1.8 설치하기
[1단계] Minikube 로 K8S 세팅하기이번 글에서는 Minikube로 Kubernetes 버전 1.28.2버전을 설치하고, 현재 기준 최신 버전인 kubeflow 1.8을 설치할 거에요먼저 k3s, kubespray, kubeadm등 다양한 방식으로 설치해볼
dolphincoding.tistory.com
2. Kubeflow 세팅
https://semizero.tistory.com/47
[Kubeflow] Kubeflow 유저 추가하기(유저 분기처리하기)
Kubeflow를 활용하다보면 user@example.com/12341234 라는 샘플 계정을 활용하여, 테스트하는 경우가 많다. 그러나 서비스 관점에서는 사용자별 Kubeflow 기능을 분기하여 관리해야할 필요가 있다. 그렇기에
semizero.tistory.com
3. Kubeflow 대시보드 설정
https://suwani.tistory.com/170
1.1. Kubeflow 대시보드 내에 MLFlow 임베딩하기
참고한 블로그 - https://medium.com/dkatalis/kubeflow-with-mlflow-702cf2ebf3bf 앞선 포스팅에서 Kubeflow를 설치했다. 그리고 MLflow도 설치했다. 이번 포스팅의 목적은 Kubeflow 대시보드에 MLFlow가 하나의 탭으로 추
suwani.tistory.com
'개인 공부 > 쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 권한이 제한된 사용자 계정 발급 (1) | 2025.06.24 |
---|---|
[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ② (0) | 2025.05.21 |
[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ① (2) | 2025.05.20 |
[쿠버네티스] PART3. 한 걸음 더 나아가기 (0) | 2025.05.07 |
[쿠버네티스] PART2. 쿠버네티스 기본 사용법 배우기 - ② (0) | 2025.04.18 |