Persistent Volume & Persistent Volume Claim

zuckerfrei·2024년 1월 13일
0

Kubernetes

목록 보기
49/63

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

1. Persistent Volume

관리자가 PVs라는 거대한 풀을 만들어놓고, 사용자는 PVC로 필요한 용량을 선택하여 사용한다.
거대한 PV를 나눠서 여러 PVC에 할당하여 사용할 수는 없다.
PV와 PVC는 1:1 관계이다. (pv : pvc = 1 : 1 )

PV 만들기

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

accessModes

호스트에 볼륨이 어떻게 마운트 되어야 하는지 결정하는 것

ReadOnlyMany
ReadWriteOnce
ReadWriteMany

capacity

희망하는 PV의 전체 용량

type

볼륨의 형식을 지정

hostPath : 노드의 로컬 디렉토리를 사용하는 것 → 단일 노드에서만 지원됨, 운영에서 사용x, 대신 local 사용을 권장
local : 노드의 로컬 스토리지 장치
csi : container storage interface
등등


CSI (Container Storage Interface)

컨테이너 스토리지 관리를 위한 표준 인터페이스

CRI : container runtime interface
CNI : container network interface
CSI : container storage interface


2. Persistent Volume Claim

PVC 만들기

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 상태로 머물러있는다.

PVC 삭제

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

Using PVCs in Pods

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
profile
무설탕 음료를 좋아합니다

0개의 댓글