이전 강의에 나온 컨테이너 레이어에서의 데이터를 계속해서 보관하고 관리하고 싶을 경우 볼륨을 사용해야 한다.
PV와 PVC는 이 볼륨을 더 쉽게 관리하게 해준다.

관리자가 PVs라는 거대한 풀을 만들어놓고, 사용자는 PVC로 필요한 용량을 선택하여 사용한다.
거대한 PV를 나눠서 여러 PVC에 할당하여 사용할 수는 없다.
PV와 PVC는 1:1 관계이다. (pv : pvc = 1 : 1 )
manifest example
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-vol1
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
hostPath:
path: /tmp/dat
kubectl create -f {파일}
kubectl get pv
호스트에 볼륨이 어떻게 마운트 되어야 하는지 결정하는 것
ReadOnlyMany
ReadWriteOnce
ReadWriteMany
희망하는 PV의 전체 용량
볼륨의 형식을 지정
hostPath : 노드의 로컬 디렉토리를 사용하는 것 → 단일 노드에서만 지원됨, 운영에서 사용x, 대신 local 사용을 권장
local : 노드의 로컬 스토리지 장치
csi : container storage interface
등등
컨테이너 스토리지 관리를 위한 표준 인터페이스

CRI : container runtime interface
CNI : container network interface
CSI : container storage interface
manifest example
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
kubectl create -f {파일}
kubectl get pvc
이렇게 pvc가 생성되면 사용 가능한 pv를 찾아서 자동으로 바인딩 된다.
바인딩은 다른 k8s객체와 마찬가지로 label과 selector 를 통해 구현된다.
만약 사용 가능한 pv가 존재하지 않으면, 사용 가능한 pv와 바인딩될 때 까지 pending 상태로 머물러있는다.

kubectl delete pvc {pvc이름}
1
pvc가 삭제된 후 pv는 어떻게 될까?
PV의 persistentVolumeReclaimPolicy로 설정한다.
Retain (default) : pvc 삭제되어도 pv는 남아있음. 다만 다른 pvc에 재사용되지 않음. 관리자가 수동으로 삭제해야함
Delete : pvc 삭제되는 순간, pv도 삭제됨
Recycle : 더이상 사용되지 않음
2
Retain 모드일 경우 PVC 삭제
PVC가 Retain 모드일 경우 삭제되어도 여전히 파드에서 사용중인 상태이다.
그래서 pvc를 삭제해도 완전히 삭제되지 않고 삭제중 상태로 머무른다.
이 때 파드를 삭제하면 pvc도 삭제된다.
# pvc 삭제
controlplane ~ ➜ k delete pvc claim-log-1
persistentvolumeclaim "claim-log-1" deleted
# Terminating 상태 지속 - 파드가 pvc를 계속 사용하기 때문에
controlplane ~ ➜ k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
claim-log-1 Terminating pv-log 100Mi RWX 8m26s
# 파드 삭제
controlplane ~ ➜ k delete pod webapp
pod "webapp" deleted
# pvc 삭제 확인
controlplane ~ ➜ k get pvc
No resources found in default namespace.
# pv는 Release 상태 확인
controlplane ~ ➜ k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-log 100Mi RWX Retain Released default/claim-log-1 15m
pod definition file에서 PVC를 생성하여 사용하는 방법
일반 Volume 사용법과 동일하다.
spec.volumes에 미리 만들어 놓은 PVC 이름을 사용하여 볼륨을 생성하고
spec.containers.volumeMounts 에서 사용하면 된다.
파드뿐만 아니라 ReplicaSet, Deploy에도 같은 방식으로 사용한다.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim: # 여기 작성
claimName: myclaim