이 문서에서는 애플리케이션을 중단하지 않고 Google Kubernetes Engine (GKE)에서 스테이트풀 워크로드의 관리형 Lustre 볼륨의 스토리지 용량을 동적으로 늘리는 방법을 설명합니다.
예를 들어 장기 실행 AI/ML 학습 작업에 동적이고 예측할 수 없는 스토리지 요구사항이 있는 경우 Managed Lustre 볼륨 확장을 사용 설정하여 기존 Managed Lustre PersistentVolume (PV)의 스토리지 용량을 늘립니다.
이 문서는 GKE에서 상태 저장 워크로드의 스토리지를 관리하는 플랫폼 관리자 및 운영자, DevOps, 스토리지 관리자, 머신러닝 (ML) 엔지니어를 대상으로 합니다.
볼륨을 확장하면 표준 Google Cloud Managed Lustre 가격에 따라 새롭고 더 큰 용량을 기준으로 비용이 증가합니다.
시작하기 전에
요구사항
다음 요구사항을 충족해야 합니다.
- GKE 클러스터 버전 1.35.0-gke.2331000 이상이 있어야 합니다.
- 기존 클러스터에서 Managed Lustre CSI 드라이버를 사용 설정해야 합니다. 드라이버는 Standard 및 Autopilot 클러스터에서 기본적으로 사용 중지되어 있습니다.
제한사항
- 기존 볼륨의 크기는 늘릴 수만 있으며 줄일 수는 없습니다.
ReadOnlyMany액세스 모드에서는 볼륨 확장을 사용할 수 없습니다.- Lustre 볼륨의 크기를 조절할 때는 볼륨의 성능 등급에 설정된 최소 및 최대 용량 한도와 단계 크기를 따라야 합니다. 자세한 내용은 성능 고려사항을 참고하세요.
- Lustre 볼륨 크기를 GiB 단위로 1,000의 배수로 지정합니다. Kubernetes는 Ti와 같은 단위를 이진 값으로 변환합니다 (예: 18Ti는 18,432GiB로 해석됨). 이로 인해 Lustre API가 요청을 거부합니다.
StorageClass의 볼륨 확장 사용 설정
StorageClass가 볼륨 확장을 지원하는지 확인합니다.
kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'STORAGECLASS_NAME을 StorageClass 이름으로 바꿉니다.명령어에서 아무것도 출력하지 않거나
false를 반환하는 경우 확장을 허용하도록 StorageClass 구성을 명시적으로 업데이트해야 합니다.수정할 StorageClass 구성을 엽니다.
kubectl edit storageclass STORAGECLASS_NAME편집기에서 StorageClass 구성에
allowVolumeExpansion: true필드를 추가합니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: lustre-sc provisioner: lustre.csi.storage.gke.io ... allowVolumeExpansion: true
PersistentVolumeClaim 확장
볼륨 확장을 시작하려면 PersistentVolumeClaim (PVC)을 수정하여 볼륨 크기 증가를 요청합니다.
- 유효한 확장 프로그램 크기 결정에 설명된 대로 확장 프로그램의 새 유효한 크기를 확인합니다.
수정할 PVC 구성을 엽니다.
kubectl edit pvc PVC_NAMEPVC_NAME을 PVC 이름으로 바꿉니다.편집기에서 유효한 확장 크기로
spec.resources.requests.storage필드를 업데이트합니다. 예를 들어 볼륨을9000Gi에서18000Gi로 확장하려면storage필드를 다음과 같이 수정합니다.spec: accessModes: - ReadWriteOnce resources: requests: storage: 18000Gi # Changed from 9000Gi
볼륨 확장 확인
PVC의 이벤트를 검토하여 확장 진행 상황을 모니터링합니다.
kubectl describe pvc PVC_NAMEPVC 출력의 다음 이벤트는 볼륨 확장 요청의 현재 진행 상황 또는 결과를 나타냅니다.
ExternalExpanding: Kubernetes가external-resizer가 PVC를 확장하기를 기다리고 있음을 나타냅니다.Resizing: 크기 조절 작업이 진행 중임을 나타냅니다. 용량을 크게 늘리는 경우 이 작업은 최대 90분이 걸릴 수 있습니다.VolumeResizeSuccessful: 볼륨이 성공적으로 확장되었음을 확인합니다.VolumeResizeFailed: 오류가 발생했음을 나타냅니다. 이벤트 메시지에는 Google Cloud Managed Lustre API의 세부정보가 포함되어 있습니다. 이 상태는 일시적일 수 있으며 저절로 해결될 수 있습니다.
확장이 완료되면 업데이트된 PVC 구성을 확인합니다.
kubectl get pvc PVC_NAME -o yamlstatus.capacity필드에 증가된 새 크기가 반영되는지 확인합니다.
확장 과정에서 문제가 발생하면 문제 해결을 참고하세요.
유효한 확장 크기 확인
새 볼륨 크기를 확인하려면 먼저 볼륨의 성능 등급과 해당 단계 크기를 확인하세요.
볼륨의 성능 등급 식별
다음 옵션 중 하나를 사용하여 볼륨의 성능 등급을 확인할 수 있습니다.
StorageClass
다음 명령어를 실행하고 perUnitStorageThroughput 값 (예: 1000)을 찾습니다. 이 값은 TiB당 MBps의 성능 등급을 나타냅니다.
kubectl get sc STORAGECLASS_NAME -o yaml
STORAGECLASS_NAME을 StorageClass 이름으로 바꿉니다.
Lustre 인스턴스
기본 Managed Lustre 인스턴스의 속성을 직접 확인하여 볼륨의 성능 티어를 식별합니다.
PVC에 바인딩된 PV의 이름을 찾습니다.
kubectl get pvc PVC_NAMEPVC_NAME을 PVC 이름으로 바꿉니다.출력은 다음과 비슷합니다.
VOLUME열에서 PV 이름을 확인합니다(예:pv-lustre).NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-lustre Bound pv-lustre 9000Gi RWX lustre-rwx <unset> 26mvolumeHandle필드에서 볼륨의 위치와 인스턴스 이름을 찾습니다.kubectl get pv PV_NAME -o yamlPV_NAME을 이전 단계의 PV 이름으로 바꿉니다.volumeHandle값은PROJECT_ID/LOCATION/INSTANCE_NAME형식으로 지정됩니다. 다음 단계를 위해INSTANCE_NAME및LOCATION를 기록해 둡니다.Managed Lustre 인스턴스를 설명하여 성능 등급 속성을 확인합니다.
gcloud lustre instances describe INSTANCE_NAME --location=LOCATIONINSTANCE_NAME및LOCATION을 이전 단계의 값으로 바꿉니다.출력에서
perUnitStorageThroughput필드를 찾습니다. 이 값은 성능 등급(MBps/TiB)을 나타냅니다.
용량 한도 및 단계 크기
성능 등급을 확인한 후 다음 표를 참고하여 연결된 용량 한도와 필요한 단계 크기를 확인하세요.
등급 (perUnitStorageThroughput) |
최소 인원 | 최대 용량 | 보폭 |
|---|---|---|---|
| TiB당 1,000MBps | 9,000GiB | 954,000GiB (~1PiB) | 9,000GiB |
| TiB당 500MBps | 18,000GiB | 1,908,000GiB (~2PiB) | 18,000GiB |
| TiB당 250MBps | 36,000GiB | 3,816,000GiB (~4PiB) | 36,000GiB |
| TiB당 125MBps | 72,000GiB | 7,632,000GiB (~8PiB) | 72,000GiB |
볼륨은 등급에 할당된 단계 크기에 따라 증가해야 합니다. 용량 증가는 해당 특정 단계 크기의 배수여야 합니다. 예를 들어 1,000MBps 티어 볼륨의 용량이 9,000GiB인 경우 18,000GiB, 27,000GiB 등의 배수로 늘릴 수 있습니다.
문제 해결
이 섹션에서는 Lustre 볼륨을 확장할 때 발생할 수 있는 일반적인 문제의 해결 방법을 제공합니다.
'잘못된 인수' 오류로 인해 확장 실패
증상
- PVC가
Resizing상태가 되지만 실패합니다. kubectl describe pvc PVC_NAME명령어를 실행하면VolumeResizeFailed: rpc error: code = InvalidArgument desc = ...과 유사한 오류가 표시됩니다.
원인
이 오류는 일반적으로 다음 이유 중 하나로 인해 요청된 스토리지 크기가 Lustre 볼륨의 성능 등급에 유효하지 않음을 의미합니다.
- 요청된 크기가 등급에 필요한 단계 크기의 배수가 아닙니다.
- 요청한 크기가 등급의 최소 용량보다 작거나 최대 용량보다 큽니다.
해결 방법
- 용량 한도 및 단계 크기를 검토하여 볼륨의 성능 등급에 유효한 단계 크기와 용량 한도를 확인합니다.
- 단계 크기 및 용량 한도를 충족하는 유효한 스토리지 크기를 요청하도록 PVC를 다시 수정합니다.
'내부 오류'로 인해 확장 실패
증상
- PVC 크기 조절이 실패합니다.
kubectl describe pvc PVC_NAME명령어를 실행하면code = Internal가 포함된 오류 메시지와 함께VolumeResizeFailed이벤트가 표시될 수 있습니다.
원인
이 오류는 기본 관리 Lustre 서비스에 문제가 있음을 나타냅니다.
해결 방법
- 요청된 새 크기로 PVC 매니페스트를 다시 적용하여 확장을 다시 시도합니다. 이렇게 하면 일시적인 백엔드 문제가 해결될 수 있습니다.
- 다시 시도해도 실패하면 Cloud Customer Care에 문의하세요.
확장이 '크기 조절' 상태로 멈춤
증상
- PVC가 장기간 (소규모 확장의 경우 30분 이상, 대규모 확장인 경우 90분 이상)
Resizing상태로 유지됩니다. DEADLINE_EXCEEDED오류 메시지가 포함된VolumeResizeFailed이벤트가 표시될 수 있습니다.
원인
이 문제는 용량이 크게 증가할 때 발생할 수 있으며 완료하는 데 최대 90분이 걸릴 수 있습니다. 기본 확장 작업이 아직 진행 중이더라도 Google Cloud Managed Lustre API의 응답을 기다리는 동안 csi-external-resizer 구성요소의 시간이 초과될 수 있습니다.
해결 방법
csi-external-resizer은 지연 기간이 지난 후 작업을 자동으로 재시도합니다.VolumeResizeSuccessful이벤트의 PVC 이벤트를 계속 모니터링합니다.- PVC가 90분 이상
Resizing상태로 유지되면 Cloud Customer Care에 문의하세요.
확장이 시작되지 않거나 ExternalExpanding 상태에서 멈춤
증상
- PVC의
spec.resources.requests.storage필드를 업데이트했지만 PVC 상태가Resizing로 변경되지 않습니다. kubectl describe pvc PVC_NAME명령어를 실행하면 이벤트 로그에ExternalExpanding상태만 표시되고Resizing상태로 진행되지 않습니다.
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ExternalExpanding 21m (x2 over 58m) volume_expand waiting for an external controller to expand this PVC
원인
이 동작은 일반적으로 다음 문제 중 하나를 나타냅니다.
- PVC와 연결된 StorageClass가 볼륨 확장을 허용하지 않습니다.
- 확장을 시작하는 역할을 하는 구성요소인
csi-external-resizer사이드카 컨테이너에 문제가 있습니다.
해결 방법
StorageClass 구성을 확인하고
allowVolumeExpansion: true필드가 설정되어 있는지 확인합니다.kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'allowVolumeExpansion가 누락되었거나false로 설정된 경우 볼륨 확장을 허용하도록 StorageClass를 업데이트합니다.StorageClass가 올바르게 구성된 경우 크기 조절 작업을 관리하는 GKE 컨트롤 플레인 구성요소에 문제가 있을 수 있습니다. Cloud Customer Care에 문의하여 도움을 받으세요.
할당량 또는 용량 문제로 인해 확장 실패
증상
- PVC 크기 조절이 실패하고 PVC에
VolumeResizeFailed이벤트가 표시됩니다. kubectl describe pvc PVC_NAME명령어를 실행하면 관리형 Lustre 백엔드의 이벤트 메시지에 할당량 또는 용량 문제가 표시됩니다.
원인
요청된 유효한 확장이 프로젝트 또는 리전의 관리형 Lustre 서비스에 사용 가능한 전체 용량 또는 할당량을 초과하므로 요청을 처리할 수 없습니다.
해결 방법
- PVC를 다시 수정하고 더 작은 스토리지 증가를 요청합니다.
- 조직의 Google Cloud 관리자에게 문의하여 프로젝트의 전체 Lustre 서비스 할당량 또는 용량 증가를 요청하세요.
삭제
이 문서에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 PVC를 삭제하세요. 이 작업은 reclaimPolicy이 Delete로 설정된 경우 연결된 PV와 기본 Managed Lustre 인스턴스도 삭제합니다.
kubectl delete pvc PVC_NAME
PVC_NAME을 PVC 이름으로 바꿉니다.
다음 단계
- GKE 클러스터용 스토리지에 대해 자세히 알아보세요.
- GKE 영구 볼륨 및 프로비저닝에 관한 문서를 읽어보세요.