korean-docs
추가 기능
PV 라이프사이클
자동 확장

Auto Expansion

Auto Expansion은 스토리지 사용량이 설정한 임계값에 도달하면 PVC(PersistentVolumeClaim)를 자동으로 확장해 디스크 부족 오류를 방지합니다. 수동으로 용량을 모니터링하고 리사이즈 작업을 하는 대신, Wave가 PVC 사용량을 지속적으로 추적하다가 애플리케이션이 공간 부족을 겪기 전에 확장을 실행합니다.

How Auto Expansion Works

Auto Expansion은 다음과 같은 지속적인 모니터링과 확장 주기로 동작합니다.

  1. Monitor PVC Usage: 확장 작업은 설정 가능한 주기(보통 몇 분 간격)로 실행되며, 설정된 모든 PVC를 점검합니다
  2. Compare Usage Against Threshold: 현재 사용률을 계산합니다: (used_bytes / capacity_bytes) × 100
  3. Trigger Expansion: 사용률이 설정한 임계값(예: 80%)을 초과하면 확장이 트리거됩니다
  4. Calculate Expansion Size: 퍼센트 기반 또는 고정 크기 방식 중 하나로 새 용량을 결정합니다
  5. Apply Max Capacity Limit: 설정되어 있다면 최대 용량 범위를 넘지 않도록 확장 크기를 줄입니다
  6. Verify StorageClass Support: PVC의 StorageClass에 allowVolumeExpansion: true가 설정되어 있는지 확인합니다
  7. Execute Expansion: Kubernetes API를 호출해 PVC의 용량 요청을 새 값으로 업데이트합니다
  8. Track Status: Kubernetes PVC의 condition과 할당된 리소스 상태를 통해 확장 진행 상황을 모니터링합니다
  9. Log Results: 모든 확장 시도를 타임스탬프, 메트릭, 상태 정보와 함께 기록합니다

Configuration Settings

Auto Expansion은 PVC별로 다음 설정을 사용합니다.

SettingDescriptionExampleNotes
Threshold Percentage확장을 트리거하는 사용률(%)80%범위: 0~100. 현재 사용률이 임계값 이상이면 확장이 발생합니다
Expansion Percentage현재 크기의 %만큼 확장50%예: 10 GiB → 15 GiB (50% 증가). 고정 크기와는 함께 설정할 수 없습니다
Expansion Size (Bytes)고정 확장량. 콘솔에서는 MiB 단위로 입력하며 저장 시 바이트 값으로 변환됩니다1024 MiB → expansionSizeByte: 1073741824항상 이 양만큼 추가합니다. 퍼센트 방식과는 함께 설정할 수 없습니다
Max Capacity무한정 확장을 막는 상한선102400 MiB (100 GiB)선택 사항입니다. 도달하면 더 이상 확장되지 않습니다
Enabled해당 PVC에 대한 활성화 여부true / falsePVC별 토글

확장 방식 선택하기

확장 방식은 퍼센트 또는 고정 크기 중 정확히 하나만 설정해야 합니다.

  • Percentage Expansion: 스토리지 필요량이 데이터 크기에 비례해 늘어나는 패턴에 적합합니다

    • 예: 사용자 업로드 콘텐츠, 문서 저장소, 미디어 파일
    • 10 GiB → 15 GiB (50% 확장)
    • 100 GiB → 150 GiB (50% 확장)
  • Fixed Size Expansion: 예측 가능한 증분 성장 패턴에 적합합니다

    • 예: 로그 파일, 시계열 데이터, append-only 데이터베이스
    • 10 GiB → 11 GiB (+1 GiB)
    • 100 GiB → 101 GiB (+1 GiB)

Expansion Status Types

각 확장 시도는 다음 상태값을 거쳐 전이합니다.

