본문 바로가기
쿠버네티스,쿠버플로우

쿠버네티스(스토리지2)

by 세용용용용 2023. 7. 6.

6.6 동적 볼륨 프로비저닝

정적 볼륨은 관리자가 외부 스토리지와연결된 PV 리소스를 제공하고, 개발자는 PVC 리소스를 생성해 원하는 PV를 연결해서 파드에 볼륨을 제공할 수 있었다.

 

매번 개발자가 볼륨을 요청한다면, 그때마다 적절한 PV를 매번 제공해 줘야 하기에 귀찮은 작업이다. 그래서 관리자는 스토리지 기능 및 분류 정보를 담고 있는 스토리지 클래스 리소스만 정의해 놓고, 개발자가 PVC를 요청하면 스토리지 클래스 리소스에 의해 PV가 자동으로 프로비저닝되어 사용할 수 있도록 동적 프로비저닝 기능을 제공함!!

 

1) 스토리지 클래스

쿠버네티스의 스토리지 클래스 리소스는 스토리지의 클래스(분류, 정책, 종류)에 대한 정보를 정의할 수 있는 리소스다. 쿠버네티스는 자체적으로 클래스에 무엇을 정의해야 하는지에 대한 강제성은 없다.

 

기본적으로 퍼블릭 클라우드는 기본 스토리지를 하나 이상 제공하고 있다.

 

 

storageclass.prvisioner 필드

- 프로비저닝 할 스토리지 PV

storageclass.parameters 필드

- 스토리지 정보, 분류, 정책, 종류 등 정의

- 스토리지에 따라 항목은 다름

 

(2) 스토리지 클래스 리소즈 정의 예제

 

1. aws ebs 스토리지 클래스

apiVersion : storage.k8s.io/v1

kind : StorageClass

metadata :

   name : slow

provisioner : kubernetes.io/aws-ebs

parameters :

   type : io1

   iopsPerGB : "10"

   fsType : ext4

 

2. AzureDisk 스토리지 클래스

apiVersion : storage.k8s.io/v1

kind : StorageClass

metadata :

   name : slow

provisioner : kubernetes.io/azure-disk

parameters :

   skuName : Standard_LRS

   location : eastus

   storageAccount : azure_storage_account_name

 

3. GCP PD 스토리지 클래스

apiVersion : storage.k8s.io/v1

kind : StorageClass

metadata :

   name : slow

provisioner : kubernetes.io/gce-pd

parameters :

  type : pd-standard

  replication-type : none

 

https://github.com/c1t1d0s7/cccr-k8s-2023/tree/main/manifests/06_storage/06_dynamic

위에 사이트 수행

2) 동적 볼륨을 위한 스토리지 클래스 리소스 확인

Ceph 스토리지의 스토리지 클래스를 확인해보자

 

kubectl get storageclasses.storage.k8s.io

 

nfs-client 스토리지 클래스의 상세 정보를 확인해보자

kubectl describe storageclasses.storage.k8s.io nfs-client

 

3) 동적 볼륨을 위한 PVC 리소스 생성

vim myapp-pvc-dynamic.yaml

PV 리소스 프로비저닝에 사용할 스토리지 클래스는 nfs-client이고, 요청한는 크기는 1Gi, 접근 모드는 RWX이다.

 

PVC 리소스를 생성해보자

kubectl create -f myapp-pvc-dynamic.yaml

 

생성된 PVC 리소스를 확인해보자

kubectl get persistentvolumeclaims

PV 프로비저닝에 사용한 스토리지 클래스는 nfs-client이고, 상태는 이미 연결된 상태이다. PVC 리소스는 지정한 스토리지 클래스 리소스에 의해 이미 PV 리소스가 프로비저닝 되었고 연결도 되었다는 것을 예상할 수 있다.

바운드가 되있는 상태

 

PV 리소스를 확인해보자

kubectl get persistentvolume

역시 myapp-pvc-dynamic PVC 리소스에 요청되었다는 것을 알 수 있다.

 

 

4) 동적 볼륨을 사용을 위한 레플리카셋 생성 및 확인

myapp-pvc-dynamic PVC를 볼륨으로 사용하는 레플리카셋 컨트롤러

vim myapp-rs-dynamic.yaml

래플리카셋 컨트롤러 생성

kubectl create -f myapp-rs-dynamic.yaml

 

컨트롤러 상태를 확인

 

파드의 상태 확인

kubectl get pods

이상없이 동작중

 

PVC리소스의 상태 정보를 확인하여 마운트 정보를 확인하자

kubectl describe persistentvolumeclaims myapp-pvc-dynamic

레플리카셋의 파드가 마운트 된것을 확인

 

5) 기본 스토리지 클래스

PVC 리소스 정의시 PV프로비저닝에 사용할 스토리지 클래스 리소스를 직접 정의하라 수도 있지만, 따로 사용할 스토리지 클래스를 지정하지 않더라도, 기본으로 적용될 스토리지 클래스를 구성할 수 있다!!!

 

rook-ceph-block 스토리지 클래스를 기본 스토리지 클래스로 설정해보자

kubectl patch storageclasses.storage.k8s.io nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

위 명령의 의미는 오브젝트의 어노테이션에 "storageclass.kubernetes.io/is-default-class: true" 라는 어노테이션을 구성하는 명령이다.

 

스토리지 클래스 리소스의 상세 정보를 확인해보자

kubectl describe storageclasses.storage.k8s.io nfs-client

어노테이션이 할당된 것을 확인할 수 있다. 마스터의 api서비스는 해당 어노테이션을 참조하여 기본스토리지 클래스로 설정함

 

마지막으로 스토리지 클래스 목록을 확인해보자

kubectl get storageclasses.storage.k8s.io

스토리지 클래스 이름 옆에 (default)라는 표시가 지정되어 있다!!

 

6) 리소스 삭제

kubectl delete -f myapp-rs-dynamic.yaml -f myapp-pvc-dynamic.yaml