볼륨 속성 클래스

볼륨 속성 클래스 (Volume Attributes Classes)

이 기능은 쿠버네티스에서 안정(stable) 기능이에요. v1.36부터 그랬으며, 처음에는 v1.29 릴리스에서 제공됐어요. 이 기능이나 동작을 더 이상 비활성화하거나 선택 해제할 수 없어요(잠겨 있음). 관련 기능 게이트인 VolumeAttributesClass에 값을 명시적으로 설정하면 쿠버네티스는 이를 무시하지만 오류를 보고하지는 않아요.

이 페이지는 쿠버네티스의 StorageClass, 볼륨(volumes), PersistentVolume에 익숙하다고 가정해요.

VolumeAttributesClass는 관리자가 제공하는 저장소의 '변경 가능한(mutable)' 클래스를 설명할 수 있는 방법을 제공해요. 서로 다른 클래스는 서로 다른 서비스 품질(QoS) 수준에 매핑될 수 있어요. 쿠버네티스 자체는 이 클래스들이 무엇을 나타내는지에 대해 특정 의견을 갖고 있지 않아요(un-opinionated).

이 기능은 1.34 버전에서 GA(일반 사용 가능)가 되었으며, 사용자는 비활성화할 수 있어요.

VolumeAttributesClass는 Container Storage Interface(CSI)로 뒷받침되는 저장소에서만, 그리고 관련 CSI 드라이버가 ModifyVolume API를 구현하는 경우에만 사용할 수 있어요.

출처: 문서

본문

VolumeAttributesClass API

각 VolumeAttributesClass는 driverNameparameters를 포함하며, 이들은 그 클래스에 속한 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만 지정해야 하는 것은 아니에요. 쿠버네티스가 정의한 사양을 따르는 독립 프로그램인 외부 프로비저너(external provisioners)를 실행하고 지정할 수도 있어요. 외부 프로비저너의 작성자는 코드가 어디에 살지, 어떻게 배포될지, 어떻게 실행돼야 하는지, 어떤 볼륨 플러그인을 사용할지 등을 완전히 재량으로 결정할 수 있어요.

프로비저너가 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가 있어요. 프로비저너 또는 리사이저에 따라 허용되는 파라미터가 다를 수 있어요. 예를 들어 iops 파라미터의 값 4000throughput 파라미터는 GCE PD에 특화된 것이에요. 파라미터가 생략되면 볼륨 프로비저닝 시 기본값이 사용돼요. 파라미터가 생략된 채 다른 VolumeAttributesClass로 PVC를 적용하면, CSI 드라이버 구현에 따라 파라미터의 기본값이 사용될 수 있어요. 자세한 내용은 관련 CSI 드라이버 문서를 참고하세요.

VolumeAttributesClass에 정의할 수 있는 파라미터는 최대 512개예요. 키와 값을 포함한 parameters 객체의 총 길이는 256 KiB를 초과할 수 없어요.

더 알아보기 (Learn more)