StatusMeaningWhen It OccursNext Steps
InProgress확장 요청이 K8s에 제출됨API 호출 성공, 볼륨 컨트롤러 대기 중PVC condition을 모니터링하세요. 대부분의 확장은 수 초에서 수 분 내에 완료됩니다
Completed확장 성공PVC 용량이 목표 용량과 같거나 초과함없음. 확장 주기가 완료되었습니다
ApiCallFailedK8s API 오류네트워크 문제, 인증 실패, API 타임아웃연결 상태와 RBAC 권한을 확인한 뒤 재시도하세요
ExpansionFailed볼륨 확장 오류StorageClass가 확장을 지원하지 않거나 하위 스토리지 오류 발생StorageClass 설정을 확인하고 스토리지 프로바이더가 온라인 확장을 지원하는지 확인하세요
MaxCapacityReached설정한 한도에 도달함확장 시 최대 용량 설정을 초과하게 됨최대 용량을 늘리거나 데이터를 정리하세요

Configuration Access

Wave 콘솔에서 Auto Expansion을 설정합니다.

  1. StoragePersistent Volume Claims로 이동합니다
  2. 드롭다운에서 클러스터를 선택합니다
  3. PVC 이름을 클릭해 상세 페이지를 엽니다
  4. Auto Expansion 탭으로 이동합니다
  5. Settings 버튼을 클릭합니다 (StorageClass가 확장을 지원해야 활성화됩니다)
  6. 임계값, 확장 방식, 선택적으로 최대 용량을 설정합니다
  7. OK를 클릭합니다
PVC Auto Expansion Settings Modal

Auto Expansion 탭에는 다음 내용이 표시됩니다.

  • PVC Information Card: 네임스페이스, 이름, 스토리지 클래스, 용량, volume expansion 허용 여부
  • Current Usage: 실시간 사용률을 보여주는 진행률 바
  • Configuration Card: 현재 설정, 활성화 상태, 생성/수정 타임스탬프
  • Usage History Chart: 용량과 사용량 추이를 보여주는 시계열 시각화
  • Auto Expansion Logs Table: 모든 확장 시도에 대한 상세 로그

Common Expansion Patterns

워크로드 특성에 맞춰 설정을 선택하세요.

🗄️ Database PVC (비례 성장)

데이터 크기와 스토리지 필요량이 비례하는 데이터베이스에 적합합니다.

Configuration:
  Threshold Percentage: 80%
  Expansion Method: Percentage
  Expansion Percentage: 50%
  Max Capacity: 512000 MiB (500 GiB)
 
Behavior:
  - 10 GiB at 80% usage → expands to 15 GiB
  - 15 GiB at 80% usage → expands to 22.5 GiB
  - Continues until 500 GiB limit reached
  - Prevents runaway costs with max capacity

이 패턴을 선택하는 이유:

  • 데이터베이스는 대체로 기존 데이터 양에 비례해 증가합니다
  • 퍼센트 확장은 데이터 크기에 자연스럽게 맞춰 확장됩니다
  • 최대 용량 설정으로 예상치 못한 비용 급증을 막을 수 있습니다

📝 Log Storage (고정 증분 성장)

성장률이 예측 가능한 로그 파일이나 시계열 데이터에 적합합니다.

Configuration:
  Threshold Percentage: 85%
  Expansion Method: Fixed Size
  Expansion Size: 10240 MiB (10 GiB)
  Max Capacity: 204800 MiB (200 GiB)
 
Behavior:
  - Always adds exactly 10 GiB when threshold hit
  - Predictable capacity planning
  - Works regardless of current size
  - Cap at 200 GiB for cost control

이 패턴을 선택하는 이유:

  • 로그 파일은 비교적 일정한 속도로 쌓입니다
  • 고정 증분 방식은 용량 계획을 단순하게 만듭니다
  • 시간에 따른 스토리지 비용을 예측하기 쉽습니다

💾 Cache Volume (공격적인 무제한 성장)

데이터를 축출(evict)할 수 있지만 용량이 클수록 성능에 도움이 되는 캐시에 적합합니다.

Configuration:
  Threshold Percentage: 75%
  Expansion Method: Percentage
  Expansion Percentage: 100%
  Max Capacity: (not set)
 
