스토리지

이 페이지에서는 VMware용 GKE 스토리지 개념을 설명합니다.

요약

VMware용 GKE는 다음을 통해 외부 블록 또는 파일 스토리지 시스템과 통합됩니다.

  • vSphere 컨테이너 스토리지 인터페이스(CSI) 드라이버
  • 서드 파티 CSI 드라이버
  • Kubernetes 트리 내 볼륨 플러그인

vSphere Datastore

관리자 클러스터를 만들 때 클러스터의 etcd 데이터에 대해 기존 vSphere Datastore를 지정합니다.

사용자 클러스터를 만들 때 관리자 클러스터와 동일한 데이터 스토어를 사용하거나 다른 데이터 스토어를 지정할 수 있습니다. 개별 노드 풀에 데이터 스토어를 지정할 수도 있습니다.

관리자 클러스터와 사용자 클러스터에서 사용하는 vSphere Datastore는 외부 스토리지 배열과 같은 블록 기기의 NFS, vSAN, VMFS에서 지원될 수 있습니다. 다중 호스트 환경에서 각 블록 기기는 환경의 모든 호스트에 연결되어야 하며 Datastore는 추가 호스트에 Datastore 마운트 옵션을 통해 각 호스트에 구성해야 합니다.

StorageClass

PersistentVolumeClaim을 만들 때 스토리지 프로비저닝 방법에 대한 정보를 제공하는 StorageClass를 지정할 수 있습니다. StorageClass를 지정하지 않으면 기본 StorageClass가 사용됩니다.

관리자 클러스터 StorageClass

관리자 클러스터에는 standard라는 StorageClass가 있는데, 이것이 기본 StorageClass로 지정됩니다. standard StorageClass는 프로비저닝 도구로 vSphere 트리 내 볼륨 플러그인을 보여줍니다.

standard StorageClass를 보려면 다음 안내를 따르세요.

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get storageclass \
    standard --output yaml

출력에서 standard가 기본 StorageClass이고 프로비저닝 도구는 vSphere 트리 내 볼륨 플러그인인 kubernetes.io/vsphere-volume이라는 것을 확인할 수 있습니다. vSphere Datastore의 이름도 확인할 수 있습니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  ...
  labels:
    bundle.gke.io/component-name: admin-storage-class
  name: standard
...
parameters:
  datastore: vsanDatastore
provisioner: kubernetes.io/vsphere-volume
...

사용자 클러스터 StorageClass

사용자 클러스터에는 standard라는 StorageClass와 standard-rwo라는 StorageClass가 있습니다.

standard-rwo StorageClass는 기본 StorageClass로 지정되며 vSphere CSI 드라이버를 프로비저닝 도구로 표시합니다.

standard-rwo StorageClass를 보려면 다음 안내를 따르세요.

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get storageclass \
    standard-rwo --output yaml

출력에서 standard-rwo가 기본 StorageClass이고 프로비저닝 도구는 vSphere CSI 드라이버인 csi.vsphere.vmware.com이라는 것을 확인할 수 있습니다. vSphere Datastore의 URL도 확인할 수 있습니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
    ...
  labels:
    bundle.gke.io/component-name: user-vsphere-csi-driver-addon
    ...
  name: standard-rwo
...
parameters:
  datastoreURL: ds:///vmfs/volumes/vsan:52fb6ca22be2454e-e67f620175964a9f/
provisioner: csi.vsphere.vmware.com
...

Kubernetes 트리 내 볼륨 플러그인

Kubernetes는 다양한 트리 내 볼륨 플러그인과 함께 제공됩니다. 하지만 이러한 트리 내 볼륨 플러그인 대부분은 지원 중단되었습니다(vSphere 트리 내 볼륨 플러그인 포함). 자세한 내용은 CSI 마이그레이션 프로젝트를 확인하세요.

vSphere 스토리지 드라이버의 CSI 마이그레이션

이전에는 트리 내 vSphere 볼륨 플러그인이 사용자 클러스터의 기본 StorageClass에 대한 프로비저닝 도구였습니다. 하지만 이제 트리 내 vSphere 볼륨 플러그인은 지원 중단되었으며 vSphere CSI 드라이버가 사용자 클러스터의 기본 StorageClass에 대한 프로비저닝 도구입니다. 트리 내 볼륨 플러그인 대신 vSphere CSI 드라이버를 사용하는 것이 좋습니다.

VMware용 GKE 버전 1.15부터는 트리 내 vSphere 볼륨 플러그인에 대해 Kubernetes CSI 마이그레이션 기능이 자동으로 사용 설정됩니다. 즉, 워크로드가 트리 내 vSphere 볼륨을 사용하는 경우 모든 내부 스토리지 작업 호출이 vSphere CSI 드라이버로 자동으로 리디렉션됩니다.

예를 들어 PersistentVolumeClaim에서 vSphere 트리 내 볼륨 플러그인인 kubernetes.io/vsphere-volume을 프로비저닝 도구로 표시하는 standard StorageClass를 지정한다고 가정해 보겠습니다. 그러면 PersistentVolumeClaim을 사용하는 모든 워크로드의 스토리지 작업 호출이 vSphere CSI 드라이버 csi.vsphere.vmware.com으로 리디렉션됩니다.

프리플라이트 검사

새 클러스터를 만들거나 클러스터를 업그레이드할 때 환경이 CSI 마이그레이션에 적합한지 확인하는 프리플라이트 검사가 있습니다.

