Kubernetes 환경에서 Storage를 운영할 때 모든 Persistent Volume(PV)을 관리자가 직접 생성하는 방식은 대규모 환경에서 많은 관리 부담을 발생시킵니다.
Application이 증가할수록 필요한 Storage도 계속 늘어나며, 각각의 PV를 수동으로 생성하고 관리하는 것은 비효율적입니다.
Kubernetes에서는 이러한 문제를 해결하기 위해 Storage Class 기능을 제공합니다.
Storage Class는 PVC 요청이 발생하면 필요한 Storage를 자동으로 생성하고 연결하는 Dynamic Provisioning 기능을 제공하는 Kubernetes Storage 관리 Resource입니다.
| 구성 요소 | 역할 |
|---|---|
| Storage Class | Storage 생성 정책 정의 |
| PVC | Storage 요청 |
| PV | 실제 Storage 생성 |
| Provisioner | Storage 자동 생성 담당 |
Storage Class 구조를 이해하면 Kubernetes에서 Storage가 자동으로 생성되고 관리되는 과정을 이해할 수 있습니다.
Kubernetes Storage Class란 무엇인가?
Storage Class는 Kubernetes에서 Storage 종류와 생성 방식을 정의하는 Resource입니다.
관리자는 Storage Backend, Provisioner, 성능 옵션 등을 Storage Class에 설정합니다.
예:
Storage Class:
SSD Storage
↓
PVC 요청
↓
자동 PV 생성
↓
Pod 연결
Application 개발자는 실제 Disk 생성 과정을 몰라도 필요한 Storage를 사용할 수 있습니다.
Kubernetes Storage Class가 필요한 이유
기존 Static Provisioning 방식에서는 관리자가 직접 PV를 생성해야 합니다.
기존 방식:
관리자
↓
PV 생성
↓
PVC 연결
↓
Pod 사용
문제:
| 문제 | 설명 |
|---|---|
| 수동 관리 | PV 생성 작업 증가 |
| 확장 어려움 | Application 증가 대응 부족 |
| 환경 의존성 | Storage 설정 복잡 |
| 운영 부담 | 관리 작업 증가 |
Storage Class는 이러한 과정을 자동화합니다.
Kubernetes Storage Class 동작 구조
Storage Class는 PVC 요청을 받아 Storage를 자동 생성합니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| PVC | Storage 요청 |
| Storage Class | 생성 정책 확인 |
| Provisioner | Storage 생성 |
| PV | 자동 생성 |
| Pod | Storage 사용 |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | PVC 생성 |
| 2단계 | Storage Class 확인 |
| 3단계 | Provisioner 호출 |
| 4단계 | PV 생성 |
| 5단계 | PVC 연결 완료 |
이를 Dynamic Provisioning이라고 합니다.
Kubernetes Dynamic Provisioning이란?
Dynamic Provisioning은 PVC 요청 시 Kubernetes가 자동으로 PV를 생성하는 기능입니다.
관리자가 사전에 PV를 준비하지 않아도 필요한 Storage를 자동으로 제공합니다.
예:
Database Pod 생성
↓
PVC 요청
↓
Storage Class 확인
↓
Cloud Disk 생성
↓
PV 연결
↓
Database 실행
Cloud Kubernetes 환경에서 일반적으로 사용하는 방식입니다.
Kubernetes Provisioner란?
Provisioner는 실제 Storage를 생성하는 Component입니다.
Storage Class는 어떤 Provisioner를 사용할지 정의합니다.
대표 예:
| Provisioner | Storage |
|---|---|
| AWS EBS CSI Driver | AWS Block Storage |
| GCE PD CSI Driver | Google Persistent Disk |
| Azure Disk CSI Driver | Azure Storage |
| NFS Provisioner | Network Storage |
Provisioner는 Kubernetes와 Storage Backend를 연결합니다.
Kubernetes CSI(Container Storage Interface)란?
CSI는 Kubernetes와 외부 Storage 시스템을 연결하기 위한 표준 Interface입니다.
과거에는 Kubernetes 내부 코드에 Storage Driver가 포함되었지만 현재는 CSI 방식으로 분리되었습니다.
구조:
Kubernetes
↓
CSI Driver
↓
Storage Backend
장점:
| 효과 | 설명 |
|---|---|
| 확장성 | 다양한 Storage 지원 |
| 표준화 | 일관된 관리 방식 |
| 유지보수 | Driver 독립 운영 |
현재 Kubernetes Storage 환경에서는 CSI 기반 구성이 일반적입니다.
Kubernetes Storage Class 주요 설정
Storage Class는 다양한 옵션을 제공합니다.
| 설정 | 설명 |
|---|---|
| provisioner | Storage 생성 Driver |
| parameters | Storage 옵션 |
| reclaimPolicy | 삭제 정책 |
| volumeBindingMode | Binding 방식 |
| allowVolumeExpansion | 용량 확장 허용 |
환경에 맞는 Storage 정책을 설정할 수 있습니다.
Kubernetes reclaimPolicy란?
reclaimPolicy는 PVC 삭제 후 PV와 데이터를 어떻게 처리할지 결정합니다.
주요 정책:
| 정책 | 설명 |
|---|---|
| Delete | PV와 Storage 삭제 |
| Retain | 데이터 유지 |
Database 같은 중요한 데이터는 Retain 정책을 고려해야 합니다.
Kubernetes volumeBindingMode란?
volumeBindingMode는 PV 생성과 Node 배치 시점을 결정합니다.
대표 방식:
| 방식 | 설명 |
|---|---|
| Immediate | PVC 생성 즉시 PV 생성 |
| WaitForFirstConsumer | Pod 배치 후 Storage 생성 |
특히 Multi Zone Cloud 환경에서는 WaitForFirstConsumer 방식이 중요합니다.
Kubernetes Storage Class와 PVC 관계
PVC는 Storage Class를 지정하여 원하는 Storage를 요청합니다.
구조:
PVC
↓
Storage Class 선택
↓
Provisioner 실행
↓
PV 생성
↓
Pod 연결
Application은 Storage 생성 과정을 직접 관리하지 않습니다.
Kubernetes Default Storage Class란?
Cluster에는 기본 Storage Class를 지정할 수 있습니다.
PVC에서 Storage Class를 지정하지 않으면 기본 Storage Class가 사용됩니다.
활용:
일반 Application:
Default Storage 사용
고성능 Database:
SSD Storage Class 지정
환경별 Storage 정책을 분리할 수 있습니다.
Kubernetes Storage Class 활용 사례
| 활용 사례 | Storage Class 사용 |
|---|---|
| Database | 고성능 SSD Storage |
| Backup | 대용량 Storage |
| Logging | 빠른 Disk |
| Development | 저비용 Storage |
Application 특성에 따라 Storage 정책을 선택합니다.
Kubernetes Storage Class 운영 시 고려사항
Production 환경에서는 Storage 정책 설계가 중요합니다.
| 항목 | 설명 |
|---|---|
| 성능 | SSD/HDD 선택 |
| 비용 | Storage 가격 관리 |
| Backup | 데이터 보호 |
| 확장성 | 용량 증가 지원 |
Storage Class 설계는 전체 Kubernetes 운영 비용과 연결됩니다.
Kubernetes Storage Class 장애 영향
Storage Class 또는 Provisioner 문제가 발생하면 새로운 Storage 생성에 영향을 줍니다.
영향:
| 문제 | 결과 |
|---|---|
| Provisioner 오류 | PVC Pending |
| CSI Driver 오류 | Volume 연결 실패 |
| Storage Backend 문제 | PV 생성 실패 |
Storage Component Monitoring이 필요합니다.
Kubernetes Storage Class 장점
| 장점 | 설명 |
|---|---|
| 자동화 | PV 자동 생성 |
| 확장성 | 대규모 환경 지원 |
| 관리 편의 | 수동 작업 감소 |
| 표준화 | CSI 기반 운영 |
Storage Class는 Kubernetes Storage 자동화의 핵심 기능입니다.
자주 묻는 질문
Storage Class와 PV 차이는 무엇인가요?
Storage Class는 Storage 생성 정책이고 PV는 실제 생성된 Storage Resource입니다.
Storage Class 없이 PVC를 사용할 수 있나요?
가능하지만 직접 PV를 생성하는 Static Provisioning 방식이 필요합니다.
Storage Class는 모든 Kubernetes 환경에서 필요한가요?
소규모 환경에서는 선택 사항이지만 Production 환경에서는 대부분 사용합니다.
마무리
Kubernetes Storage Class는 PVC 요청에 따라 Storage를 자동 생성하고 Kubernetes Storage 운영을 자동화하는 핵심 Resource입니다.
| 구성 요소 | 역할 |
|---|---|
| Storage Class | Storage 생성 정책 |
| PVC | Storage 요청 |
| PV | 실제 Storage |
| CSI Driver | Storage 연결 |
Storage Class 구조를 이해하면 Kubernetes 환경에서 Application이 필요한 Storage를 자동으로 생성하고 효율적으로 관리하는 방식을 이해할 수 있습니다.
다음 글에서는 Kubernetes Container 설정과 실행 환경 관리를 위한 Kubernetes Volume 완벽 가이드! EmptyDir, HostPath, Persistent Volume 연결 구조 이해하기를 알아보겠습니다.