동적 볼륨 프로비저닝
동적 볼륨 프로비저닝 (Dynamic Volume Provisioning)
동적 볼륨 프로비저닝(dynamic volume provisioning)은 저장소 볼륨을 필요할 때(on-demand) 만들 수 있게 해줘요. 동적 프로비저닝이 없으면 클러스터 관리자는 새 저장소 볼륨을 만들기 위해 클라우드 또는 저장소 제공자에게 수동으로 호출하고, 그 후 쿠버네티스에 이를 나타내는 PersistentVolume 객체를 만들어야 해요. 동적 프로비저닝 기능은 클러스터 관리자가 저장소를 미리 프로비저닝할 필요를 없애요. 대신 사용자가 PersistentVolumeClaim 객체를 만들면 자동으로 저장소를 프로비저닝해요.
출처: 문서
본문
배경 (Background)
동적 볼륨 프로비저닝의 구현은 API 그룹 storage.k8s.io의 API 객체 StorageClass에 기반해요. 클러스터 관리자는 필요한 만큼 많은 StorageClass 객체를 정의할 수 있으며, 각각 볼륨을 프로비저닝하는 볼륨 플러그인(일명 provisioner)과 프로비저닝할 때 그 프로비저너에 전달할 parameters 집합을 지정해요. 클러스터 관리자는 (같은 또는 다른 저장소 시스템의) 저장소의 여러 종류를 클러스터 안에서 각각 다른 parameters로 정의하고 노출할 수 있어요. 이 설계는 최종 사용자가 저장소가 어떻게 프로비저닝되는지의 복잡성과 미묘한 차이를 걱정할 필요가 없게 하면서도, 여러 저장소 옵션 중에서 선택할 수 있는 능력을 보장해요.
자세한 내용은 Storage Class 개념을 참고하세요.
동적 프로비저닝 활성화하기
동적 프로비저닝을 활성화하려면 클러스터 관리자가 사용자를 위해 하나 이상의 StorageClass 객체를 미리 만들어야 해요. StorageClass 객체는 동적 프로비저닝이 호출될 때 어떤 프로비저너를 사용할지, 그 프로비저너에 어떤 parameters를 전달할지를 정의해요. StorageClass 객체의 이름은 유효한 DNS 하위 도메인 이름이어야 해요.
다음 매니페스트는 표준 디스크 같은 영구 디스크를 프로비저닝하는 "slow" 저장소 클래스를 만들어요.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
다음 매니페스트는 SSD 같은 영구 디스크를 프로비저닝하는 "fast" 저장소 클래스를 만들어요.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
동적 프로비저닝 사용하기
사용자는 PersistentVolumeClaim에 저장소 클래스를 포함해 동적으로 프로비저닝된 저장소를 요청해요. 쿠버네티스 v1.6 이전에는 volume.beta.kubernetes.io/storage-class 어노테이션을 통해 이 작업을 했어요. 하지만 이 어노테이션은 v1.9부터 폐기됐어요. 이제 사용자는 PersistentVolumeClaim 객체의 storageClassName 필드를 사용해야 하고, 그렇게 하는 것이 좋아요. 이 필드의 값은 관리자가 구성한 StorageClass의 이름과 일치해야 해요('동적 프로비저닝 활성화하기' 참고).
예를 들어 "fast" 저장소 클래스를 선택하려면 사용자는 다음 PersistentVolumeClaim을 만들어요.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim1
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast
resources:
requests:
storage: 30Gi
이 클레임은 SSD 같은 영구 디스크가 자동으로 프로비저닝되게 해요. 클레임이 삭제되면 볼륨도 파괴돼요.
기본값 동작 (Defaulting Behavior)
저장소 클래스가 지정되지 않으면 모든 클레임이 동적으로 프로비저닝되도록 클러스터에서 동적 프로비저닝을 활성화할 수 있어요. 클러스터 관리자는 다음으로 이 동작을 활성화할 수 있어요.
- 하나의 StorageClass 객체를 기본(default)으로 표시하기.
- API 서버에서
DefaultStorageClass어드미션 컨트롤러가 활성화되어 있는지 확인하기.
관리자는 storageclass.kubernetes.io/is-default-class 어노테이션을 추가해 특정 StorageClass를 기본으로 표시할 수 있어요. 클러스터에 기본 StorageClass가 있고 사용자가 storageClassName이 지정되지 않은 PersistentVolumeClaim을 만들면, DefaultStorageClass 어드미션 컨트롤러가 기본 저장소 클래스를 가리키는 storageClassName 필드를 자동으로 추가해요.
클러스터의 둘 이상의 StorageClass에 storageclass.kubernetes.io/is-default-class 어노테이션을 true로 설정하고, storageClassName이 설정되지 않은 PersistentVolumeClaim을 만들면, 쿠버네티스는 가장 최근에 생성된 기본 StorageClass를 사용한다는 점을 주의하세요.
토폴로지 인식 (Topology Awareness)
다중 존(Multi-Zone) 클러스터에서 파드는 리전(Region)의 여러 존에 분산될 수 있어요. 단일 존 저장소 백엔드는 파드가 스케줄링되는 존에 프로비저닝되어야 해요. 이는 볼륨 바인딩 모드(Volume Binding Mode)를 설정해 이룰 수 있어요.