Behavior:
  - 10 GiB at 75% usage → doubles to 20 GiB
  - 20 GiB at 75% usage → doubles to 40 GiB
  - No maximum limit (grow as needed)
  - Application handles cache eviction

이 패턴을 선택하는 이유:

  • 캐시 성능은 용량이 클수록 좋아집니다
  • 공격적으로 두 배씩 늘리면 확장 빈도가 줄어듭니다
  • 데이터 축출은 애플리케이션이 내부적으로 관리합니다
  • 캐시 데이터는 중요도가 낮으므로 최대 용량을 설정하지 않습니다
⚠️

최대 용량을 설정하지 않는 경우

최대 용량을 설정하지 않으면 무제한으로 성장할 수 있으며, 다음과 같은 문제가 생길 수 있습니다.

  • 예상치 못한 스토리지 비용
  • 클라우드 환경에서의 리소스 고갈
  • 용량 계획의 어려움

무제한 성장은 다음 경우에만 사용하세요.

  • 개발/테스트 환경
  • 데이터 관리 기능이 내장된 워크로드(캐시, 임시 데이터)
  • 스토리지 비용에 대한 알림을 설정해 둔 경우

Monitoring Expansion Activity

확장 이력과 현재 상태를 추적합니다.

Usage History Chart

시계열 차트에는 다음이 표시됩니다.

  • Capacity Line: PVC 용량 추이를 보여주며, 확장이 발생할 때 계단식으로 증가합니다
  • Usage Line: 실제 스토리지 소비량을 보여줍니다
  • Visual Indicators: 확장 이벤트와 사용량 추이를 한눈에 파악할 수 있습니다
  • Time Range: 조회 기간을 설정할 수 있습니다 (최근 24시간, 7일, 30일)

Expansion Logs Table

로그 테이블은 상세한 감사 추적을 제공합니다.

ColumnInformationUse Case
Timestamp확장이 발생한 시점애플리케이션 이벤트와 연관 분석
Status현재 확장 상태조치가 필요한 실패 케이스 파악
Current Capacity확장 전 PVC 크기확장 계산의 기준값
Target Capacity확장 후 새 PVC 크기예상한 증가량 검증
Current Usage확장 시점의 사용량임계값 트리거 확인
Expansion Bytes추가된 용량시간에 따른 확장량 추적
Storage Class사용된 스토리지 클래스올바른 스토리지 티어인지 확인
Error Reason실패 상세 내용(실패 시)문제 해결

테이블은 다음 기능을 지원합니다.

  • Sorting: 컬럼 헤더를 클릭해 원하는 필드로 정렬합니다
  • Pagination: 페이지당 10개씩 과거 로그를 탐색합니다
  • Color Coding: 상태 배지를 색상으로 구분합니다 (녹색=Completed, 노란색=InProgress, 빨간색=Failed)
  • Human Readable Sizes: 용량을 GiB/TiB 단위로 읽기 쉽게 표시합니다
PVC Expansion Logs

Troubleshooting

⚠️

일반적인 문제와 해결 방법

StorageClass가 확장을 지원하지 않는 경우

오류: "StorageClass does not support volume expansion"

해결 방법:

# Check current StorageClass
kubectl get storageclass <storage-class-name> -o yaml
 
# Update to enable expansion
kubectl patch storageclass <storage-class-name> -p '{"allowVolumeExpansion": true}'
 
# Verify the change
kubectl get storageclass <storage-class-name> -o jsonpath='{.allowVolumeExpansion}'

확장이 InProgress 상태에서 멈춘 경우

확장이 오랫동안 "InProgress" 상태에 머무릅니다.

일반적인 원인:

  • Filesystem Resize Pending: 일부 스토리지 프로바이더는 파일시스템 확장을 위해 pod 재시작이 필요합니다

    • PVC condition 확인: kubectl describe pvc <pvc-name>
    • FileSystemResizePending condition을 확인하세요
    • PVC를 사용하는 pod를 재시작해 파일시스템 리사이즈를 트리거하세요
  • Storage Provider Limitation: 하위 스토리지가 온라인 확장을 지원하지 않습니다

    • 스토리지 프로바이더 문서를 확인하세요
    • 확장에 다운타임이 필요할 수 있습니다
  • Volume Controller Issue: Kubernetes 볼륨 컨트롤러에서 오류가 발생했습니다

    • 컨트롤러 로그 확인: kubectl logs -n kube-system <volume-controller-pod>
    • PVC 이벤트 확인: kubectl describe pvc <pvc-name>

