컨테이너 스토리지 인터페이스 드라이버 설치

이 페이지에서는 VMware용 GKE 클러스터에 컨테이너 스토리지 인터페이스(CSI) 스토리지 드라이버를 설치하는 방법을 설명합니다.

개요

CSI는 Kubernetes가 컨테이너화된 워크로드에 임의의 스토리지 시스템을 노출할 수 있게 해주는 개방형 표준 API입니다. VMware용 GKE 클러스터에 CSI 호환 스토리지 드라이버를 배포하면 vSphere 스토리지를 거치지 않고도 클러스터를 호환 스토리지 기기에 직접 연결할 수 있습니다.

Kubernetes 볼륨은 공급업체별 스토리지 드라이버에서 관리합니다(과거에는 Kubernetes 바이너리로 컴파일 처리함). 이전에는 Kubernetes에 포함되지 않은 스토리지 드라이버를 사용할 수 없었습니다. CSI 드라이버를 설치하면 Kubernetes에서 기본적으로 지원되지 않는 스토리지 시스템에 대한 지원이 추가됩니다. 또한 CSI를 사용하면 스냅샷 및 크기 조절과 같은 최신 스토리지 기능을 사용할 수 있습니다.

CSI 드라이버를 사용하려면 Kubernetes StorageClass를 만들어야 합니다. CSI 드라이버를 StorageClass의 프로비저닝 도구로 설정합니다. 그런 다음 StorageClass를 클러스터의 기본값으로 설정하거나 StorageClass를 사용하도록 워크로드를 구성할 수 있습니다(StatefulSet 예시).

시작하기 전에

기본적으로 VMware용 GKE는 기본 제공되는 vsphereVolume 드라이버를 통해 vSphere 데이터 스토어를 사용합니다. 또한 기본 제공되는 NFS 및 iSCSI용 드라이버는 기존 볼륨을 워크로드에 연결하고 마운트할 수 있습니다.

공급업체의 CSI 드라이버 설치

스토리지 공급업체는 자체 CSI 드라이버를 개발하며 설치 안내를 제공할 책임이 있습니다. 간단한 경우에는 매니페스트를 클러스터에 배포하는 것만으로 설치할 수 있습니다. CSI 문서의 CSI 드라이버 목록을 참조하세요.

드라이버 설치 확인

CSI 드라이버를 설치한 후 클러스터의 VMware용 GKE 버전에 따라 다음 명령어 중 하나를 실행하여 설치를 확인할 수 있습니다.

1.2.0-gke.5

kubectl get csinodes \
-o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'

1.1.0-gke.6

kubectl get nodes \
-o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'

CSI 드라이버 사용

CSI 드라이버를 사용하려면 다음 단계를 따르세요.

  1. provisioner 필드에서 드라이버를 참조하는 Kubernetes StorageClass를 만듭니다.

  2. 스토리지를 프로비저닝하려면 다음 중 하나를 수행합니다.

CSI 드라이버가 지원하는 StorageClass에 대한 고려사항

StorageClass를 만들 때 다음 사항을 고려하세요.

  • CSI 드라이버 문서에는 프로비저닝 도구 이름을 포함하여 StorageClass에 제공하는 드라이버 관련 매개변수가 포함되어야 합니다.
  • StorageClass의 이름은 특정 드라이버나 어플라이언스의 이름이 아니라 속성의 이름을 따라 지정해야 합니다. StorageClass의 속성을 따라 이름을 지정하면 여러 클러스터 및 환경에서 같은 이름의 StorageClass를 만들 수 있고 애플리케이션이 클러스터 전체에서 동일한 속성을 가진 스토리지를 가져올 수 있습니다.

예시: StatefulSet의 StorageClass 참조

다음 예시에서는 StorageClass에서 CSI 드라이버를 정의하고 StatefulSet 워크로드에서 StorageClass를 참조하는 방법을 모델링합니다. 이 예시에서는 드라이버가 이미 클러스터에 설치되어 있다고 가정합니다.

다음은 가상의 CSI 드라이버 csi.example.com을 프로비저닝 도구로 사용하는 premium-rwo라는 간단한 StorageClass입니다.

fast-sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-rwo
provisioner: csi.example.com # CSI driver
parameters: # You provide vendor-specific parameters to this specification
  type: example-parameter # Be sure to follow the vendor's instructions
  datastore: my-datastore
reclaimPolicy: Retain
allowVolumeExpansion: true

StatefulSet의 volumeClaimTemplates 사양에서 StorageClass를 참조합니다.

StatefulSet의 volumeClaimTemplates 사양에서 StorageClass를 참조하면 Kubernetes는 PersistentVolume(PV)을 사용하여 안정적인 스토리지를 제공합니다. Kubernetes는 StorageClass에 정의된 프로비저닝 도구를 호출하여 새 스토리지 볼륨을 만듭니다. 이 경우 Kubernetes는 제공업체의 API를 호출하는 가상의 csi.example.com 제공업체를 호출하여 볼륨을 만듭니다. 볼륨이 프로비저닝되면 Kubernetes가 자동으로 PV를 생성하여 스토리지를 나타냅니다.

다음은 StorageClass를 참조하는 간단한 StatefulSet입니다.

statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.k8s.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: fast # This field references the existing StorageClass

다음 단계