GKE에서 Managed Lustre 스토리지 확장

이 문서에서는 애플리케이션을 중단하지 않고 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의 볼륨 확장 사용 설정

  1. StorageClass가 볼륨 확장을 지원하는지 확인합니다.

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    

    STORAGECLASS_NAME을 StorageClass 이름으로 바꿉니다.

    명령어에서 아무것도 출력하지 않거나 false를 반환하는 경우 확장을 허용하도록 StorageClass 구성을 명시적으로 업데이트해야 합니다.

  2. 수정할 StorageClass 구성을 엽니다.

    kubectl edit storageclass STORAGECLASS_NAME
    
  3. 편집기에서 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)을 수정하여 볼륨 크기 증가를 요청합니다.

  1. 유효한 확장 프로그램 크기 결정에 설명된 대로 확장 프로그램의 새 유효한 크기를 확인합니다.
  2. 수정할 PVC 구성을 엽니다.

    kubectl edit pvc PVC_NAME
    

    PVC_NAME을 PVC 이름으로 바꿉니다.

  3. 편집기에서 유효한 확장 크기로 spec.resources.requests.storage 필드를 업데이트합니다. 예를 들어 볼륨을 9000Gi에서 18000Gi로 확장하려면 storage 필드를 다음과 같이 수정합니다.

    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 18000Gi # Changed from 9000Gi
    

볼륨 확장 확인

  1. PVC의 이벤트를 검토하여 확장 진행 상황을 모니터링합니다.

    kubectl describe pvc PVC_NAME
    

    PVC 출력의 다음 이벤트는 볼륨 확장 요청의 현재 진행 상황 또는 결과를 나타냅니다.

    • ExternalExpanding: Kubernetes가 external-resizer가 PVC를 확장하기를 기다리고 있음을 나타냅니다.
    • Resizing: 크기 조절 작업이 진행 중임을 나타냅니다. 용량을 크게 늘리는 경우 이 작업은 최대 90분이 걸릴 수 있습니다.
    • VolumeResizeSuccessful: 볼륨이 성공적으로 확장되었음을 확인합니다.
    • VolumeResizeFailed: 오류가 발생했음을 나타냅니다. 이벤트 메시지에는 Google Cloud Managed Lustre API의 세부정보가 포함되어 있습니다. 이 상태는 일시적일 수 있으며 저절로 해결될 수 있습니다.
  2. 확장이 완료되면 업데이트된 PVC 구성을 확인합니다.

    kubectl get pvc PVC_NAME -o yaml
    
  3. status.capacity 필드에 증가된 새 크기가 반영되는지 확인합니다.

확장 과정에서 문제가 발생하면 문제 해결을 참고하세요.

유효한 확장 크기 확인

새 볼륨 크기를 확인하려면 먼저 볼륨의 성능 등급과 해당 단계 크기를 확인하세요.

볼륨의 성능 등급 식별

다음 옵션 중 하나를 사용하여 볼륨의 성능 등급을 확인할 수 있습니다.

StorageClass

다음 명령어를 실행하고 perUnitStorageThroughput 값 (예: 1000)을 찾습니다. 이 값은 TiB당 MBps의 성능 등급을 나타냅니다.

kubectl get sc STORAGECLASS_NAME -o yaml

STORAGECLASS_NAME을 StorageClass 이름으로 바꿉니다.

Lustre 인스턴스

기본 Managed Lustre 인스턴스의 속성을 직접 확인하여 볼륨의 성능 티어를 식별합니다.

  1. PVC에 바인딩된 PV의 이름을 찾습니다.

    kubectl get pvc PVC_NAME
    

    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>                 26m
    
  2. volumeHandle 필드에서 볼륨의 위치와 인스턴스 이름을 찾습니다.

    kubectl get pv PV_NAME -o yaml
    

    PV_NAME을 이전 단계의 PV 이름으로 바꿉니다.

    volumeHandle 값은 PROJECT_ID/LOCATION/INSTANCE_NAME 형식으로 지정됩니다. 다음 단계를 위해 INSTANCE_NAMELOCATION를 기록해 둡니다.

  3. Managed Lustre 인스턴스를 설명하여 성능 등급 속성을 확인합니다.

    gcloud lustre instances describe INSTANCE_NAME --location=LOCATION
    

    INSTANCE_NAMELOCATION을 이전 단계의 값으로 바꿉니다.

    출력에서 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 볼륨의 성능 등급에 유효하지 않음을 의미합니다.

  • 요청된 크기가 등급에 필요한 단계 크기의 배수가 아닙니다.
  • 요청한 크기가 등급의 최소 용량보다 작거나 최대 용량보다 큽니다.

해결 방법

  1. 용량 한도 및 단계 크기를 검토하여 볼륨의 성능 등급에 유효한 단계 크기와 용량 한도를 확인합니다.
  2. 단계 크기 및 용량 한도를 충족하는 유효한 스토리지 크기를 요청하도록 PVC를 다시 수정합니다.

'내부 오류'로 인해 확장 실패

증상

  • PVC 크기 조절이 실패합니다.
  • kubectl describe pvc PVC_NAME 명령어를 실행하면 code = Internal가 포함된 오류 메시지와 함께 VolumeResizeFailed 이벤트가 표시될 수 있습니다.

원인

이 오류는 기본 관리 Lustre 서비스에 문제가 있음을 나타냅니다.

해결 방법

  1. 요청된 새 크기로 PVC 매니페스트를 다시 적용하여 확장을 다시 시도합니다. 이렇게 하면 일시적인 백엔드 문제가 해결될 수 있습니다.
  2. 다시 시도해도 실패하면 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 사이드카 컨테이너에 문제가 있습니다.

해결 방법

  1. StorageClass 구성을 확인하고 allowVolumeExpansion: true 필드가 설정되어 있는지 확인합니다.

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    
  2. allowVolumeExpansion가 누락되었거나 false로 설정된 경우 볼륨 확장을 허용하도록 StorageClass를 업데이트합니다.

  3. StorageClass가 올바르게 구성된 경우 크기 조절 작업을 관리하는 GKE 컨트롤 플레인 구성요소에 문제가 있을 수 있습니다. Cloud Customer Care에 문의하여 도움을 받으세요.

할당량 또는 용량 문제로 인해 확장 실패

증상

  • PVC 크기 조절이 실패하고 PVC에 VolumeResizeFailed 이벤트가 표시됩니다.
  • kubectl describe pvc PVC_NAME 명령어를 실행하면 관리형 Lustre 백엔드의 이벤트 메시지에 할당량 또는 용량 문제가 표시됩니다.

원인

요청된 유효한 확장이 프로젝트 또는 리전의 관리형 Lustre 서비스에 사용 가능한 전체 용량 또는 할당량을 초과하므로 요청을 처리할 수 없습니다.

해결 방법

  • PVC를 다시 수정하고 더 작은 스토리지 증가를 요청합니다.
  • 조직의 Google Cloud 관리자에게 문의하여 프로젝트의 전체 Lustre 서비스 할당량 또는 용량 증가를 요청하세요.

삭제

이 문서에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 PVC를 삭제하세요. 이 작업은 reclaimPolicyDelete로 설정된 경우 연결된 PV와 기본 Managed Lustre 인스턴스도 삭제합니다.

kubectl delete pvc PVC_NAME

PVC_NAME을 PVC 이름으로 바꿉니다.

다음 단계