MaxCapacityReached로 확장이 막힌 경우

PVC가 설정된 최대 용량 한도에 도달했습니다.

선택지:

  1. Increase Max Capacity: 설정을 수정해 한도를 늘립니다
  2. Clean Up Data: 불필요한 파일을 삭제해 공간을 확보합니다
  3. Remove Max Capacity: 최대 용량 설정을 해제해 무제한으로 확장합니다 (신중하게 사용하세요)
  4. Migrate to Larger Volume: 새 PVC를 만들어 데이터를 마이그레이션합니다

확장이 트리거되지 않는 경우

사용률이 임계값을 넘었는데도 확장이 일어나지 않습니다.

체크리스트:

  • 해당 PVC에서 Auto Expansion이 활성화되어 있는지
  • 실제 사용률이 임계값을 초과했는지 (메트릭 확인)
  • 이미 최대 용량에 도달하지 않았는지
  • 현재 진행 중인 확장이 없는지
  • StorageClass가 확장을 지원하는지
  • RBAC 권한이 올바르게 설정되어 있는지

확장 계산 값이 이상한 경우

목표 용량이 예상 값과 다릅니다.

다음을 기억하세요.

  • 퍼센트 확장: new_capacity = current_capacity × (1 + expansion_percentage / 100)
  • 고정 크기 확장: new_capacity = current_capacity + expansion_size_bytes
  • 최대 용량 설정이 있으면 한도를 넘지 않도록 확장량을 줄입니다
  • Kubernetes가 스토리지 프로바이더의 할당 단위에 맞춰 용량을 반올림할 수 있습니다

Best Practices

프로덕션 배포 가이드라인

현실적인 임계값을 설정하세요:

  • 프로덕션 데이터베이스는 70~80% (안전성과 비용의 균형)
  • 개발 환경은 80~85% (더 공격적으로)
  • 로그/캐시 볼륨은 85~90% (여유를 더 타이트하게 가져가도 됩니다)

최대 용량은 항상 설정하세요:

  • 데이터 누수나 버그로 인한 비용 폭주를 막습니다
  • 예산과 예상 최대 데이터 크기를 기준으로 설정하세요
  • 최대 용량에 근접하면 모니터링/알림을 활용하세요

확장 빈도를 모니터링하세요:

  • 너무 잦다면 (매일/매시간): 초기 용량이 너무 작다는 뜻이므로 기본 크기를 늘리세요
  • 너무 드물다면 (몇 달에 한 번): 비용 절감을 위해 임계값을 높일 수 있습니다
  • 적절하다면 (매주/매월): 자연스러운 데이터 증가 속도와 일치합니다

먼저 비프로덕션 환경에서 테스트하세요:

  • StorageClass가 확장을 지원하는지 확인하세요
  • 확장이 정상적으로 완료되는지 확인하세요
  • 확장 중 애플리케이션 동작을 점검하세요
  • 모니터링과 알림이 제대로 동작하는지 검증하세요

가변적인 성장에는 퍼센트 방식을 사용하세요:

  • 사용자 생성 콘텐츠
  • 데이터베이스 데이터
  • 문서/미디어 저장소

예측 가능한 성장에는 고정 크기 방식을 사용하세요:

  • 로그 파일
  • 시계열 메트릭
  • append-only 데이터베이스

로그를 정기적으로 검토하세요:

  • 매주 실패한 확장이 있는지 확인하세요
  • MaxCapacityReached 이벤트를 조사하세요
  • 관찰된 패턴에 따라 임계값을 조정하세요
  • 애플리케이션 이벤트와 연관지어 분석하세요

Related Documentation