볼륨 확장 사용


Google Kubernetes Engine(GKE) 버전 1.24 이상에서는 Kubernetes 볼륨 확장 기능을 사용하여 영구 볼륨의 용량을 만든 후 변경할 수 있습니다.

볼륨 확장에 대한 자세한 내용은 오픈소스 Kubernetes 문서를 참조하세요.

기본 요건

볼륨 확장에는 다음 기본 요건이 있습니다.

  • 크기를 조절하려는 볼륨이 CSI 드라이버에서 관리되는 경우:
    • GKE 클러스터 버전이 1.16 이상인지 확인합니다. 클러스터에 Windows 노드 풀이 있는 경우 GKE 클러스터 버전이 1.18 이상인지 확인합니다. 관리형 GKE Filestore CSI 드라이버를 사용하는 경우 클러스터 버전은 1.21 이상이어야 합니다.
    • 스토리지 공급업체의 문서를 확인하여 CSI 드라이버가 볼륨 확장을 지원하는지 확인합니다. Compute Engine Persistent Disk CSI 드라이버와 Filestore CSI 드라이버는 볼륨 확장을 지원합니다.
  • 크기를 조절하려는 볼륨이 트리 내 볼륨 플러그인에서 관리되는 경우:
    • GKE 클러스터 버전이 1.11 이상인지 확인합니다. GKE 클러스터 버전 1.11~1.14는 트리 내 플러그인에서 관리되는 볼륨 확장을 지원합니다. 하지만 볼륨 확장을 완료하려면 볼륨을 사용하는 모든 포드를 종료한 후 다시 만들어야 합니다.
    • 스토리지 공급업체의 문서를 확인하여 트리 내 볼륨 플러그인이 볼륨 확장을 지원하는지 확인합니다(Compute Engine Persistent Disk의 경우 트리 내 플러그인이 지원함).
  • ReadOnlyMany 액세스 모드를 사용할 때는 볼륨 확장을 사용할 수 없습니다.

볼륨 확장 사용

볼륨 확장을 사용하려면 다음 태스크를 수행합니다.

  1. StorageClass에 아직 allowVolumeExpansion: true 필드가 없으면 이 필드를 StorageClass에 추가합니다. 예를 들면 다음과 같습니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: my.driver
    ...
    allowVolumeExpansion: true
    
  2. PersistentVolumeClaim의 spec.resources.requests.storage 필드를 수정하여 볼륨 용량 변경을 요청합니다.

     kubectl edit pvc pvc-name
    

    예를 들어 다음 PVC를 30GiB 디스크에서 40GiB 디스크로 변경할 수 있습니다.

    수정 전:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 30Gi
    

    수정 후:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 40Gi
    
  3. PVC를 보고 변경사항을 확인합니다. PVC를 보려면 다음 명령어를 실행합니다.

    kubectl get pvc pvc-name -o yaml
    

    status.capacity 필드에 새 볼륨이 표시됩니다. 예를 들면 다음과 같습니다.

    ...
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 40Gi
      storageClassName: standard
      volumeMode: Filesystem
      volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c
    status:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 40Gi
    ...
    

PersistentVolume의 용량이 직접 수정되면 컨테이너 파일 시스템이 잘못될 수 있습니다. 이러한 문제를 해결하려면 볼륨 확장 변경사항 문제 해결을 참조하세요.

StatefulSet에서 볼륨 확장 관리

Kubernetes의 StatefulSet 내에서 포드가 사용하는 볼륨의 크기를 늘려야 하는 경우 포드와 연결된 PersistentVolumeClaims(PVC)의 spec.resources.requests.storage 필드를 조정해야 합니다. StatefulSet 객체에서 volumeClaimTemplates 필드를 직접 수정하려고 하면 오류가 발생합니다.

또한 StatefulSet의 복제본 수를 늘리면 원래 크기의 PVC가 계속 생성됩니다. StatefulSet에서 관리하는 포드에 프로비저닝된 볼륨의 크기를 영구적으로 변경하려면 StatefulSet 객체를 삭제하고 volumeClaimTemplates 필드에 지정된 업데이트된 크기로 다시 만들어야 합니다. StatefulSet에 PVC 자동 삭제가 사용 설정되어 있지 않으면 StatefulSet를 삭제해도 StatefulSet Pod만 삭제되고 해당 PVC는 삭제되지 않습니다. 이러한 PVC에 업데이트된 크기가 반영되려면 PVC를 삭제하고 다시 만들어야 합니다. PVC의 ReclaimPolicy에 따라 기본 스토리지가 삭제될 수도 있습니다.

StatefulSet을 조정하여 새 볼륨 크기로 향후 복제본을 프로비저닝하는 동안 원본 포드를 계속 실행하려면 다음 단계를 수행할 수 있습니다.

  1. 기존 StatefulSet을 파일에 저장합니다.

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. 포드를 독립형 포드로 계속 실행하면서 StatefulSet 객체를 클러스터에서 삭제합니다.

    kubectl delete sts statefulset-name --cascade=orphan
    
  3. 로컬에 저장된 sts-backup.yaml 파일에서 새 볼륨 스토리지 크기(특히 spec.volumeClaimTemplates.spec.resources.requests.storage 값)를 수정합니다.

  4. 클러스터에서 StatefulSet을 다시 만듭니다.

    kubectl apply -f sts-backup.yaml
    

다음 단계