이 페이지에서는 VMware 스토리지를 위한 Google Distributed Cloud(소프트웨어만) 개념을 설명합니다.
요약
Google Distributed Cloud는 다음을 통해 외부 블록 또는 파일 스토리지 시스템과 통합됩니다.
- vSphere 컨테이너 스토리지 인터페이스(CSI) 드라이버
- 서드 파티 CSI 드라이버
- Kubernetes 트리 내 볼륨 플러그인
vSphere Datastore
관리자 클러스터를 만들 때 클러스터의 etcd 데이터에 대해 기존 vSphere datastore를 지정합니다.
사용자 클러스터를 만들 때 관리자 클러스터와 동일한 데이터 스토어를 사용하거나 다른 데이터 스토어를 지정할 수 있습니다. 개별 노드 풀에 데이터 스토어를 지정할 수도 있습니다.
관리자 클러스터와 사용자 클러스터에서 사용하는 vSphere Datastore는 외부 저장소 배열과 같은 블록 기기의 NFS, vSAN, VMFS에서 지원될 수 있습니다. 다중 호스트 환경에서 각 블록 기기는 환경의 모든 호스트에 연결되어야 하며 데이터 스토어는 추가 호스트에 데이터 스토어 마운트 옵션을 통해 각 호스트에 구성해야 합니다.
StorageClasses
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 드라이버를 사용하는 것이 좋습니다.
Google Distributed Cloud 버전 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은 여러 스토리지 공급업체와 파트너십을 맺어 Google Distributed Cloud로 스토리지 시스템을 검증했습니다. 자격을 갖춘 스토리지 파트너의 전체 목록을 참조하세요.
볼륨 확장
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-rwo
의 allowVolumeExpansion
설정이 설정되지 않은 상태로 유지되어, 결국 볼륨 확장이 허용되지 않습니다.
볼륨 확장에 대한 자세한 내용은 볼륨 확장 사용을 참조하세요.
CSI 볼륨 스냅샷
VolumeSnapshot 및 VolumeSnapshotClass 리소스를 사용하여 영구 스토리지의 스냅샷을 만들 수 있습니다. CSI 볼륨에서 이 기능을 사용하려면 CSI 드라이버가 볼륨 스냅샷을 지원해야 하며 external-snapshotter
사이드카 컨테이너가 CSI 드라이버 배포에 포함되어야 합니다.
볼륨 스냅샷에 대한 자세한 내용은 볼륨 스냅샷 사용을 참조하세요.
CSI 스냅샷 컨트롤러는 클러스터를 만들 때 자동으로 배포됩니다.
볼륨 삭제
사용자 클러스터를 삭제할 때 vSphere CSI 드라이버로 프로비저닝된 볼륨은 삭제되지 않습니다. 클러스터를 삭제하기 전에 모든 볼륨, PersistentVolumeClaim, StatefulSet를 모두 삭제해야 합니다.
문제 해결
스토리지 문제 해결을 참조하세요.