Persistent Volume (PV),
Persistent Volume Claim (PVC)는 stateless한 Pod가
영구적으로 데이터를 보존하고 싶은 경우 사용하는 리소스
도커에 익숙한 분이라면,
docker run의 -v 옵션인 도커 볼륨과 유사한 역할을 한다고 이해할 수 있다.
PV는 관리자가 생성한 실제 저장 공간의 정보를 담고 있고,
PVC는 사용자가 요청한 저장 공간의 스펙에 대한 정보를 담고 있는 리소스.
- Pod 내부에서 작성한 데이터는 기본적으로 언제든지 사라질 수 있기에,
보존하고 싶은 데이터가 있다면 Pod에 PVC를 mount해서 사용해야 한다는 것만 기억하시면 됩니다.
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까지 방금 함께 생성된 것을 확인
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
$ kubectl exec -it mypod -- bash
$ touch mlops_study
$ cd /var/www/html/
$ touch mlops_study
$ kubectl delete pod mypod
$ kubectl get pvc,pv
$ kubectl apply -f pod-pvc.yaml
$ kubectl exec -it mypod -- bash
$ ls
$ cd /var/www/html
$ ls