Kubernetes 환경에서 Application이 Storage를 사용하려면 직접 Disk를 지정하는 방식이 아니라 PVC(Persistent Volume Claim)를 통해 Storage를 요청합니다.
개발자는 실제 Storage 위치나 종류를 몰라도 필요한 용량과 조건만 정의하면 Kubernetes가 적절한 Storage를 연결해 줍니다.
PVC는 Application과 Persistent Volume(PV) 사이를 연결하는 추상화 계층입니다.
이를 통해 Kubernetes는 Cloud Storage, Network Storage, Local Storage 등 다양한 환경에서 동일한 방식으로 데이터를 관리할 수 있습니다.
| 구성 요소 | 역할 |
|---|---|
| PVC | Storage 요청 |
| PV | 실제 Storage 제공 |
| Storage Class | Storage 자동 생성 |
| Pod | PVC 사용 |
PVC 구조를 이해하면 Kubernetes Application이 Storage를 요청하고 연결하는 전체 과정을 이해할 수 있습니다.
Kubernetes PVC란 무엇인가?
PVC(Persistent Volume Claim)는 Kubernetes에서 Storage를 요청하기 위한 Resource입니다.
Pod는 직접 PV를 선택하지 않고 PVC를 통해 필요한 Storage 조건을 요청합니다.
예:
개발자 요청:
Storage 용량:
100GB
Access Mode:
ReadWriteOnce
↓
Kubernetes
↓
조건에 맞는 PV 연결
이 구조를 통해 Application과 Storage를 분리하여 관리할 수 있습니다.
Kubernetes PVC가 필요한 이유
Container 환경에서는 Application과 Storage를 분리하는 것이 중요합니다.
Pod는 생성과 삭제가 반복되기 때문에 Container 내부에 데이터를 저장하면 데이터 손실 위험이 있습니다.
문제:
| 상황 | 문제 |
|---|---|
| Pod 삭제 | 데이터 손실 가능 |
| Node 변경 | Storage 연결 문제 |
| 환경 변경 | Storage 재구성 필요 |
| 수동 Disk 관리 | 운영 복잡성 증가 |
PVC를 사용하면 Application Lifecycle과 데이터 Lifecycle을 분리할 수 있습니다.
Kubernetes PVC 동작 구조
PVC는 PV와 연결되어 Storage를 제공합니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| Pod | Application 실행 |
| PVC | Storage 요청 |
| PV | Storage 제공 |
| Storage Backend | 실제 Disk |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | PVC 생성 |
| 2단계 | Storage 조건 확인 |
| 3단계 | PV 검색 또는 생성 |
| 4단계 | PVC와 PV 연결 |
| 5단계 | Pod Volume Mount |
이 과정을 Binding이라고 합니다.
Kubernetes PVC와 PV Binding이란?
Binding은 PVC와 PV를 연결하는 과정입니다.
Kubernetes는 PVC 조건을 확인하고 적합한 PV를 찾아 연결합니다.
확인 조건:
| 조건 | 설명 |
|---|---|
| Storage Class | Storage 종류 |
| Capacity | 필요 용량 |
| Access Mode | 접근 방식 |
| Selector | 선택 조건 |
조건이 맞는 PV가 있으면 자동으로 연결됩니다.
Kubernetes PVC Lifecycle
PVC도 생성부터 삭제까지 Lifecycle을 가집니다.
| 상태 | 설명 |
|---|---|
| Pending | PV 연결 대기 |
| Bound | PV 연결 완료 |
| Lost | 연결된 PV 손실 |
정상적인 상태에서는 대부분 Bound 상태로 유지됩니다.
Kubernetes PVC와 Storage Class 관계
Storage Class는 PVC 요청을 기반으로 Storage를 자동 생성하는 기능입니다.
PVC가 특정 Storage Class를 요청하면 Kubernetes가 해당 Storage Backend를 통해 PV를 생성합니다.
구조:
PVC 생성
↓
Storage Class 확인
↓
Provisioner 실행
↓
PV 생성
↓
PVC 연결
이를 Dynamic Provisioning이라고 합니다.
Kubernetes PVC Access Mode 설정
PVC는 Storage 접근 방식을 지정합니다.
주요 방식:
| Access Mode | 설명 |
|---|---|
| ReadWriteOnce(RWO) | 하나의 Node에서 읽기/쓰기 |
| ReadOnlyMany(ROX) | 여러 Node 읽기 전용 |
| ReadWriteMany(RWX) | 여러 Node 읽기/쓰기 |
Application 특성에 맞는 Access Mode 선택이 필요합니다.
Kubernetes PVC Storage 용량 설정
PVC는 필요한 Storage 크기를 요청합니다.
예:
requests:
storage: 100Gi
의미:
100GB 이상의 Storage 요청
Kubernetes는 요청 조건에 맞는 PV를 연결합니다.
운영 환경에서는 실제 사용량을 고려하여 용량을 설정해야 합니다.
Kubernetes PVC와 Pod 연결 구조
Pod는 PVC를 Volume으로 연결하여 사용합니다.
구조:
Pod
↓
Volume
↓
PVC
↓
PV
↓
Storage
Container는 PVC를 통해 Storage를 사용할 수 있습니다.
Kubernetes PVC와 StatefulSet 관계
StatefulSet은 PVC를 활용하여 각 Pod마다 독립적인 Storage를 제공합니다.
구조:
StatefulSet
↓
Database-0
↓
PVC-0
↓
PV-0
Database-1
↓
PVC-1
↓
PV-1
각 Instance의 데이터를 안정적으로 유지할 수 있습니다.
Kubernetes PVC 삭제와 데이터 관리
PVC 삭제 시 데이터 처리 방식은 Storage 정책에 따라 달라집니다.
예:
| 정책 | 결과 |
|---|---|
| Retain | 데이터 유지 |
| Delete | Storage 삭제 |
| Recycle | 재사용 처리 |
중요한 데이터는 Retain 정책을 고려해야 합니다.
Kubernetes PVC와 Dynamic Provisioning
Dynamic Provisioning을 사용하면 관리자가 직접 PV를 생성하지 않아도 됩니다.
기존 방식:
관리자
↓
PV 생성
↓
PVC 연결
자동 방식:
사용자
↓
PVC 생성
↓
Storage 자동 생성
Cloud Kubernetes 환경에서 많이 사용하는 방식입니다.
Kubernetes PVC 운영 시 고려사항
Production 환경에서는 PVC 관리 정책이 필요합니다.
| 항목 | 설명 |
|---|---|
| Backup | 데이터 보호 |
| Capacity 관리 | Storage 부족 방지 |
| Access Mode | Application 요구사항 확인 |
| Monitoring | 사용량 확인 |
Storage 문제는 Application 장애로 이어질 수 있기 때문에 지속적인 관리가 필요합니다.
Kubernetes PVC 장애 상황
PVC 문제가 발생하면 Pod 실행에 영향을 줄 수 있습니다.
주요 문제:
| 문제 | 결과 |
|---|---|
| PVC Pending | Pod 실행 지연 |
| PV 연결 실패 | Storage 사용 불가 |
| Disk 부족 | Application 오류 |
| Permission 문제 | 데이터 접근 실패 |
Storage 상태 확인은 Kubernetes 운영에서 중요합니다.
Kubernetes PVC 장점
| 장점 | 설명 |
|---|---|
| Storage 추상화 | 환경과 관계없이 사용 |
| 데이터 유지 | Pod와 데이터 분리 |
| 자동화 | Dynamic Provisioning 지원 |
| 관리 편의성 | Storage 중앙 관리 |
PVC는 Kubernetes Storage Architecture의 핵심 연결 요소입니다.
자주 묻는 질문
PVC와 PV 차이는 무엇인가요?
PV는 실제 Storage Resource이고 PVC는 Application이 Storage를 요청하는 인터페이스입니다.
PVC를 삭제하면 데이터도 삭제되나요?
Storage Reclaim Policy 설정에 따라 다릅니다.
Retain 정책이면 데이터가 유지될 수 있습니다.
하나의 PVC를 여러 Pod가 사용할 수 있나요?
가능하지만 Storage Access Mode에 따라 제한됩니다.
RWX를 지원하는 Storage에서는 여러 Pod가 동시에 사용할 수 있습니다.
마무리
Kubernetes Persistent Volume Claim(PVC)은 Application이 필요한 Storage를 요청하고 Persistent Volume과 연결하는 핵심 Resource입니다.
| 구성 요소 | 역할 |
|---|---|
| PVC | Storage 요청 |
| PV | Storage 제공 |
| Storage Class | 자동 Storage 생성 |
| Pod | Storage 사용 |
PVC 구조를 이해하면 Kubernetes 환경에서 Application과 데이터를 분리하고 안정적인 Storage 운영 구조를 구축할 수 있습니다.
다음 글에서는 Kubernetes Storage 자동 생성과 Provisioning 방식을 관리하는 Kubernetes Storage Class 완벽 가이드! Dynamic Provisioning과 Storage 자동화 구조 이해하기를 알아보겠습니다.