System Engineering/Kubernetes

Kubernetes #17. Kubernetes의 dynamic provisioning

ZunoXI 2023. 5. 7.

 

개요

쿠버네티스에서는 기본적으로 pod의 데이터가 휘발성이다. kubelet에 의해 재기동되거나 삭제되었을 때, 해당 pod이 갖고 있던 데이터가 날아가게 된다. 이를 방지 하기 위해서 쿠버네티스는 volume이라는 기능을 제공한다. empty dir, hostpath, pvc/pv 의 volume 할당 방법이 있는데, 보통의 운영환경에서는 사용자, 운영자간의 역할을 명확하게 하기 위해 pvc/pv 환경을 많이 사용하는 것으로 알고있는데,여기에 보다 편하게 pvc/pv 사용이 가능한 방법들에 대해 알아보자.

 

 

 

참고문서

 

김태민님의 쿠버네티스 강의 https://www.inflearn.com/course/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EA%B8%B0%EC%B4%88

 

대세는 쿠버네티스 [초급~중급] - 인프런 | 강의

쿠버네티스는 앞으로 어플리케이션 배포/운영에 주류가 될 기술 입니다. 이 강좌를 통해 여러분도 대세에 쉽게 편승할 수 있게 됩니다., - 강의 소개 | 인프런

www.inflearn.com

https://kubernetes.io/ko/docs/concepts/storage/storage-classes/

 

스토리지 클래스

이 문서는 쿠버네티스의 스토리지클래스의 개념을 설명한다. 볼륨과 퍼시스턴트 볼륨에 익숙해지는 것을 권장한다. 소개 스토리지클래스는 관리자가 제공하는 스토리지의 "classes"를 설명할 수

kubernetes.io

https://kubernetes.io/ko/docs/concepts/storage/dynamic-provisioning/

 

동적 볼륨 프로비저닝

동적 볼륨 프로비저닝을 통해 온-디맨드 방식으로 스토리지 볼륨을 생성할 수 있다. 동적 프로비저닝이 없으면 클러스터 관리자는 클라우드 또는 스토리지 공급자에게 수동으로 요청해서 새 스

kubernetes.io

 

 


 

dynamic provisioning

 

보통 pvc/pv 구조에서는 사용자와 관리자의 영역이 나뉘어져 있기 때문에, 사용자가 인프라 영역까지 관여할 수 없어 운영안정성에는 이점이 있지만, 관리자 입장에서는 이를 관리하는게 상당히 부담스러운 관리포인트가 될 수 있다.

 

5g, 10g 짜리 작은 단위의 요청이나 빈번하게 pvc요청이 들어오면 이를 대비하여 미리 pv를 만들어 두는것이 여간 번거로운 일이 아닐 수 없다. 쿠버네티스는 이를 해소하기 위해 dynamic provisioning 기능을 지원한다.

 

 

storage class

 

앞서 언급한 dynamic provisioning 기술을 사용하기 위해서는 쿠버네티스 네이티브 스토리지 오브젝트인 storage class를 사용해야 한다. storage class를 사용하면 사용자가 pvc를 요청하는 과정은 동일하지만 관리자는 최초에 storage class를 선언하고 해당 stoage class가 사용할 볼륨을 미리 확보해 둔다면, pvc 요청이 발생했을 때 쿠버네티스가 이를 확인하고 자동으로 storage class를 확인하고 pv와 볼륨을 맵핑하여 생성해준다.

 

이때, pvc를 통해 pv는 바로 생성 되지만 실제 볼륨 할당은 pod가 pvc를 사용할 때 생성된다. 또한, defualt로 pv의 reclaim policy가 retain인데, 이 경우는 pvc가 삭제되면 pv의 상태가 realesed 되고 데이터는 보존되지만 재사용은 불가하다. 다만, pvc가 삭제되지않고 pod만 삭제된 경우는 다시 pod를 생성해서 해당 pvc를 사용하면 여전히 기존 할당 되었던 볼륨 데이터를 사용가능하다.

 

또한, PV/PVC옵션 중에 RWO(ReadWriteOnce), ROM(ReadOnlyMany),RWM(ReadWriteMany)의 AccessMode라는 옵션이 있는데 해당 옵션들을 통해 생성된 pvc 볼륨을 몇개의 파드가  한 번에 접근할 수 있는지, 읽고 쓸 수는 있을지를 지정할 수 있다.

 

 

provisioner

 

이 storage class라는 것은 결국 스토리지 솔루션(혹은 플러그인)을 provisioner로 지정해야 활용할 수 있는데, 그 provisioner의 종류는 아래와 같다. (쿠버네티스 공식 사이트에 명시되어 있다.) 아래 명시된 것 외에도 OpenEBS와 같은 오픈소스 provisioner도 존재한다. 

 

 

필자의 경우는 실무에서 openebs on lvm 기술테스트를 진행해봤는데, 확실히 편리하긴 하지만 로컬디스크를 사용한다는것은 데이터 복구정책이나 백업정책에서 상대적으로 리스크가 있는것은 어쩔 수 없는 것 같다. 각자 본인의 환경에서 사용하기 적합할 provisioner를 선택하여 운영하는것이 현명할 것 같다. 

 

반응형

댓글