[Kubernetes] Volume 이란?

Dev StoryTeller·2025년 1월 21일

인프라 알아보기

목록 보기
9/12

볼륨(Volume) 이란?

볼륨이란 도커를 이해하고 있다면 익숙한 개념일 것이다
쿠버네티스 역시 도커와 마찬가지로 무상태성을 추구하기에 상태를 기록하기 위해 볼륨을 관리하는데, 도커와는 달리 리소스의 종류(파드, 노드, 클러스터 등)가 많기에 그 범위가 조금 넓다
때문에 쿠버네티스의 볼륨은 범위가 어느정도인지에 따라 나눌 수 있다


볼륨을 파드에 연결

빈 디렉토리(emptyDir)

임시 디렉토리(마치 temp 폴더)이며, 주로 캐시 저장용으로 적합하다
파드의 디렉토리에 연결되어 있어 컨테이너가 재시작되어도 그대로이나, 파드가 재시작되면 사라지게 됨


볼륨을 노드에 연결

만약 현재 단일 노드 환경 등 로컬 환경일 경우 유일하게 이용할 수 있는 볼륨이다
하나의 노드에 연결하여 볼륨을 생성하는 방법으로, 어떤 방식으로 노드와 파드를 연결할지에 따라 나뉜다


호스트경로 볼륨(로컬 볼륨 권장)

호스트 노드(현재 자신이 속해있는 노드)의 경로와 연결하는 방식
파드에서 정의되며 컨테이너 파일 시스템에 마운트되는 형태로 쓰인다
노드의 데이터와 연결되기에 파드가 재생성 되더라도 사라지지 않는다는 장점이 있다


단점

  • 데이터 연속성 보장 X
    물론 파드의 재생성에도 사라지진 않으나, 만약 파드가 다른 노드에서 생성된다면 기존 호스트 볼륨의 데이터는 사용할 수 없다
    즉 모든 노드가 호스트 노드이기 때문에 데이터의 공유가 이뤄지지 않는다

  • 보안의 위험
    노드의 루트 경로로 볼륨을 생성하면 컨테이너에서 노드의 파일시스템을 마음대로 다룰 수 있기 때문에 보안적으로 위험하다
    따라서 필요로 하는 경로 혹은 파일만 마운트 하도록 하며, readonly 부여하여 수정이 불가능하도록 한다


로컬 볼륨

호스트경로 볼륨과 달리 Node Affinity를 통해 특정 노드에 할당하는 방식
즉, 특정 노드에 고정할 수 있는 hostPath 볼륨과 동일하다고 보면된다. 그러다보니 특징도 그대로 가지고 있다
다만 그냥 사용할 수는 없고 정적 영구 볼륨으로만 사용 가능하다(동적 X)


단점

  • 연속성 O, 독립성 X
    노드 고정으로 인해 데이터 연속성 문제는 해결되었지만, 여전히 특정 노드에 구애를 받기에 독립적이진 않다
    (해당 노드가 비정상이라면 로컬 볼륨도 사용이 불가능하기 때문)

  • 보안의 위험
    노드의 데이터를 가져다 쓰기에 여전히 가지고 있는 문제이다


영구 볼륨(Persistent Volume, PV)

영구볼륨은 정적 혹은 동적으로 프로비저닝한 클러스터의 스토리지 리소스이며, 특정 스토리지 시스템 유형에 대한 볼륨을 정의한다
프로비저닝이란 무언가를 제공한다는 뜻으로, 해석하자면 다양한 유형의 물리적 스토리지를 클러스터 내에서 사용할 수 있도록 별도의 리소스로 제공하는 것 이라고 할 수 있다

이러한 특성 덕분에 앞서 살펴본 볼륨과는 달리, 지원하는 어떠한 스토리지도 사용 가능하고 내부 리소스(파드, 노드 등)에 얽혀있지 않기 때문에, 클러스터 내 어떤 노드라도 접근 가능한 것이 특징이다

영구 클레임(Persistent VolumeClaim, PVC)

앞선 PV는 클러스터 내의 모든 노드가 사용 가능한 스토리지 리소스이다
해당 리소스는 실제 물리적 스토리지를 클러스터에서 사용 가능하도록 만든 추상화 오브젝트에 불과하다
때문에 이러한 저장공간을 사용하려면 마치 디스크 할당을 하듯 “우리는 이만큼만 가져다 사용할거야!” 라는 할당 요청이 필요한데 이것이 바로 PVC 이다


profile
개발을 이야기하는 개발자입니다

0개의 댓글