Storage를 계속 이어나가 이번 포스팅에서는 StorageClass에 대해 알아보려고 한다.
StorageClass
기존에는 관리자가 PersistentVolume을 개발자(사용자)로 부터 요청을 받을 때마다 생성을 해 주었다. 그런데 k8s에서는 이 작업을 StorageClass를 통해 자동으로 수행 할 수 있다. 즉, 관리자는 PersistentVolume을 여러 개 만드는 대신 Profile(또는 MetaClass)과도 같은 Storage Object을 정의하여 사용자로 하여금 Storage Object를 사용하게 하는 것이다.
그림 1. StorageClass
글로만 이해하기 어려우니 그림 1을 확인해보자. 개발자가 PersistentVolumeClaim을 생성할 때 이전에는 직접적으로 PersistentVolume을 참조했다면 지금은 StorageClass를 참조한다. 관리자가 StoageClass를 생성하기 위해서는 아래의 매니페스트 정의가 필요하다.
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: standard provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Retain mountOptions: - debug volumeBindingMode: Immediate |
전에 PersistentVolumeClaim에 대해 살펴보았듯이 PersistentVolumeClaim 매니페스트 파일에 StorageClass를 정의하지 않으면 Default로 생성되며 그렇지 않으면 위에서 볼 수 있듯이 name: standard 같이 이름이 정의된 StorageClass를 사용한다.
그리고 중요한 부분이 빨간색으로 칠해져 있는 부분이다.
- provisioner
StorageClass의 특징으로 처음에 언급했듯이 PersistentVolume을 자동으로 생성하기 위한 Provider를 지정한다. Provider는 PersistentVolume을 생성할 때 어떤 Volume 타입으로 제공할지 결정하는 역할을 한다. (예시에서 aws-ebs는 AWS 관련 Volume을 만든겠다는 정의이다.)
그림 2. StorageClass
Provider에 사용할 수 있는 종류는 그림 2에서 볼 수 있는 것보다 더 많이 있다.
추가로 Internal의 의미는 k8s에서 내장된 것을 의미한다. 때문에 External의 경우는 외부 라이브러리를 사용해야 한다.
(https://github.com/kubernetes-incubator/external-storage)
- Parameters
Parameters는 Volume의 내부 속성을 정의한다. (물론 아무거나 속성을 정의할 수 없고 Provisioner에 의존적이다.)
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: slow provisioner: kubernetes.io/aws-ebs parameters: type: io1 iopsPerGB: "10" fsType: ext4 |
관련 예를 잠시 살펴보면, type과 iopsPerGB은 AWS EBS에서만 사용하는 것이다. (자세한 것은 AWS EBS Document 참조)
이 외에도 Parameters 내부적으로 여러 속성을 가지고 있지만 항상 Provisioner를 확인해야 한다. (물론 k8s에서 기본으로 지원해 주는 속성도 있다.)
- reclaimPolicy
reclaimPolicy는 PersistentVolumeClaim과 관련된 정책이다. (PersistentVolume을 정의할 때 속성과 같다.)
StorageClass에서는 Delete와 Retain 값을 사용 할 수 있으며 기본 값은 Delete이다.
그럼 간단히 정의한 매니페스트 파일을 실행하면 다음과 같다.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: k8s.io/minikube-hostpath parameters: type: pd-ssd |
그림 3. Created StorageClass
매니페스트 파일을 실행하면 그림 3과 같이 생성된 것을 확인 할 수 있다. 이를 바탕으로 PersistentVolumeClaim을 생성하면 아래와 같다.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mongodb-pvc spec: storageClassName: fast resources: ... |
나머지는 PersistentVolumeClaim 생성 방식과 동일하고 StorageClass의 이름을 넣는 부분이 추가되었다.
그림 4. StorageClass PersistentVolumeClaim
Reference
- https://kubernetes.io/docs/concepts/storage/storage-classes/
- https://github.com/luksa/kubernetes-in-action/
'IT > Kubernetes' 카테고리의 다른 글
[Kubernetes] Networking - Kube Proxy (0) | 2019.04.26 |
---|---|
[Kubernetes] Liveness & Readiness Probe (0) | 2019.04.26 |
[Kubernetes] Storage - PersistentVolume (0) | 2019.04.21 |
[Kubernetes] Storage - Volume (0) | 2019.04.21 |
[Kubernetes] Logging (0) | 2019.04.10 |
댓글