워크로드에 커스텀 StorageClass 사용

Azure용 GKE는 Azure Disk CSI 드라이버Azure File CSI 드라이버를 자동으로 배포합니다.

Azure Disk CSI 드라이버 및 Azure File CSI 드라이버 버전은 Azure용 GKE Kubernetes 버전에 연결되어 있습니다. 일반적으로 드라이버 버전은 GKE 버전 출시 시점에 사용 가능한 최신 버전입니다. 클러스터가 업그레이드되면 드라이버가 자동으로 업데이트됩니다.

커스텀 StorageClass 사용

볼륨에 대해 추가 StorageClass를 만들거나 컨테이너 스토리지 인터페이스(CSI) 드라이버를 사용할 수 있습니다.

  1. Azure Disk 볼륨 또는 다른 CSI 드라이버를 사용 중인지 선택합니다.

    Azure Disk 볼륨

    Azure Disk 볼륨 유형, 파일 시스템 유형, 다른 매개변수를 지정하는 고유 커스텀 StorageClass를 만들 수 있습니다. Azure용 GKE Azure Disk CSI 드라이버 GitHub 페이지에서 추가 StorageClass 매개변수를 찾을 수 있습니다.

    커스텀 StorageClass를 구성하려면 다음 YAML 매니페스트를 my-custom-class.yaml 파일에 복사합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    

    CLASS_NAME을 새 StorageClass 이름으로 바꿉니다.

    예를 들어 다음 YAML은 특정 스토리지 계정의 볼륨을 프로비저닝하고 group=dev태그를 각 새 볼륨에 적용하는 새 StorageClass를 생성합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-class
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      storageAccount: my-storage-account
      tags: group=dev
    

    CSI 드라이버

    provisioner 필드에 다른 CSI 드라이버를 지정할 수 있습니다.

    다른 CSI 드라이버를 사용하여 StorageClass를 만들려면 아래 YAML 예시를 사용하면 됩니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: CSI_DRIVER_NAME
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      ...
    

    다음 값을 바꿉니다.

    • CLASS_NAME: StorageClass의 이름입니다(예: my-custom-class).
    • CSI_DRIVER_NAME: CSI 드라이버의 이름입니다(예: csi.example.com).

    그런 다음 CSI 드라이버의 문서에 따라 parameters 아래의 하위 필드를 구성합니다.

  2. YAML을 클러스터에 적용합니다.

    kubectl apply -f my-custom-class.yaml
    
  3. 커스텀 StorageClass로 PersistentVolumeClaim 만듭니다.

    커스텀 StorageClass를 만든 후 PVC에 이를 지정할 수 있습니다. 아래 예시에서는 StorageClass my-custom-class를 참조하는 my-pvc라는 이름의 PVC를 만듭니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 30Gi
      storageclassName: my-custom-class
    

기본 StorageClass 설정

Azure용 GKE는 LRS를 사용하여 표준 SSD Azure 디스크를 프로비저닝하는 standard-rwo라는 기본 StorageClass를 사용합니다. 기본값을 다른 StorageClass로 변경할 수 있습니다.

기본 StorageClass를 변경하려면 다음 안내를 따르세요.

  1. standard-rwo StorageClass의 is-default-class 주석을 kubectl patch로 업데이트합니다.

    kubectl patch storageclass standard-rwo -p \
      '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. storageclass.kubernetes.io/is-default-class: true 주석이 있는 새 StorageClass를 만듭니다.

    다음 StorageClass 예시에서는 disk.csi.azure.com 드라이버를 사용합니다. 다른 스토리지 드라이버를 설치하려면 CSI 드라이버 설치를 참조하세요.

    다음 YAML을 my-custom-class.yaml이라는 파일에 복사합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
      annotations:
        storageclass.kubernetes.io/is-default-class: true
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      skuName: VOLUME_TYPE
    

    다음을 바꿉니다.

    • CLASS_NAME: 새 StorageClass의 이름입니다.
    • VOLUME_TYPE: StorageClass가 만드는 Azure 디스크 볼륨 유형입니다.

    예를 들어 다음 YAML은 프리미엄 SSD Azure 디스크 볼륨을 프로비저닝하는 새 기본 StorageClass를 만듭니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-default-class
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      skuName: Premium_LRS
    
  3. 새 커스텀 클래스를 클러스터에 적용합니다.

    kubectl apply -f my-custom-class.yaml
    

이 매니페스트를 적용한 후 Azure용 GKE는 새 스토리지 요청에 my-custom-default-class StorageClass를 사용합니다.

StatefulSet에서 StorageClass 참조

새 StorageClass를 사용하려면 StatefulSet의 volumeClaimTemplates에서 이를 참조하면 됩니다.

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

다음 StatefulSet는 my-custom-class StorageClass를 참조하고 1기비바이트 볼륨을 프로비저닝합니다.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  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: my-custom-class # This field references the existing StorageClass

다음 단계