Container 환경에서 가장 중요한 문제 중 하나는 데이터 저장입니다.
일반적인 Container는 기본적으로 삭제되면 내부 데이터도 함께 사라지는 구조입니다.
예를 들어 Database Container를 실행한다고 가정해 보겠습니다.
Container 내부에 데이터를 저장하면:
Container 실행
↓
Database 데이터 생성
↓
Container 삭제
↓
데이터 손실
이런 문제가 발생할 수 있습니다.
Kubernetes에서는 Container와 Storage를 분리하기 위해 Persistent Volume(PV)과 Persistent Volume Claim(PVC) 구조를 제공합니다.
Application은 직접 Disk를 관리하지 않고 PVC를 통해 Storage를 요청하고, Kubernetes가 적절한 Storage를 연결합니다.
| 구성 요소 | 역할 |
|---|---|
| Persistent Volume(PV) | 실제 Storage 공간 |
| Persistent Volume Claim(PVC) | Storage 요청 |
| StorageClass | Storage 생성 정책 |
| Pod | Storage 사용 |
PV와 PVC 구조를 이해하면 Database, File Server, Stateful Application을 안정적으로 운영할 수 있습니다.
Kubernetes Storage가 필요한 이유
Container는 기본적으로 Ephemeral(임시) 환경입니다.
구조:
Container 생성
↓
Application 실행
↓
데이터 저장
↓
Container 삭제
↓
데이터 삭제
하지만 실제 서버 운영에서는 데이터가 유지되어야 합니다.
예:
Database
- 사용자 정보
- 주문 데이터
- 설정 데이터
File Server
- 업로드 파일
- 이미지 데이터
이러한 데이터는 Container 생명주기와 분리되어야 합니다.
Kubernetes Persistent Volume(PV)이란?
Persistent Volume은 Kubernetes Cluster에서 사용할 수 있는 실제 Storage 공간입니다.
관리자가 미리 생성하거나 StorageClass를 통해 자동 생성됩니다.
구조:
Storage
↓
Persistent Volume
↓
Persistent Volume Claim
↓
Pod
PV는 실제 Disk 또는 Cloud Storage와 연결됩니다.
Kubernetes Persistent Volume Claim(PVC)이란?
PVC는 Application이 Storage를 요청하는 객체입니다.
Pod는 직접 PV를 선택하지 않습니다.
대신 PVC를 요청하고 Kubernetes가 조건에 맞는 PV를 연결합니다.
구조:
Developer
↓
PVC 생성
↓
Kubernetes 확인
↓
적절한 PV 연결
↓
Pod 사용
Storage 관리와 Application 배포를 분리할 수 있습니다.
PV와 PVC를 분리하는 이유
운영 환경에서는 개발자와 Infrastructure 관리자의 역할이 다릅니다.
기존 방식:
개발자
↓
직접 Disk 설정
↓
Application 연결
문제:
- 환경 변경 어려움
- Cloud 이전 어려움
- Storage 관리 복잡
Kubernetes 방식:
Infrastructure 관리자
↓
PV 관리
개발자
↓
PVC 요청
역할을 분리할 수 있습니다.
Kubernetes PV 동작 구조
PV 연결 과정:
1단계
Storage 생성
↓
2단계
PV 등록
↓
3단계
PVC 요청
↓
4단계
Binding
↓
5단계
Pod 연결
Kubernetes가 Storage 연결 과정을 관리합니다.
Kubernetes PV 상태 확인
PV는 여러 상태를 가집니다.
| 상태 | 의미 |
|---|---|
| Available | 사용 가능 |
| Bound | PVC 연결 완료 |
| Released | PVC 삭제 후 유지 |
| Failed | 오류 상태 |
확인 명령어:
kubectl get pv
Storage 상태 확인에 사용됩니다.
Kubernetes PVC 상태 확인
PVC 상태:
| 상태 | 의미 |
|---|---|
| Pending | PV 연결 대기 |
| Bound | 정상 연결 |
| Lost | 연결 손실 |
확인:
kubectl get pvc
Storage 장애 분석 시 중요한 명령어입니다.
Kubernetes StorageClass란?
StorageClass는 Storage를 자동으로 생성하는 정책입니다.
기존 방식:
관리자가 PV 직접 생성
↓
PVC 연결
StorageClass 방식:
PVC 요청
↓
StorageClass 확인
↓
자동 PV 생성
Cloud 환경에서 많이 사용됩니다.
Kubernetes Dynamic Provisioning 구조
Dynamic Provisioning은 Storage 자동 생성 방식입니다.
구조:
PVC 생성
↓
StorageClass 확인
↓
Cloud Storage 생성
↓
PV 자동 생성
↓
Pod 연결
운영 효율을 높일 수 있습니다.
Kubernetes Static Provisioning과 Dynamic Provisioning 비교
| 구분 | Static | Dynamic |
|---|---|---|
| PV 생성 | 수동 | 자동 |
| 관리 방식 | 직접 관리 | StorageClass 기반 |
| 운영 규모 | 작은 환경 | 대규모 환경 |
| Cloud 환경 | 제한적 | 적합 |
Production 환경에서는 Dynamic Provisioning 사용이 많습니다.
Kubernetes Access Mode 이해하기
PV는 Storage 접근 방식을 정의합니다.
| Mode | 의미 |
|---|---|
| ReadWriteOnce | 하나의 Node에서 읽기/쓰기 |
| ReadOnlyMany | 여러 Node 읽기 |
| ReadWriteMany | 여러 Node 읽기/쓰기 |
Application 특성에 맞는 선택이 필요합니다.
Kubernetes Reclaim Policy란?
PVC가 삭제되었을 때 PV 처리 방식을 결정합니다.
| 정책 | 설명 |
|---|---|
| Retain | 데이터 유지 |
| Delete | Storage 삭제 |
| Recycle | 재사용 |
Database 운영에서는 Retain 설정을 고려해야 합니다.
Kubernetes Database 운영과 PV
Database는 Kubernetes Storage 활용 사례가 많습니다.
예:
MySQL Pod
↓
PVC
↓
Persistent Volume
↓
Cloud Disk
Container가 재시작되어도 데이터가 유지됩니다.
Kubernetes PV 장애 상황
Storage 문제는 Application 장애로 이어집니다.
주요 문제:
| 문제 | 원인 |
|---|---|
| PVC Pending | PV 부족 |
| Mount 실패 | 권한 또는 연결 문제 |
| Storage 부족 | Disk Capacity 문제 |
| Volume 오류 | Cloud Storage 문제 |
Storage 장애 분석이 필요합니다.
Kubernetes Storage 장애 확인 방법
확인 순서:
1단계
PVC 확인
kubectl get pvc
↓
2단계
PV 확인
kubectl get pv
↓
3단계
Pod Event 확인
kubectl describe pod pod-name
↓
4단계
StorageClass 확인
kubectl get storageclass
순서대로 원인을 찾습니다.
Kubernetes Storage 운영 전략
Production 환경에서는 다음을 고려해야 합니다.
| 항목 | 설명 |
|---|---|
| Backup | 데이터 보호 |
| Replication | 고가용성 |
| StorageClass | 자동화 |
| Monitoring | 용량 관리 |
Storage는 Application 안정성의 핵심입니다.
Kubernetes PV 장점
| 장점 | 설명 |
|---|---|
| 데이터 유지 | Container 삭제 보호 |
| 관리 분리 | 개발과 인프라 분리 |
| Cloud 연동 | 다양한 Storage 지원 |
| 확장성 | 대규모 운영 가능 |
Persistent Volume은 Kubernetes Stateful Application 운영의 기본 구조입니다.
자주 묻는 질문
Pod를 삭제하면 데이터도 삭제되나요?
PVC와 PV를 사용하면 Container 삭제와 관계없이 데이터를 유지할 수 있습니다.
PV와 PVC 차이는 무엇인가요?
PV는 실제 Storage 공간이고 PVC는 Storage를 요청하는 객체입니다.
Database를 Kubernetes에서 운영할 수 있나요?
가능합니다.
다만 Backup, Replication, Storage 안정성을 함께 고려해야 합니다.
마무리
Kubernetes Persistent Volume은 Container 환경에서 데이터 지속성을 제공하는 핵심 Storage 구조입니다.
| 구성 요소 | 역할 |
|---|---|
| PV | 실제 Storage |
| PVC | Storage 요청 |
| StorageClass | 자동 생성 정책 |
| Pod | Storage 사용 |
PV와 PVC 구조를 이해하면 Database와 같은 Stateful Application을 Kubernetes 환경에서 안정적으로 운영할 수 있습니다.
다음 글에서는 Kubernetes Storage 자동화를 위한 Kubernetes StorageClass 완벽 가이드! Dynamic Provisioning과 Cloud Storage 연결 구조 이해하기를 알아보겠습니다.