볼륨 속성 클래스
볼륨 속성 클래스 (Volume Attributes Classes)
기능 상태: Kubernetes v1.36 [stable] (기본 활성화)
이 페이지는 쿠버네티스의 StorageClass, 볼륨, PersistentVolume에 대해 이미 익숙하다고 가정해요.
VolumeAttributesClass는 관리자가 제공하는 저장소의 변경 가능한(mutable) "클래스"를 설명하는 방법을 제공합니다. 서로 다른 클래스는 서로 다른 서비스 품질(QoS) 수준에 대응할 수 있어요. 쿠버네티스 자체는 이 클래스들이 무엇을 나타내는지에 대해 특정한 입장을 취하지 않습니다.
이 기능은 1.34 버전부터 GA(generally available)이며, 사용자는 이를 비활성화할 수 있어요.
또한 VolumeAttributesClass는 Container Storage Interface로 뒷받침되는 저장소에서만, 그리고 관련 CSI 드라이버가 ModifyVolume API를 구현한 경우에만 사용할 수 있습니다.
VolumeAttributesClass API
각 VolumeAttributesClass는 driverName과 parameters를 포함하며, 이는 클래스에 속한 PersistentVolume(PV)을 동적으로 프로비저닝하거나 수정해야 할 때 사용됩니다.
VolumeAttributesClass 객체의 이름은 의미가 있어요. 사용자가 특정 클래스를 요청하는 방법이기 때문이죠. 관리자는 VolumeAttributesClass 객체를 처음 만들 때 클래스의 이름과 다른 파라미터를 설정합니다. PersistentVolumeClaim 안의 VolumeAttributesClass 객체 이름은 변경 가능하지만, 기존 클래스의 parameters는 변경 불가능(immutable)해요.
apiVersion: storage.k8s.io/v1
kind: VolumeAttributesClass
metadata:
name: silver
driverName: pd.csi.storage.gke.io
parameters:
provisioned-iops: "3000"
provisioned-throughput: "50"
프로비저너 (Provisioner)
각 VolumeAttributesClass는 PV를 프로비저닝할 때 어떤 볼륨 플러그인을 사용할지 결정하는 프로비저너를 가지고 있어요. driverName 필드는 반드시 지정되어야 합니다.
VolumeAttributesClass에 대한 기능 지원은 kubernetes-csi/external-provisioner에 구현되어 있습니다.
kubernetes-csi/external-provisioner만 지정할 수 있는 것은 아니에요. 쿠버네티스가 정의한 스펙을 따르는 독립 프로그램인 외부 프로비저너를 실행하고 지정할 수도 있습니다. 외부 프로비저너의 작성자는 코드가 어디에 살지, 프로비저너가 어떻게 배포되는지, 어떻게 실행돼야 하는지, 어떤 볼륨 플러그인을 사용하는지 등을 전적으로 재량대로 정할 수 있어요.
프로비저너가 VolumeAttributesClass와 어떻게 동작하는지 이해하려면 CSI external-provisioner 문서를 참조하세요.
리사이저 (Resizer)
각 VolumeAttributesClass는 PV를 수정할 때 어떤 볼륨 플러그인을 사용할지 결정하는 리사이저를 가지고 있어요. driverName 필드는 반드시 지정되어야 합니다.
VolumeAttributesClass에 대한 볼륨 수정 기능 지원은 kubernetes-csi/external-resizer에 구현되어 있습니다.
예를 들어 기존 PersistentVolumeClaim이 silver라는 VolumeAttributesClass를 사용하고 있다고 해볼게요.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pv-claim
spec:
…
volumeAttributesClassName: silver
…
클러스터에 gold라는 새 VolumeAttributesClass가 사용 가능해졌어요.
apiVersion: storage.k8s.io/v1
kind: VolumeAttributesClass
metadata:
name: gold
driverName: pd.csi.storage.gke.io
parameters:
iops: "4000"
throughput: "60"
최종 사용자는 PVC를 새 VolumeAttributesClass gold로 업데이트하고 적용할 수 있어요.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pv-claim
spec:
…
volumeAttributesClassName: gold
…
리사이저가 VolumeAttributesClass와 어떻게 동작하는지 이해하려면 CSI external-resizer 문서를 참조하세요.
파라미터 (Parameters)
VolumeAttributesClass는 그에 속한 볼륨을 설명하는 parameters를 가지고 있어요. 프로비저너나 리사이저에 따라 허용되는 파라미터가 다를 수 있습니다. 예를 들어 parameter iops의 값 4000과 parameter throughput은 GCE PD에 특정한 값이에요. 파라미터가 생략되면 볼륨 프로비저닝 시 기본값이 사용됩니다. 사용자가 파라미터가 생략된 다른 VolumeAttributesClass로 PVC를 적용하면, CSI 드라이버 구현에 따라 파라미터의 기본값이 사용될 수 있어요. 자세한 내용은 관련 CSI 드라이버 문서를 참조하세요.
VolumeAttributesClass에 대해 정의할 수 있는 파라미터는 최대 512개입니다. 키와 값을 포함한 parameters 객체의 총 길이는 256 KiB를 초과할 수 없습니다.