GKE 기반의 GPU나. 다른 버전의 Kubeflow 설치는 많지만.. GCP에서 GPU 를 Kubernetes에서 동작하는 버전이 없어서..
이글을 정리함.
설치 버전 정리
- Google Clould Compute Engine
- Ubuntu 18.04.5 LTS
- Nvidia driver 460
- docker-CE 20.10.2
- kubernetes v1.16.15
- Weave Net
- kubeflow 1.1
1. 서버 Spec
구분 | CPU | RAM | Storage | GPU |
Master | 4 vCore | 15 GB | 300 GB | - |
Node-1 | 8 vCore | 36 GB | 300 GB | 1x NVIDIA Tesla T4 |
Node-2 | 8 vCore | 36 GB | 300 GB | 1x NVIDIA Tesla T4 |
OS : Ubuntu Ubuntu 18.04.5 LTS (Bionic Beaver)
(20.04 버전은 kubeflow가 아직 지원을 안하는 듯 함... 구성시 문제 발생함)
2. NVIDIA GPU Driver 설치
cloud.google.com/compute/docs/gpus/install-drivers-gpu#ubuntu-driver-steps
Ubuntu 18.04 LTS [Woker Node 실행]
curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
sudo apt update
sudo apt install cuda
Worker Node (GPU가 있는 VM)에서 실행
Driver 설치 확인
root@gpu-n1:~# nvidia-smi
Wed Jan 27 08:10:32 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |
| N/A 76C P0 33W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
3. Docker 설치
docker repository 추가
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
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 \
$(lsb_release -cs) \
stable"
sudo apt-get update
Docker Engine 설치 (v19 이후 버전부터 GPU 지원함.) 관련 사유로 최신 버전(v20.10.2)으로 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo apt-mark hold docker-ce docker-ce-cli
Docker version 확인
root@gpu-mst:~# docker version
Client: Docker Engine - Community
Version: 20.10.2
API version: 1.41
Go version: go1.13.15
Git commit: 2291f61
Built: Mon Dec 28 16:17:32 2020
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.2
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8891c58
Built: Mon Dec 28 16:15:09 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.3
GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc:
Version: 1.0.0-rc92
GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
docker-init:
Version: 0.19.0
GitCommit: de40ad0
4. NVIDIA-docker2 설치하기
NVIDIA-CONTAINER-RUNTIME 설치
패지키 repo 추가
본인의 배포판에 맞는 패키지 repository를 추가한다. 정확한 내용은 nvidia 깃허브에서 제공하는 내용을 확인한다. 아래 내용은 포스팅 작성일 기준의 repo 설정방법이다.
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
패키지 설치
apt-get install -y nvidia-container-runtime
설치 확인
which nvidia-container-runtime-hook
여기까지 진행이 되었다면, docker 컨테이너에서 GPU자원을 사용할 수 있는 준비가 완료 된 것이다.
컨테이너 GPU 사용 확인
--gpus 플레그를 추가하여 컨테이너 시작시 GPU 리소스에 접근하도록 설정할 수 있다.
docker run -it --rm --gpus all ubuntu nvidia-smi
docker로 ubuntu 컨테이너가 실행되고, 내부에서 nvidia-smi 명령어가 동작하는 것을 확인 했다면 정상적으로 셋팅 된것이다.
nvidia-smi Docker run 시 아래와 같이 오류가 발생하는 경우 처리
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
ERRO[0000] error waiting for container: context canceled
다음과 같이 실행
# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
nvidia option old
# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo apt-get install nvidia-docker2
sudo systemctl restart docker
nvidia 는 Docker version에 따라서 두 종류로 Docker 실행방법이 달라짐.
# docker version 19.03 이상
docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
# docker version 19.03 미만
docker run --runtime=nvidia nvidia/cuda:10.0-base nvidia-smi
쿠버네티스에서 nvidia-docker를 사용하려면, docker의 기본 런타임(runtime)을 변경하고, NVIDIA 플러그인을 설치해야 함.
runtime 변경은 다음과 같이 진행함.
정상적으로 nvidia-docker2가 정상적으로 설치되었다면, /etc/docker/daemon.json 파일이 생성됨.(없으면 이상)
해당 파일을 열어서 아래 내용을 추가해야 함.
"default-runtime": "nvidia",
> vi /etc/docker/daemon.json
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
파일을 수정하고, Docker daemon을 재시작함.
sudo systemctl restart docker
5. Kubernetes 설치
# update package repository
$ apt update && apt upgrade -y
# google k8s 패키지 소스 등록
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
$ cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
#deb https://apt.kubernetes.io/ kubernetes-xenial main
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
$ apt-get update
$ apt install linux-image-extra-virtual ca-certificates curl software-properties-common -y
# 버전 설치
$ apt-get install -y kubelet=1.16.15-00 kubeadm=1.16.15-00 kubectl=1.16.15-00
$ apt-mark hold kubelet=1.16.15-00 kubeadm=1.16.15-00 kubectl=1.16.15-00
$ systemctl daemon-reload
$ systemctl restart kubelet
설치 버전 확인
# kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.15", GitCommit:"2adc8d7091e89b6e3ca8d048140618ec89b39369", GitTreeState:"clean", BuildDate:"2020-09-02T11:40:00Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.15", GitCommit:"2adc8d7091e89b6e3ca8d048140618ec89b39369", GitTreeState:"clean", BuildDate:"2020-09-02T11:31:21Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
network 설정
swapoff -a
[cluster 생성]
#master
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
# node
kubeadm join 10.146.0.10:6443 --token srzpse.0j4lkl0ycz1kmffw \
--discovery-token-ca-cert-hash sha256:1f4c6eabc7a22699bba990b3461ace3f6082bf88479f877f5ad413f591f612eb
kubeconfg 적용
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config | tee -a ~/.bashrc
cluster 정보 확인
$ kubectl cluster-info
Kubernetes master is running at https://10.146.0.10:6443
KubeDNS is running at https://10.146.0.10:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
kubernetes 설치 확인
위 kubeconifg 가 적용되어야, kubectl 명령어 사용이 가능함.
여기까지 진행 후 'kubectl get nodes' 실행하면 NotReay 상태로, Pod 조회시
coredns 가 Pending 상태로 지속됨. 이는 kubernetes가 버전업 되면서, network관련 addon을 추가로 설치해 줘야 함.
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5c98db65d4-5jmmv 0/1 Pending 0 4h38m
kube-system coredns-5c98db65d4-tqdpj 0/1 Pending 0 4h38m
kube-system etcd-master 1/1 Running 0 4h37m
kube-system kube-apiserver-master 1/1 Running 0 4h38m
kube-system kube-controller-manager-master 1/1 Running 0 4h38m
kube-system kube-proxy-n8f76 1/1 Running 0 4h38m
kube-system kube-scheduler-master 1/1 Running 0 4h37m
kubernetes에서는 여러종류의 Networking addon을 제공하고 있음.
kubernetes.io/docs/concepts/cluster-administration/addons/
많은 웹에서 Calico을 사용하고 있으나, 여러버전 테스트시 문제가 있어서, 여기서는 Weave Net 을 설치하여 사용함.
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
만약 calico를 사용한다면.. 아래와 같이 실행하면됨. (중복실행하지 않음.)
# kubectl apply -f https://docs.projectcalico.org/v3.17/manifests/calico.yaml
Kubernetes Dashboard 설치
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
kubernetes pods 확인
kubectl get pods --all-namespaces
6. kubernetes-device-plugin 설치
kubectl을 이용하여 GPU(nvidia device)를 사용하기 위해서는 nvidia-device-plugin을 설치해야 함.
$ kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.12/nvidia-device-plugin.yml
error: unable to recognize "https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.12/nvidia-device-plugin.yml": no matches for k
ind "DaemonSet" in version "extensions/v1beta1"
쿠버네티스 버전이 올라가면서, Daemon의 extensions/v1beta1 버전을 더 이상 지원하지 않음. 버전을 apps/v1으로 변경하고, selector를 추가 함(메니페스트 변경)
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nvidia-device-plugin-daemonset-1.12
namespace: kube-system
spec:
updateStrategy:
type: RollingUpdate
selector:
matchLabels:
name: nvidia-device-plugin-ds
template:
metadata:
# Mark this pod as a critical add-on; when enabled, the critical add-on scheduler
# reserves resources for critical add-on pods so that they can be rescheduled after
# a failure. This annotation works in tandem with the toleration below.
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ""
labels:
name: nvidia-device-plugin-ds
spec:
tolerations:
# Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
# This, along with the annotation above marks this pod as a critical add-on.
- key: CriticalAddonsOnly
operator: Exists
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
containers:
- image: nvidia/k8s-device-plugin:1.11
name: nvidia-device-plugin-ctr
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
volumeMounts:
- name: device-plugin
mountPath: /var/lib/kubelet/device-plugins
volumes:
- name: device-plugin
hostPath:
path: /var/lib/kubelet/device-plugins
EOF
device-plugin pod 정상적으로 작동했는지 확인함.
$ kubectl -n kube-system get pod -l name=nvidia-device-plugin-ds
NAME READY STATUS RESTARTS AGE
nvidia-device-plugin-daemonset-1.12-mrml7 1/1 Running 0 36s
nvidia-device-plugin-daemonset-1.12-pdwsg 1/1 Running 0 36s
nvidia-device-plugin-daemonset-1.12-qswmg 1/1 Running 0 36s
7. Kubeflow 설치
설치 이전에 storage를 설치해 주어야 함.
1. Kubernetes Resource Storage Class 설치
pv 생성을 위해 NFS(Network file System)을 설치 함.
[Master Node]
# Master node nfs 서버 설치 ( master 서버를 nfs 서버로 사용 )
$ sudo apt install -y nfs-common nfs-kernel-server portmap
$ sudo mkdir /nfs # 스토리지 폴더로 사용
$ sudo chmod 777 /nfs
$ sudo cat > /etc/exports << EOF
/nfs 10.146.0.10(rw,sync,no_root_squash,no_subtree_check) # master node 내부 ip
/nfs 10.146.0.8(rw,sync,no_root_squash,no_subtree_check) # worker node 1 내부 ip
/nfs 10.146.0.9(rw,sync,no_root_squash,no_subtree_check) # worker node 2 내부 ip
EOF
$ /etc/init.d/nfs-kernel-server restart # 서버 재시작
[Woker Node]
# Worker node nfs 클라이언트 설치 ( 2대 모두 설치 )
$ sudo apt install nfs-common
$ sudo mkdir /nfs
$ sudo chmod 777 /nfs
2. nfs-clinet Storage Class 설치
[Master Node]
$ sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
$ sudo chmod 700 get_helm.sh
$ sudo ./get_helm.sh
$ sudo kubectl -n kube-system create sa tiller
$ sudo kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
$ sudo helm init --service-account tiller
$ sudo helm repo update
$ helm repo add stable https://charts.helm.sh/stable
$ helm repo update
# master node 주소
$ helm install --name nfs-client-provisioner --set nfs.server=10.146.0.10 --set nfs.path=/nfs stable/nfs-client-provisioner
$ kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
$ kubectl get sc
NAME PROVISIONER AGE
nfs-client (default) cluster.local/nfs-client-provisioner 42s
3. Private Registry 배포
# private Registry 배포
wget https://raw.githubusercontent.com/mojokb/handson-kubeflow/master/registry/kubeflow-registry-deploy.yaml
쿠버네티스 버전이 올라가면서, Daemonset의 extensions/v1beta1 버전을 더 이상 지원하지 않아서 입니다. 버전을 apps/v1 으로 변경하고 실행
kubectl apply -f kubeflow-registry-deploy.yaml
Service 실행
kubectl apply -f https://raw.githubusercontent.com/mojokb/handson-kubeflow/master/registry/kubeflow-registry-svc.yaml
# /etc/hosts에 private registry 등록
K8s에서 pod 생성 시 private registry를 lookup할 수 있도록 /etc/hosts에 등록 master 주소 등록
[master/ worker 모두 실행]
cat << EO_HOSTS >> /etc/hosts
10.146.0.10 kubeflow-registry.default.svc.cluster.local
EO_HOSTS
cat /etc/hosts
4. Kubeflow 설치
최신 버전은 1.2이지만, 안정성을 위해, v1.1을 설치함.
www.kubeflow.org/docs/started/k8s/overview/
export KF_HOME=~/kubeflow
export KF_NAME=sds-kubeflow
rm -rf ${KF_HOME}
mkdir -p $KF_HOME
cd $KF_HOME
rm -f ./kfctl*
wget https://github.com/kubeflow/kfctl/releases/download/v1.1.0/kfctl_v1.1.0-0-g9a3621e_linux.tar.gz
tar -xvf kfctl_*.tar.gz
export PATH=$PATH:$KF_HOME
export KF_DIR=${KF_HOME}/${KF_NAME}
#export CONFIG_URI=https://github.com/kubeflow/manifests/raw/master/kfdef/kfctl_k8s_istio.v1.1.0.yaml
export CONFIG_URI=https://github.com/kubeflow/manifests/raw/master/distributions/kfdef/kfctl_k8s_istio.v1.1.0.yaml
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_URI}
kubectl get pods -A
kubeflow dex version 설치시
export CONFIG_URI=https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_istio_dex.v1.1.0.yaml
위와 같이 변경 적용
5. istio toke 활성화
kubeflow에서는 인증/권한 기능을 위해서 istio 를 사용한다. 그래서 istio-system 이라는 네임스페이스에 istio 관련 컴포넌트가 설치된다. 이부분 변경을 안하면, istio-token 관련 오류를 출력하고 멈춰진 상태로 유지되어서, 해당 기능을 활성화 해주어야 하며, 아래와 같이 추가해주어야 한다.
(/etc/kubernetes/manifests/kube-apiserver.yaml) 수정
$ sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
...
- --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
- --service-account-issuer=api
- --service-account-api-audiences=api,vault
...
위와 같이 매니페스트 파일을 수정하면, kube-apiserver Pod가 자동으로 다시 시작 됨.
# 설치 확인
$ kubectl get pods -n kubeflow -o wide
GPU가 제대로 설정되었는지 확인하기 위해서는 다음과 같이 조회 가능함.
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
사용 가능한 GPU 리소스가 있다면, 다음과 같은 응답 결과를 얻을 수 있습니다.
NAME GPU
mortar 1
인식이 안되면 다음과 같이 표시된다.
# kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
NAME GPU
a20-01-master <none>
a20-01-n1 <none>
a20-01-n2 <none>
제대로 인식하는 경우
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
NAME GPU
gpu-mst <none>
gpu-n1 1
gpu-n2 1
root@gpu-mst:~#
위와 같이 모든 Pod가 Pending이나 오류가 없다면, Kubeflow 포트로 접속하여 구동 확인함.
http://{서버 IP}:31380/
login 정보
admin@kubeflow.org:12341234
www.kubeflow.org/docs/started/k8s/kfctl-istio-dex/
Kubeflow 화면이 보인다면 성공~!!!
Kubeflow를 설치하면 멀티 사용자 기능을 사용할 수 있습니다. 사용자 인증을 위하여 dex 라는 것을 이용하고 있습니다. dex 는 OpenID Connect 를 지원하는 식별 서비스로서, LDAP, Github, SAML 등의 여러 가지의 인증 방식과 연동이 가능
dex 는 사용자 정보를 파일에 직접 저장하고 있습니다. 이 파일은 ConfigMap에 저장되어 있습니다.
dex는 쿠버네티스의 auth 라는 네임스페이스 설치됩니다. dex 라는 ConfigMap을 조회하면 설정 정보를 볼 수 있습니다.
$ kubectl -n auth get cm dex -o yaml
apiVersion: v1
data:
config.yaml: |
issuer: <http://dex.auth.svc.cluster.local:5556/dex>
storage:
type: kubernetes
config:
inCluster: true
web:
http: 0.0.0.0:5556
logger:
level: "debug"
format: text
oauth2:
skipApprovalScreen: true
enablePasswordDB: true
staticPasswords:
- email: admin@kubeflow.org
hash: 12$ruoM7FqXrpVgaol44eRZW.4HWS8SAvg6KYVVSCIwKQPBmTpCm.EeO
username: admin
userID: 08a8684b-db88-4b73-90a9-3cd1661f5466
...
kind: ConfigMap
metadata:
name: dex
namespace: auth
기본으로 생성되는 이메일은 “admin@kubeflow.org“이고, 패스워드는 “12341234”입니다.
패스워드 해시값은 다양한 방법으로 만들수 있습니다.
만약 파이썬을 사용하고 있다면 bcrypt 라이브러리를 사용할 수 있습니다.
다음은 bcrypt 패키지를 설치하고, “PASSWORD”의 해시값을 생성하는 예제입니다.
pip install bcrypt
python -c 'import bcrypt; print(bcrypt.hashpw(b"PASSWORD", bcrypt.gensalt(rounds=10)).decode("ascii"))'
10$y0qsW5zqhKobi4rsNMxqceG5zFqop27Z3wgdF/wjmmlF0ib53xwTS
dex에 새로운 사용자를 추가해 보겠습니다.
내용이 많지 않기 때문에 ConfigMap을 직접 수정하겠습니다.
$ kubectl -n auth edit cm dex
staticPasswords:
- email: admin@kubeflow.org
hash: 12$ruoM7FqXrpVgaol44eRZW.4HWS8SAvg6KYVVSCIwKQPBmTpCm.EeO
username: admin
userID: 08a8684b-db88-4b73-90a9-3cd1661f5466
- email: user@gmail.com
hash: 10$y0qsW5zqhKobi4rsNMxqceG5zFqop27Z3wgdF/wjmmlF0ib53xwTS
username: user
userID: user
변경할 설정 사항을 적용하기 위해서 dex를 재시작합니다
kubectl -n auth rollout restart deployment dex
PVC권한 확인
# kubectl -n kubeflow get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
katib-mysql Bound pvc-a0d87ee7-837a-49db-b6c2-26d8b0ed12e5 10Gi RWO nfs-client 64m
metadata-mysql Bound pvc-4ed336cd-e374-4419-bbcf-369780972353 10Gi RWO nfs-client 64m
minio-pvc Bound pvc-634c8bf6-6a14-458a-a54f-e9c030726290 20Gi RWO nfs-client 64m
mysql-pv-claim Bound pvc-609c1b3c-941d-48fe-a57a-7c3e30bd103f 20Gi RWO nfs-client 64m