System Engineering/Kubernetes

Kubernetes #6. Kubernetes의 Volume(쿠버네티스 볼륨)

ZunoXI 2020. 7. 20.



개요

쿠버네티스의 Volume에 대한이해

Volume on k8s

컨테이너를 활용하는 쿠버네티스 환경에서 일반적으로 사용하는 도커이미지는 읽기 전용이기때문에 컨테이너내에 만들어지는 파일은 임시적이며, 컨테이너환경에서 실행되는 파일들은 언제든지 높은가능성으로 문제가 발생할 수 있다. 우리는 Volume기능을 통해 이러한 현상을 예방할 수 있다.

 

 

 

 


 

 


Why Volume(볼륨)?

 

볼륨기능을 사용하지 않고 컨테이너를 운영하게되면 다음과같은 문제가 발생할 가능성이 높다.

  • 첫째, 컨테이너에 문제가생겨 kubelet에의한 재기동이되면 컨테이너는 최초의 상태로 재생성되며 기존에 갖고 있던 파일들이 유실된다.
  • 둘째, 파드에서 컨테이너를 함께 실행할 때 컨테이너사이에 파일을 공유해야 하는 경우에 대응할 수 없다.

 

통상적으로 도커에서 제공하는 볼륨 기능은 컨테이너당 하나의 볼륨 드라이버가 허용되고 매개 변수를 볼륨에 전달할 방법이 없는등, 다소 느슨한 역할을 한다. (최근까지만해도 로컬에 백업이 가능한정도의 기능만 제공했다.)

 

 

반면, 쿠버네티스의 볼륨 은 상당히 중요한 역할을 한다. 파드는 여러 볼륨을 동시에 사용할 수 있고, 컨테이너를 다시 시작해도 데이터가 보존된다. 컨테이너내의 프로세스는 도커이미지와 볼륨으로 구성된 파일시스템 뷰를 보며, 모든 볼륨은 이미지 내에 지정된 경로에 마운트된다.

 


 

Volume의 대표적인 적용방식에 대해 기술한다.

 

1. emptyDir

 

emptyDir은 컨테이너들끼리 데이터를 공유하기 위해 볼륨을 사용하는것이다. 따라서, 처음에는 볼륨이 비어있기때문에 emptyDir이라고 명명한다. 볼륨은 파드안에 생성이 되고 pod생성시 만들어지며 pod 삭제시에 없어진다는 특징이있다.

 

일시적 사용목적이있는 데이터보관할때 사용한다.

 

허접한 그림솜씨..

 

2. hostPath

 

hostPath는 노드안에 볼륨을 만들고 각 파드들이 path로 마운트를 해서 사용하기 때문에 파드가 사라져도 데이터가 날아가지 않는다는 특징이있다. 단, 특정 파드가 죽어서 재생성될때 해당 노드에서 재생성된다는 보장이 없기 때문에 자신이 원래 매칭되어있던 노드의 볼륨을 참고하지 못하는 경우가 발생한다.

 

 

이를 해결하기 위해 노드를 새로 만들때마다 기존 노드의 볼륨에 마운트를 해주는 방법이 있다. (해당방법은 관리자 직접해줘야하는 기능이다.)

 

 

이는 실수가 발생할 여지를 주기때문에 바람직한 방법은 아니다.

 

각각의 노드에는 기본적으로 각 노드 자신을 위해 시스템 파일들이 있는데 파드 자신이 할당되어있는 호스트의 데이터를 읽거나 쓸때는 이 hostPath를 사용하면 된다.

 

여기서 volume path를 생성할 때는 노드에 path로 잡을경로가 미리 만들어져 있어야한다.

 

 

3. PVC/PV

 

  • PVC(Persistent Volume Claim, 이하 PVC)
  • PV(Pesistent Volume, 이하 PV)

 

PVC/PV로 볼륨을 운영하는 방법은 User(사용자)와 Admin(관리자)의 역할을 구분해서 운영하기 위한 방법이다.

 

 

User가 파드를 생성하고 필요한 볼륨크기에대한 PV생성을 Admin에게 요청하면(PVC행위)를 하면 Admin이 PV를 할당해주는 개념이다.

 

