본문 바로가기
인프라

쿠버네티스(Kubernetes) PVC(Persistent Volume Claim)란?

by 유일리 2024. 1. 12.
쿠버네티스 PVC( Persistent Volume Claim)란?

 

PVC는 stateless한 Pod이 영구적으로 데이터를 보존하고 싶은 경우 사용하는 리소스이다. 도커의 볼륨과 유사한 역할을 한다. PV는 관리자가 생성한 실제 저장 공간의 정보를 담고 있고, PVC는 사용자가 요청한 저장 공간의 스펙에 대한 정보를 담고 있는 리소스이다. 즉, Pod 내부에서 작성한 데이터는 기본적으로 언제든지 사라질 수 있기에 보존하고 싶은 데이터가 있다면 Pod에 PVC를 mount해서 사용해야 한다.


PVC를 실습해보자.

1. YAML 파일 생성 (pvc.yaml, pod-pvc.yaml)

vi pvc.yaml

 

pvc.yaml

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

 

vi pod-pvc.yaml

 

pod-pvc.yaml

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

 

2. pod에 접속하여 mount한 경로와 그 외의 경로에 파일 생성

kubectl exec -it mypod -- bash
touch hello1
cd /var/www/html
touch hello2

 

3. pod 삭제 및 pvc 확인

kubectl delete pod mypod
kubectl get pvc,pv

 

4. 해당 pvc를 mount하는 pod 다시 생성

kubectl apply -f pod-pvc.yaml

 

5. pod에 접속하여 파일 확인

kubectl exec -it mypod -- bash
ls
cd /var/www/html
ls

hello1 파일은 사라지고 hello2 파일이 그대로 보존되는 것을 확인할 수 있다.

댓글