kubernetes volume_2

|

쿠버네티스 volume_2

퍼시스턴트 스토리지 사용

볼륨 사용 시 파드의 라이프 사이클과 별개로 데이터를 영구적으로 저장할 수 있는 방법은 퍼시스턴트 스토리지를 사용하는 것이다. 이를 사용하는 순서는 아래와 같으며 파드를 삭제하더라도 데이터는 디스크에 남게된다.

  • 쿠버네티스 클러스터가 있는 동일한 영역에 퍼시스턴트 디스크를 생성한다.
  • 파드 메니페스트의 볼륨 정의에 퍼시스턴트 디스크를 지정하고 이를 마운트한다.

디스크가 삭제되지 않는 한 데이터는 영구적으로 저장되지만 파드의 볼륨이 실제 기반 인프라를 참조하는 것은 쿠버네티스가 추구하는 바가 아니다. 이유는 파드 정의가 특정 클러스터에 밀접하게 연결되면 동일한 파드 정의를 다른 클러스터에서는 사용할 수 없기 때문이다.

PersistentVolume(PV)와 PersistentVolumeClaim(PVC)

기반 스토리지 기술과 파드를 분리하면 개발자는 애플리케이션에 필요한 퍼시트턴트 스토리지를 요청할 수 있고 기반 스토리지 기술에 대해서는 신경을 쓸 필요가 없다. 이를 위한 쿠버네티스 리소스가 PersistentVolume(이하 PV)와 PersistentVolumeClaim(이하 PVC)이다. 개발자는 파드에 스토리지 세부사항을 기재한 볼륨을 추가하는 대신 PVC를 통해 클러스터 관리자가 만든 기반 스토리지를 참조하는 PV를 바인딩하여 이용하면 된다.

퍼시스턴트볼륨 프로비저닝 순서

  • 퍼시스턴트 스토리지 유형을 설정하고 생성한다. (ops)
  • PV 디스크립터를 설정해 PV를 생성한다. (ops)
  • PVC를 생성한다. 이때 PVC에 정의된 필요한 볼륨을 찾아 자동으로 클레임에 바인딩한다. 여기는 어떤 볼륨(용량, 읽기쓰기모드 등)이 필요한지 작성되어 있다. (dev)
  • PVC를 참조하는 볼륨을 가진 파드를 정의하여 스토리지를 사용한다. (dev)

비록 PV, PVC를 생성하는 추가 절차가 필요하지만 개발자는 기저에 사용된 실제 스토리지 기술을 알 필요가 없다. 또한 동일한 파드와 PVC 매니페스트는 인프라스트럭처와 관련된 어떤 것도 참조하지 않으므로 다른 쿠버네티스 클러스터에서도 사용할 수 있다. 즉, PVC 매니페스트에 필요한 스토리지를 추상화하여 정의한 후 사용할 수 있는 것이다.

AWS EBS를 프로비저닝한 후 PV, PVC를 사용한 예제

PV의 동적프로비저닝

PVC가 PV를 바인딩하기 위해선 클러스터 관리자가 미리 스토리지를 프로비저닝 해줘야한다. 그렇다면 PVC가 PV를 바인딩할 때 마다 스토리지를 프로비저닝하고 PV를 생성해야하거나 또는 미리 스토리지를 여러개 프로비저닝 해둬야하는데 이는 비효율적이다. 이를 해결하기위해 쿠버네티스는 PV 프로비저너를 배포하고 개발자 선택 가능한 PV의 타입을 하나 이상의 StorageClass 오브젝트로 정의할 수 있다. PVC에서 StorageClass를 참조하면 프로비저너가 퍼시스턴트 스토리지를 생성하고 PV를 생성해 PVC에 바인딩한다. 쿠버네티스는 대부분의 클라우드 공급자의 프로비저너를 포함하므로 항상 프로비저너를 배포하지 않아도 된다. 단, 온프렘 환경에 배포된 쿠버네티스는 사용자 정의 프로비저너가 배포돼야 한다.

퍼시스턴트볼륨 동적프로비저닝 순서

  • 퍼시스턴트볼륨 프로비저너를 설정한다. (ops)
  • 하나 이상의 StorageClass를 생성한다. 이중 하나는 디폴트인데 이미 있을 수 있다. (ops)
  • StorageClass 중 하나를 참조하는 PVC를 생성한다. 만약 참조안하면 default StorageClass를 참조한다. 참조 안한다는 말은 빈 문자열(““)이라는 뜻이 아니다. 빈 문자열의 경우 PVC가 동적프로비저닝된 PV를 바인딩하지 않고 미리 프로비저닝된 PV를 바인딩한다. (dev)
  • 프로비저너는 실제 퍼시스턴트 스토리지를 프로비저닝하고 PV를 생성한 후 PVC에 바인딩한다.
  • PVC를 참조하는 볼륨과 파드를 생성한다. (dev)

AWS EKS의 경우 StorageClass 리소스를 생성하고 PVC에서 해당 StorageClass를 참조하게되면 자동으로 퍼시스턴트 스토리지와 PV가 생성된다.

AWS EBS볼륨(gp2 type)을 사용하여 PV를 동적프로비저닝하는 예제
AWS EBS 볼륨 유형