예를 들어 프리플라이트 검사는 다음과 같습니다.

  • vCenter 및 ESXi 버전이 적절한지 확인합니다.
  • 트리 내 vSphere PersistentVolume이 있는 경우 vSphere CSI 드라이버가 사용 설정되었는지 확인합니다.
  • vSphere StorageClass에 CSI 마이그레이션 후 무시되는 특정 매개변수가 없는지 확인합니다.
  • CSI 마이그레이션에 필요한 정적으로 생성된 트리 내 PersistentVolume 및 PersistentVolumeClaim에 대한 주석을 확인합니다.
  • 클러스터에서 vSphere CSI 드라이버로 프로비저닝된 CSI 볼륨을 사용하여 워크로드를 성공적으로 실행할 수 있는지 확인합니다.

자세한 내용은 프리플라이트 검사 실행을 참조하세요.

알려진 문제

vSphere CSI 드라이버와 관련된 몇 가지 알려진 문제가 있습니다. 정보 및 해결 방법은 VMware vSphere CSI 드라이버 3.0 출시 노트의 알려진 문제 섹션을 참조하세요.

CSI로 마이그레이션 완료

1.15에서는 기본적으로 Kubernetes CSI 마이그레이션 기능이 사용 설정되어 있으므로 트리 내 vSphere 볼륨 플러그인이 지원하는 PersistentVolume이 CSI 전용 환경에서 계속 작동하며, 트리 내 플러그인 작업 호출을 CSI 플러그인으로 리디렉션합니다. PersistentVolume 사양은 변경할 수 없으므로 사양은 트리 내 볼륨 플러그인과 동일합니다.

따라서 볼륨 확장 및 볼륨 스냅샷 기능과 같은 CSI 전체 기능 집합은 이러한 볼륨에 사용할 수 없습니다. 이러한 기능을 활용하려면 CSI 필드로 Kubernetes 리소스 사양을 다시 만들어 스테이트풀(Stateful) 워크로드를 CSI로 완전히 마이그레이션해야 합니다. Google은 전체 CSI 특성 세트를 사용할 수 있는 애플리케이션 다운타임 없이 스테이트풀(Stateful) 워크로드를 CSI로 마이그레이션할 수 있도록 도와주는 자동화된 도구를 개발했습니다.

서드 파티 드라이버 사용

vSphere Datastore 이외의 스토리지 볼륨을 프로비저닝하려면 다른 스토리지 드라이버를 사용하는 클러스터에 새 StorageClass를 만들 수 있습니다. 그런 다음 StorageClass를 클러스터의 기본값으로 설정하거나 StorageClass를 사용하도록 워크로드를 구성할 수 있습니다(StatefulSet 예시).

스토리지 파트너

Google은 여러 스토리지 공급업체와 파트너십을 맺어 VMware용 GKE로 스토리지 시스템을 검증했습니다. 자격을 갖춘 스토리지 파트너의 전체 목록을 참조하세요.

볼륨 확장

PersistentVolumeClaim에서 용량 요청을 수정하여 프로비저닝된 후 영구 볼륨의 크기를 확장할 수 있습니다. Pod에서 볼륨이 사용되는 동안 온라인 확장을 수행하거나 볼륨이 사용되지 않는 오프라인 확장을 수행할 수 있습니다.

vSphere CSI 드라이버에 대해 오프라인 확장은 vSphere 버전이 7.0 이상인 경우에 제공되고, 온라인 확장은 vSphere 버전이 7.0 업데이트 2 이상인 경우에 제공됩니다.

standard-rwo StorageClass는 vSphere 7.0 이상에서 실행되는 새로 만들어진 클러스터에 대해 기본적으로 allowVolumeExpansion을 true로 설정합니다. 이 StorageClass를 사용하는 볼륨에 대해 온라인 및 오프라인 확장을 모두 사용할 수 있습니다. 업그레이된 클러스터의 경우 클러스터가 1.7에서 1.8로 업그레이될 때 StorageClass가 클러스터 업그레이드에서 수정되지 않기 때문에 standard-rwoallowVolumeExpansion 설정이 설정되지 않은 상태로 유지되어, 결국 볼륨 확장이 허용되지 않습니다.

볼륨 확장에 대한 자세한 내용은 볼륨 확장 사용을 참조하세요.

CSI 볼륨 스냅샷

VolumeSnapshotVolumeSnapshotClass 리소스를 사용하여 영구 스토리지의 스냅샷을 만들 수 있습니다. CSI 볼륨에서 이 기능을 사용하려면 CSI 드라이버가 볼륨 스냅샷을 지원해야 하며 external-snapshotter 사이드카 컨테이너가 CSI 드라이버 배포에 포함되어야 합니다.

볼륨 스냅샷에 대한 자세한 내용은 볼륨 스냅샷 사용을 참조하세요.

CSI 스냅샷 컨트롤러는 클러스터를 만들 때 자동으로 배포됩니다.

볼륨 삭제

사용자 클러스터를 삭제할 때 vSphere CSI 드라이버로 프로비저닝된 볼륨은 삭제되지 않습니다. 클러스터를 삭제하기 전에 모든 볼륨, PersistentVolumeClaim, StatefulSet를 모두 삭제해야 합니다.

문제 해결

스토리지 문제 해결을 참조하세요.

추가 자료