이 문서에서는 애플리케이션을 중단하지 않고 Google Kubernetes Engine (GKE)에서 스테이트풀 워크로드의 Managed Lustre 볼륨의 스토리지 용량을 동적으로 늘리는 방법을 설명합니다.
예를 들어 장기 실행 AI/ML 학습 작업에 동적이고 예측 불가능한 스토리지 요구사항이 있는 경우 Managed Lustre 볼륨 확장을 사용 설정하여 기존 Managed Lustre PersistentVolume (PV)의 스토리지 용량을 늘립니다.
이 문서는 GKE에서 스테이트풀 워크로드의 스토리지를 관리하는 플랫폼 관리자 및 운영자, DevOps, 스토리지 관리자, 머신러닝 (ML) 엔지니어를 대상으로 합니다.
볼륨을 확장하면 표준 Cloud de Confiance by S3NS 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필드를 찾습니다. 이 값은 TiB당 MBps의 성능 등급을 나타냅니다.
용량 한도 및 보폭
성능 등급을 확인한 후 다음 표를 참조하여 연결된 용량 한도와 필요한 보폭을 찾습니다.
등급 (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이벤트가 표시될 수 있습니다.
원인
이 오류는 기본 Managed Lustre 서비스에 문제가 있음을 나타냅니다.
해결 방법
- 새로운 요청된 크기로 PVC 매니페스트를 다시 적용하여 확장을 재시도합니다. 이렇게 하면 일시적인 백엔드 문제가 해결될 수 있습니다.
- 재시도에 실패하면 Cloud Customer Care에 문의하세요.
확장이 '크기 조절' 상태에서 멈춤
증상
- PVC가 장기간(
Resizing상태로 유지됩니다(작은 확장의 경우 30분 이상, 큰 확장의 경우 90분 이상). 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명령어를 실행하면 Managed Lustre 백엔드의 이벤트 메시지에 할당량 또는 용량 문제가 표시됩니다.
원인
요청된 유효한 확장이 프로젝트 또는 리전의 Managed Lustre 서비스에 사용 가능한 전체 용량 또는 할당량을 초과하므로 완료할 수 없습니다.
해결 방법
- PVC를 다시 수정하고 더 작은 스토리지 증가를 요청합니다.
- 조직 관리자에게 문의하여 프로젝트의 전체 Lustre 서비스 할당량 또는 용량을 늘려 달라고 요청합니다. Cloud de Confiance by S3NS
정리
이 문서에서 사용한 리소스에 대한 비용이 계정에 청구되지 않게 하려면 PVC를 삭제하세요. Cloud de Confiance by S3NS reclaimPolicy가 Delete로 설정된 경우 이 작업은 연결된 PV와 기본 Managed Lustre 인스턴스도 삭제합니다.
kubectl delete pvc PVC_NAME
PVC_NAME을 PVC 이름으로 바꿉니다.
다음 단계
- GKE 클러스터용 스토리지에 대해 자세히 알아보세요.
- GKE 영구 볼륨 및 프로비저닝에 관한 문서를 읽어보세요.