Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.34] 🚀 PersistentVolume 편 #1 | 기본적인 PersistentVolume 설정

ygtoken 2025. 3. 16. 17:48
728x90

 

쿠버네티스에서 PersistentVolume(PV)와 PersistentVolumeClaim(PVC)은 컨테이너가 종료되어도 데이터를 유지할 수 있도록 하는 스토리지 관리 기능입니다.

이번 글에서는 기본적인 PersistentVolume을 설정하고, 이를 PersistentVolumeClaim을 통해 사용하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1️⃣ 기본적인 PersistentVolume 및 PersistentVolumeClaim 설정

2️⃣ Pod에서 PersistentVolumeClaim을 활용한 스토리지 마운트

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ 기본적인 PersistentVolume 및 PersistentVolumeClaim 설정

 

❓ 문제 상황

 

운영팀에서 애플리케이션이 종료되더라도 데이터를 유지할 수 있도록 영구적인 스토리지를 설정해야 하는 요구사항이 생겼습니다.

쿠버네티스에서 기본적으로 Pod이 삭제되면 해당 Pod에 저장된 데이터도 사라지지만, PersistentVolume을 활용하면 데이터를 유지할 수 있습니다.

5Gi 크기의 PersistentVolume을 생성해야 합니다.

PV는 ReadWriteOnce 모드로 설정해야 합니다.

PVC를 생성하여 해당 PersistentVolume을 사용할 수 있도록 해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. PersistentVolume을 생성하여 5Gi 크기의 스토리지를 할당해야 합니다.

accessModes: ReadWriteOnce → 한 개의 Pod에서만 읽기/쓰기가 가능

 

2. PersistentVolumeClaim을 생성하여 Pod에서 해당 스토리지를 사용할 수 있도록 설정해야 합니다.

 


✅ 정답 Manifest (PersistentVolume 및 PersistentVolumeClaim 설정)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-example  # PersistentVolume 이름
spec:
  capacity:
    storage: 5Gi  # 5Gi 크기의 저장소 할당
  accessModes:
    - ReadWriteOnce  # 하나의 Pod에서만 읽기/쓰기 가능
  persistentVolumeReclaimPolicy: Retain  # 데이터 유지 (삭제되지 않음)
  hostPath:
    path: "/mnt/data"  # 노드의 특정 디렉터리를 PersistentVolume으로 사용
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-example  # PersistentVolumeClaim 이름
spec:
  accessModes:
    - ReadWriteOnce  # PersistentVolume의 액세스 모드와 동일해야 함
  resources:
    requests:
      storage: 5Gi  # 요청하는 스토리지 크기

 

 


📌 적용 후 예상 결과 값

 

1. PersistentVolume 및 PersistentVolumeClaim 생성 확인

kubectl get pv
kubectl get pvc

 

💡 예상 출력 값

NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   AGE
pv-example   5Gi        RWO            Retain           Bound    default/pvc-example            5s
NAME          STATUS   VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-example   Bound    pv-example    5Gi        RWO                           5s

 

 


2️⃣ Pod에서 PersistentVolumeClaim을 활용한 스토리지 마운트

 

❓ 문제 상황

 

운영팀에서 애플리케이션이 데이터를 저장하고, 컨테이너가 재시작되어도 해당 데이터를 유지해야 하는 요구사항이 생겼습니다.

이를 위해 Pod에서 PersistentVolumeClaim을 마운트하여 지속적인 데이터 저장소를 제공해야 합니다.

Pod은 pvc-example을 사용하여 /data 경로에 볼륨을 마운트해야 합니다.

컨테이너에서 /data에 저장한 파일이 유지되어야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Pod을 생성할 때, PersistentVolumeClaim을 volumeMounts로 마운트하여 스토리지를 활용하도록 설정해야 합니다.

volumes.persistentVolumeClaim.claimNamepvc-example로 지정

 

2. Pod이 삭제된 후 다시 생성해도 /data의 데이터가 유지되는지 확인해야 합니다.

 


✅ 정답 Manifest (Pod에서 PersistentVolumeClaim 마운트 설정)

apiVersion: v1
kind: Pod
metadata:
  name: pvc-pod  # Pod 이름
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "echo 'Persistent Data' > /data/test.txt && sleep 3600"]
    volumeMounts:
    - mountPath: "/data"
      name: storage
  volumes:
  - name: storage
    persistentVolumeClaim:
      claimName: pvc-example  # 앞서 생성한 PVC 사용

 

 


📌 적용 후 예상 결과 값

 

1. Pod 생성 후 데이터 저장 확인

kubectl exec pvc-pod -- cat /data/test.txt

 

💡 예상 출력 값

Persistent Data

 

2. Pod 삭제 후 다시 생성한 후 데이터 유지 확인

kubectl delete pod pvc-pod
kubectl apply -f pvc-pod.yaml
kubectl exec pvc-pod -- cat /data/test.txt

 

💡 예상 출력 값

Persistent Data  # Pod이 재시작되어도 데이터 유지됨
728x90