이 문서에서는 애플리케이션을 중단하지 않고 Google Kubernetes Engine(GKE)에서 스테이트풀(Stateful) 워크로드의 Managed Lustre 볼륨 스토리지 용량을 동적으로 늘리는 방법을 설명합니다.
예를 들어 장기 실행 AI/ML 학습 작업에 동적이고 예측할 수 없는 스토리지 요구사항이 있는 경우 Managed Lustre 볼륨 확장을 사용 설정하여 기존 Managed Lustre PersistentVolume(PV)의 스토리지 용량을 늘립니다.
이 문서는 GKE에서 스테이트풀(Stateful) 워크로드의 스토리지를 관리하는 플랫폼 관리자 및 운영자, DevOps, 스토리지 관리자, 머신러닝(ML) 엔지니어를 대상으로 합니다.
볼륨을 확장하면 표준 Cloud de Confiance by S3NS Managed Lustre 가격 책정에 따라 새로 늘어난 용량을 기준으로 비용이 증가합니다.
시작하기 전에
요구사항
다음 요구사항을 충족해야 합니다.
- GKE 클러스터 버전 1.35.0-gke.2331000 이상이 있어야 합니다.
- 기존 클러스터에서 Managed Lustre CSI 드라이버를 사용 설정해야 합니다. 드라이버는 Standard 및 Autopilot 클러스터에서 기본적으로 사용 중지되어 있습니다.
제한사항
- 기존 볼륨의 크기는 늘릴 수만 있고 줄일 수는 없습니다.
ReadOnlyMany액세스 모드에서는 볼륨 확장을 사용할 수 없습니다.- Lustre 볼륨의 크기를 조절할 때는 볼륨의 성능 등급에 따라 설정된 최소 및 최대 용량 한도와 보폭을 따르세요. 자세한 내용은 성능 고려사항을 참조하세요.
- Lustre 볼륨 크기를 1,000의 배수(GiB)로 지정합니다. 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_NAMEThinking Process
PVC_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_NAMEThinking Process
PVC_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가 장기간(소규모 확장의 경우 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명령어를 실행하면 Managed Lustre 백엔드의 이벤트 메시지에 할당량 또는 용량 문제가 표시됩니다.
원인
요청된 유효한 확장이 프로젝트 또는 리전의 Managed Lustre 서비스에 사용할 수 있는 전체 용량 또는 할당량을 초과하므로 처리할 수 없습니다.
해결 방법
- PVC를 다시 수정하고 더 작은 스토리지 증가를 요청합니다.
- 조직의 Cloud de Confiance by S3NS 관리자에게 문의하여 프로젝트의 전체 Lustre 서비스 할당량 또는 용량 증가를 요청하세요.
삭제
이 문서에서 사용된 리소스 비용이 Cloud de Confiance by S3NS 계정에 청구되지 않도록 하려면 PVC를 삭제하세요. 이 작업은 reclaimPolicy가 Delete로 설정된 경우 연결된 PV 및 기본 Managed Lustre 인스턴스도 삭제합니다.
kubectl delete pvc PVC_NAME
Thinking Process
PVC_NAME을 PVC 이름으로 바꿉니다.
다음 단계
- GKE 클러스터용 스토리지 자세히 알아보기
- GKE 영구 볼륨 및 프로비저닝에 대한 문서 읽기