이 페이지에서는 Google Kubernetes Engine (GKE) Standard 클러스터에 컨테이너 스토리지 인터페이스(CSI) 스토리지 드라이버를 설치하는 방법을 설명합니다. 이 페이지는 Compute Engine 영구 디스크 CSI 드라이버를 자동으로 사용하는 GKE Autopilot 클러스터에 적용되지 않습니다.
Standard 클러스터에서 Compute Engine 영구 디스크 CSI 드라이버를 사용하는 경우 자동으로 드라이버를 배포하여 관리 오버헤드를 줄이는 것이 좋습니다.
개요
CSI는 Kubernetes가 컨테이너화된 워크로드에 임의의 스토리지 시스템을 노출할 수 있게 해주는 개방형 표준 API입니다. Kubernetes 볼륨은 과거에 Kubernetes 바이너리로 컴파일한 공급업체별 스토리지 드라이버에서 관리합니다. 이전에는 Kubernetes에 포함되지 않은 스토리지 드라이버를 사용할 수 없었습니다. CSI 드라이버를 설치하면 Kubernetes에서 기본적으로 지원되지 않는 스토리지 시스템에 대한 지원이 추가됩니다. 또한 CSI를 사용하면 스냅샷 및 크기 조절과 같은 최신 스토리지 기능을 사용할 수 있습니다.
공급업체의 CSI 드라이버 설치
다른 스토리지 공급업체는 자체 CSI 드라이버를 개발하며, 설치 안내를 제공할 책임이 있습니다. 간단한 경우에는 매니페스트를 클러스터에 배포하는 것만으로 설치할 수 있습니다. CSI 문서의 CSI 드라이버 목록을 참조하세요.
드라이버 설치 확인
CSI 드라이버를 설치한 후 클러스터의 GKE 버전에 따라 다음 명령어 중 하나를 실행하여 설치를 확인할 수 있습니다.
1.14 이상
kubectl get csinodes \ -o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
1.13.x
kubectl get nodes \ -o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'
CSI 드라이버 사용
CSI 드라이버를 사용하려면 다음 단계를 따르세요.
드라이버 설치 시 StorageClass가 생성되지 않은 경우
provisioner
필드에서 드라이버를 참조하는 Kubernetes StorageClass를 만듭니다. 일부 CSI 드라이버는 설치 시 StorageClass를 배포합니다.스토리지를 프로비저닝하려면 다음 중 하나를 수행합니다.
- StatefulSet 객체의
volumeClaimTemplates
사양에서 StorageClass를 참조합니다. - 클러스터의 기본 StorageClass로 설정합니다.
- StatefulSet 객체의
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을 사용하여 안정적인 스토리지를 제공합니다.
Kubernetes는 StorageClass에 정의된 프로비저닝 도구를 호출하여 새 스토리지 볼륨을 만듭니다. 이 경우 Kubernetes는 제공업체의 API를 호출하는 가상의 csi.example.com
제공업체를 호출하여 볼륨을 만듭니다. 볼륨이 프로비저닝되면 Kubernetes가 자동으로 PersistentVolume을 생성하여 스토리지를 나타냅니다.
다음은 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: premium-rwo # This field references the existing StorageClass
다음 단계
- GKE 스토리지 개념 자세히 알아보기