[MLOps] PVC

GisangLee·2023년 3월 24일
0

ML

목록 보기
127/141

1. PVC란?

Persistent Volume (PV),
Persistent Volume Claim (PVC)는 stateless한 Pod가
영구적으로 데이터를 보존하고 싶은 경우 사용하는 리소스

도커에 익숙한 분이라면,
docker run의 -v 옵션인 도커 볼륨과 유사한 역할을 한다고 이해할 수 있다.

PV는 관리자가 생성한 실제 저장 공간의 정보를 담고 있고,
PVC는 사용자가 요청한 저장 공간의 스펙에 대한 정보를 담고 있는 리소스.

  • Pod 내부에서 작성한 데이터는 기본적으로 언제든지 사라질 수 있기에,
    보존하고 싶은 데이터가 있다면 Pod에 PVC를 mount해서 사용해야 한다는 것만 기억하시면 됩니다.
  • PVC를 사용하면 여러 pod간의 data 공유도 쉽게 가능하다.

2. PVC 생성

  • minikube를 생성하면, 기본적으로 minikube와 함께 설치되는 storageclass가 존재.

    $ kubectl get storageclass 명령어를 통해 이미 설치된 storageclass를 확인
    PVC를 생성하면 해당 PVC의 스펙에 맞는 PV를 즉시 자동으로 생성해준 뒤,
    PVC와 매칭시켜준다고만 이해하면 된다.
    (dynamic provisioning 지원하는 storageclass)

  • pvc 생성

apiVersion: v1

kind: PersistentVolumeClaim

metadata:
  name: myclaim

spec: # pvc의 정보를 입력
  accessModes:
    - ReadWriteMany # ReadWriteOnce, ReadWriteMany 옵션을 선택 가능

  volumeMode: Filesystem

  resources:
    requests:
      storage: 10Mi # storage 용량 설정

  storageClassName: standard # 방금 전에 확인한 storageclass의 name을 입력
$ kubectl apply -f pvc.yaml
$ kubectl get pvc,pv
# pvc와 동시에 pv까지 방금 함께 생성된 것을 확인

3. Pod에서 PVC 사용

  • Pod 생성
  • volumeMounts, volumes 부분이 추가 되었습니다.
apiVersion: v1

kind: Pod

metadata:
  name: mypod

spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html" # mount 할 pvc를 mount 할 pod의 경로를 적는다.
        name: mypd # 어떤 이름이든 상관없으나, 아래 volumes[0].name과 일치해야 한다.

  volumes:
    - name: mypd # 어떤 이름이든 상관없으나, 위의 volumeMounts[0].name과 일치해야한다.
      persistentVolumeClaim:
        claimName: myclaim # mount할 pvc의 name을 적는다."
$ kubectl apply -f pod-pvc.yaml
  • Pod에 접속하여 mount 한 경로와 그 외의 경로에 파일을 생성합니다.
$ kubectl exec -it mypod -- bash
$ touch mlops_study
$ cd /var/www/html/
$ touch mlops_study

  • pod 삭제
$ kubectl delete pod mypod

  • pvc는 그대로 남아있는지 확인
$ kubectl get pvc,pv

  • 해당 pvc를 mount하는 pod를 다시 생성
$ kubectl apply -f pod-pvc.yaml

  • pod에 접속하여 아까 작송한 파일들이 그대로 있는지 확인
$ kubectl exec -it mypod -- bash
$ ls
$ cd /var/www/html
$ ls
profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/

0개의 댓글