쿠버네티스(Kubernetes)는 애플리케이션이 실행되는 동안 데이터를 저장하고 관리할 수 있는 다양한 스토리지 옵션을 제공한다. Persistent Volume (PV)와 Persistent Volume Claim (PVC)은 상태 저장 애플리케이션을 위한 스토리지를 제공하는 개념으로, 이 두 가지를 통해 쿠버네티스는 다양한 스토리지 백엔드와 독립적으로 상태 저장 애플리케이션을 지원할 수 있다.
Persistent Volume (PV)
Persistent Volume(PV)은 쿠버네티스 클러스터 내에서 스토리지 리소스를 추상화한 객체이다. PV는 클러스터 관리자가 직접 프로비저닝 하거나 쿠버네티스가 동적으로 생성할 수 있으며, 클러스터의 다른 리소스와 독립적으로 존재한다. PV는 특정 사용자를 위한 것이 아니며, 사용자는 PVC를 통해 PV에 접근할 수 있다.
- 스토리지 유형: PV는 NFS, iSCSI, 클라우드 스토리지 등 다양한 스토리지 유형을 지원하며, 이러한 유형에 따라 PV가 구성될 수 있다.
- 스토리지 클래스: PV는 특정 스토리지 클래스를 통해 정의될 수 있으며, 이는 PVC가 해당 PV를 요청할 때 사용된다.
- 접근 모드: PV는
ReadWriteOnce
,ReadOnlyMany
,ReadWriteMany
와 같은 접근 모드를 설정할 수 있으며, 이는 PV가 어떤 방식으로 접근될 수 있는지를 결정한다. - 용량: PV는 특정한 스토리지 용량을 가지며, 이를 통해 PVC가 요청하는 크기와 일치하는지 여부를 판단한다.
Persistent Volume Claim (PVC)
Persistent Volume Claim(PVC)은 사용자가 스토리지를 요청할 때 사용하는 객체이다. 사용자는 필요한 스토리지의 크기와 접근 모드 등을 정의하여 PVC를 생성하며, 쿠버네티스는 이 PVC에 맞는 PV를 찾아 바인딩한다. PVC를 통해 사용자는 PV에 접근할 수 있으며, 이를 통해 데이터를 읽고 쓸 수 있다.
- 스토리지 클래스 요청: PVC는 특정 스토리지 클래스를 요청할 수 있으며, 해당 클래스의 PV에 바인딩된다.
- 접근 모드: PVC는 사용자가 요청하는 스토리지 접근 모드를 정의하며, 이는 PV의 접근 모드와 일치해야 한다.
- 스토리지 크기: PVC는 필요한 스토리지 용량을 정의하며, 이 요청에 따라 적절한 PV가 바인딩된다.
PVC와 PV 설정 방법
1. Persistent Volume (PV) 설정
PV를 정의할 때는 스토리지의 크기, 접근 모드, 스토리지 클래스 등을 지정한다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
- storageClassName: PV가 속하는 스토리지 클래스의 이름으로, PVC가 요청할 때 사용된다.
- capacity: PV의 스토리지 용량을 지정한다.
- accessModes: PV에 접근할 수 있는 모드를 지정하며,
ReadWriteOnce
는 단일 노드에서 읽기 및 쓰기가 가능함을 의미한다. - hostPath: 로컬 노드 파일 시스템의 경로를 지정한다 (예시로
/mnt/data
).
2. Persistent Volume Claim (PVC) 설정
PVC는 사용자가 필요로 하는 스토리지의 크기와 접근 모드를 정의한다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
- storageClassName: PVC가 요청할 스토리지 클래스의 이름으로, 이 필드가 PV의
storageClassName
과 일치해야 한다. - accessModes: 사용자가 요청하는 스토리지 접근 모드를 정의한다.
- resources: 요청하는 스토리지의 크기를 정의한다.
동작 원리
- 사용자가 PVC를 생성하면, 이 PVC는 특정한 스토리지 크기와 접근 모드를 요구한다.
- 쿠버네티스는 PVC의 요구사항에 맞는 PV를 찾아 바인딩한다.
- PVC와 PV가 바인딩되면, 애플리케이션은 PVC를 참조하여 PV에 접근할 수 있게 된다.
Volume Claim의 자동 프로비저닝
쿠버네티스는 동적 프로비저닝(dynamic provisioning)을 통해 사용자가 PVC를 요청할 때 자동으로 PV를 생성할 수 있다. 이를 위해서는 스토리지 클래스(StorageClass)가 필요하다. 사용자는 특정 스토리지 클래스를 PVC에 지정하여, 해당 클래스에 정의된 방식으로 PV가 동적으로 생성되도록 할 수 있다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
위와 같은 스토리지 클래스가 설정되어 있으면, 사용자는 standard
스토리지 클래스를 요청할 수 있으며, PVC가 생성될 때 해당 클래스에 따라 PV가 동적으로 생성된다.
'DevOps > K8S' 카테고리의 다른 글
[K8S] 인그레스와 관련 리소스 (1) | 2024.10.08 |
---|---|
[k8s] DNS (1) | 2024.09.02 |
[k8s] 클러스터의 주요 구성 요소와 문제 발생 시 영향 (2) | 2024.08.29 |
[k8s] Deployment (0) | 2024.08.29 |
[k8s] Pod (0) | 2024.08.29 |