스토리지 클래스

스토리지 클래스 (storage-classes)

출처: 쿠버네티스 공식 문서 — Storage Classes

이 문서는 쿠버네티스의 StorageClass 개념을 설명해요. 볼륨영구 볼륨에 대한 지식이 권장돼요.

StorageClass는 관리자가 제공하는 스토리지의 클래스(class)를 설명하는 방법을 제공해요. 서로 다른 클래스는 QoS 수준이나 백업 정책, 또는 클러스터 관리자가 결정한 임의의 정책에 대응할 수 있어요. 쿠버네티스 자체는 클래스가 무엇을 나타내는지에 대해 특별히 의견을 가지지 않아요.

쿠버네티스의 스토리지 클래스 개념은 일부 다른 스토리지 시스템 설계의 "프로파일(profiles)"과 비슷해요.

StorageClass 오브젝트 (StorageClass objects)

각 StorageClass는 provisioner, parameters, reclaimPolicy 필드를 포함해요. 이 필드들은 클래스에 속한 PersistentVolume이 PersistentVolumeClaim(PVC)을 충족하도록 동적으로 프로비저닝될 필요가 있을 때 사용돼요.

StorageClass 오브젝트의 이름은 중요해요. 사용자가 특정 클래스를 요청하는 방법이기 때문이죠. 관리자는 StorageClass 오브젝트를 처음 만들 때 클래스의 이름과 다른 매개변수를 설정해요.

관리자로서 특정 클래스를 요청하지 않는 모든 PVC에 적용되는 기본 StorageClass를 지정할 수 있어요. 자세한 내용은 PersistentVolumeClaim 개념을 참고하세요.

StorageClass의 예시는 다음과 같아요:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: low-latency
  annotations:
    storageclass.kubernetes.io/is-default-class: "false"
provisioner: csi-driver.example-vendor.example
reclaimPolicy: Retain # default value is Delete
allowVolumeExpansion: true
mountOptions:
  - discard # this might enable UNMAP / TRIM at the block storage layer
volumeBindingMode: WaitForFirstConsumer
parameters:
  guaranteedReadWriteLatency: "true" # provider-specific

기본 StorageClass (Default StorageClass)

StorageClass를 클러스터의 기본값으로 표시할 수 있어요. 기본 StorageClass를 설정하는 방법은 Change the default StorageClass를 참고하세요.

PVC가 storageClassName을 지정하지 않으면 기본 StorageClass가 사용돼요.

클러스터에서 둘 이상의 StorageClass에 storageclass.kubernetes.io/is-default-class 주석을 true로 설정하고, 그런 다음 storageClassName을 설정하지 않은 PersistentVolumeClaim을 만들면, 쿠버네티스는 가장 최근에 생성된 기본 StorageClass를 사용해요.

참고 (Note)

클러스터에는 기본값으로 표시된 StorageClass가 하나만 있어야 해요. 쿠버네티스가 여러 기본 StorageClass를 허용하는 이유는 원활한 마이그레이션(seamless migration)을 허용하기 위해서예요.

storageClassName을 지정하지 않은 PersistentVolumeClaim을 만들 수도 있고, 클러스터에 기본 StorageClass가 없어도 그렇게 할 수 있어요. 이 경우 새 PVC는 정의된 대로 생성되고, 기본값이 생길 때까지 해당 PVC의 storageClassName은 설정되지 않은 채 남아 있어요.

기본 StorageClass가 없는 클러스터도 가질 수 있어요. 어떤 StorageClass도 기본값으로 표시하지 않으면(그리고 클라우드 제공자 등이 기본값을 설정해 주지 않았다면), 쿠버네티스는 기본 StorageClass가 없다고 간주해요. 이 경우 storageClassName을 지정하지 않은 PVC는 스토리지 클래스를 얻지 못하고, 기본값이 생길 때까지 그 상태로 남아 있어요.