Kubernetes

[GPU] Kubeflow & GCP & K8S

아르비스 2021. 1. 27. 21:36

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/

 

Installing Addons

Caution: This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects. This page follows CNCF website guidelines by listing projects alphabetically. To ad

kubernetes.io

많은 웹에서 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/

 

Overview of Deployment on an Existing Kubernetes Cluster

Instructions for installing Kubeflow on your existing Kubernetes cluster with a list of supported options

www.kubeflow.org

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/

 

Multi-user, auth-enabled Kubeflow with kfctl_istio_dex

Instructions for installing Kubeflow with kfctl_istio_dex.yaml config

www.kubeflow.org

 

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