해당 글 을 번역한 포스트입니다.
데이터 지속성(어플리케이션 데이터가 영구적으로 저장되어 프로세스나 서버의 재시작 후에도 유지되는 성질) 은 모든 애플리케이션의 핵심 구성 요소 중 하나이며, Kubernetes로 조정되는 컨테이너화된 어플리케이션의 경우, Persistent Volumes (PV) 와 Persistent Volume Claims (PVC) 를 이해하는 것은 필수적입니다. 이 글은 PVCs가 무엇인지 쉽게 이해할 수 있도록 하고, 어떻게 PVs와 다른지, 어째서 그들이 Kubernetes 환경에서 필수적인지에 대해 초점을 맞추고 있습니다. 당신이 DevOps Engineer인지, Kubernetes 초보자인지, 아니면 숙련된 개발자인지 여부에 관계없이 PVC에 대해 알아야 할 모든 정보를 제공하는 종합 가이드입니다.
Kubernetes에서, Persistent Volume Claims (이하 PVC) 는 Persistent Volume (이하 PV) 이 처리할 수 있는 스토리지에 대한 사용자의 요청입니다. 특정한 스토리지 리소스에 액세스 하기 위한 “티켓” 이라고 생각하시면 됩니다. 사용자가 PVC를 생성할 때, Kubernetes는 이를 바인딩할 적절한 PV를 찾아서, PVC에 지정된 스토리지 요구사항이 충족되는지 확인합니다. 일치하는 PV를 찾는다면, PVC는 해당 PV에 바인딩되어, 애플리케이션이 스토리지에 액세스 할 수 있게 됩니다.
간단하게 비유하면: PV가 주차장이라면, PVC는 그 주차장에 한 자리를 차지할 수 있는 주차권입니다.
PV를 생성한 다음 PVC를 생성하여 해당 볼륨에서 스토리지를 요청하는 예를 살펴 보겠습니다.
다음은 로컬 스토리지를 사용하여 간단한 PV를 정의하는 YAML 파일입니다:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
storageClassName: local-storage
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- my-node
PV를 만들기 위해, 해당 YAML 파일을 실행합니다:
kubectl apply -f my-pv.yaml
PVC를 정의하는 YAML 파일입니다:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
PVC를 만들기 위해, 해당 YAML 파일을 실행합니다:
kubectl apply -f my-pvc.yaml
PVC를 생성한 후, 쿠버네티스는 요구 사항을 충족하는 사용 가능한 PV에 자동으로 바인딩합니다. 스테이터스를 다음 명령어로 확인할 수 있습니다:
kubectl get pvc my-pvc
그리고 당신은 우리가 이미 만들어 놓은 PV에 PVC가 바인딩되었다는 것을 확인할 수 있을 것입니다.
쿠버네티스를 사용할 때, 특히 데이터 지속성과 스토리지 효율성을 보장하기 위해서는 PV 와 PVC 를 이해하는 것이 중요합니다. PV는 실제 스토리지 인프라를 제공하는 반면, PVC는 사용자 애플리케이션과 이러한 스토리지 리소스 간의 다리 역할을 하여, 더욱 유연하고 효율적이며 확장 가능한 스토리지 솔루션을 가능하게 합니다.