이 방식을 사용하면 user와 admin의 역할구분이되는것 뿐만아니라 위에서 언급했듯이 파드가 재생성될때 기존에 사용하던 노드가 아닌 다른 노드에 생성될 경우도 있는데, 이때 PV설정이 되어있다면 자동으로 기존 데이터가 있던 볼륨이 컨테이너가 구동되는 노드로 옮겨 붙는 방식 으로 사용된다.

 

그 PV를 생성하는 위치는 Local Disk일수도있고 AWS, GCP등의 클라우들 플랫폼을 이용하는 가상공간일 수 도있다.

 

 

 

PV의 라이프사이클

 

PV는 보통 프로비저닝, 바인딩, 사용, 반환 의 주기를 갖는다.

 

프로비저닝(Provisioning) : PV를 할당하기이전에 기본적으로 PV가 먼저 만들어져야한다. 이런 PV를 먼저 만드는 과정을 프로비저닝이라고 한다. 정적, 동적 방법이 있다.

 

  • 정적 프로비저닝 : 사전에 관리자가 PV용으로 정해둔 용량만 사용이 가능하다. 예를들면, 스토리지의 용량이 100기가인경우에 PV로 설정된 볼륨이 10기가라면 PVC가 15기가로 요청되었을때 PV할당이 제한된다.
  • 동적 프로비저닝 : 관리자가 별도 지정을 하지 않아도 스토리지 클래스(Storage Classes)를통해 일반 사용자가 원하는 용량만큼 PVC를 요청하여 사용가능하다.

 

바인딩(Binding) : 바인딩은 요청한 PVC와 PV를 매칭시키는 단계이다. PVC로 요청한 용량을 감당할 수 있는 PV가 없는경우 매칭이 되지않고 대기상태를 유지하게된다.

 

대기상태를 유지 하다가 요청자원과 매칭되는 PV가 새로 만들어지는 경우, 혹은 기존 PV를 반납하는 파드가 발생할때 반납된 PV가 PVC의 요청자원과 일치하는 경우 매칭이되어 바인딩이 이루어지게된다.

 

✓ PVC와 PV는 1대1로 매칭되어 사용된다.

 

사용(Using) : PVC가 PV와 매칭되어 사용중인 상태를 Using이라고 표현하며 파드가 살아있다면 PVC는 삭제할 수 없는 특징을 갖고있다.

 

반환(Reclaiming): 특정 파드에서 사용중인 PVC가 사용을 마치고 자원을 반납하게 되면 PVC는 삭제되고 기존에 할당되었던 PV는 초기화 과정을 거치게된다. 이를 리클레이밍이라고 부르며 Retain, Delete, Recycle로 나눠서 다룬다.

반환정책은 공식문서의 링크를 참고하면 좋을것 같다.

 

퍼시스턴트 볼륨

이 페이지는 쿠버네티스의 퍼시스턴트 볼륨 의 현재 상태를 설명한다. 볼륨에 대해 익숙해지는 것을 추천한다. 소개 스토리지 관리는 컴퓨트 인스턴스 관리와는 별개의 문제다. 퍼시스턴트볼륨

kubernetes.io

 

 


 

참고

 

쿠버네티스 볼륨(kubernetes volume : PersistentVolume, PersistentVolumeClaim)

컨테이너는 기본적으로 상태가 없는(stateless) 앱을 사용합니다. 상태가 없다는건 어떤 이유로건 컨테이너가 죽었을때 현재까지의 데이터가 사라진다는 것입니다. 상태가 없기 때문에 컨테이너

arisu1000.tistory.com




 


해당포스팅은 다음 포스팅으로 부터 이전되었습니다 :)

https://zunoxi.github.io/devops/2020/10/07/devops-k8s-volumn/

 

Kubernetes 6. Kubernetes의 Volume

개요 쿠버네티스의 Volume에 대한이해 목차 EmpryDir Hostpath PVC/PV Volume on k8s 컨테이너를 활용하는 쿠버네티스 환경에서 일반적으로 사용하는 도커이미지는 읽기 전용이기때문에 컨테이너내에 만들

zunoxi.github.io

 

반응형

댓글