[Kubernetes] 퍼시스턴트 볼륨(PV)과 퍼시스턴트 볼륨 클레임(PVC)

연수·2021년 11월 30일
0

kubernetes

목록 보기
11/15

데이터베이스처럼 포드 내부에서 특정 데이터를 보유해야 하는, 상태가 있는(stateful) 애플리케이션의 경우에는 데이터를 어떻게 관리할지 고민해야 한다. 이를 해결하기 위해 포드의 데이터를 영속적으로 저장하기 위한 방법이 필요하다.

쿠버네티스에서는 호스트에 위치한 디렉터리를 각 포드와 공유함으로써 데이터를 보존하는 것이 가능하다. 그러나 여러 개의 서버로 구성된 쿠버네티스와 같은 클러스터 환경에서는 이 방법이 적합하지 않을 수 있다.

따라서 어느 노드에서도 접근해 사용이 가능한 퍼시스턴트 볼륨(Persistent Volume)을 사용한다!

퍼시스턴트 볼륨은 워커 노드들이 네트워크 상에서 스토리지를 마운트해 영속적으로 데이터를 저장할 수 있는 볼륨이다. 따라서 포드에 장애가 생겨 다른 노드로 옮겨가더라도 해당 노드에서 퍼시스턴트 볼륨에 네트워크로 연결해 데이터를 계속 사용할 수 있다.

퍼시스턴트 볼륨의 대표적인 예로는 NFS, AWS의 EBS, Ceph, GlusterFS 등이 있다.

 

🏠 로컬 볼륨: hostPath, emptyDir

  • hostPath
    • 호스트와 볼륨을 공유하기 위해 사용
    • 워커 노드의 로컬 디렉터리를 볼륨으로 사용
    • 모니터링 툴을 쿠버네티스의 모든 워커 노드에 배포해야 한다면 hostPath를 사용하는 것이 좋지만, 이러한 특수한 경우를 제외한다면 hostPath를 사용하는 것은 보안 및 활용성 측면에서 그다지 바람직하지 않다.
  • emptyDir
    • 포드와 컨테이너 간에 볼륨을 공유하기 위해 사용
    • 포드 내의 컨테이너 간 임시 데이터 공유
    • 포드가 실행되는 도중에만 필요한 휘발성 데이터를 각 컨테이너가 함께 사용할 수 있도록 임시 저장 공간을 생성

   🌐 네트워크 볼륨

   온프레미스 환경에서도 구축할 수 있는 NFS, iSCSI, GlusterFS, Ceph와 같은 네트워크 볼륨 뿐 아니라 AWS의 EBS, GCP의 gcePersistentDisk와 같은 클라우드 플랫폼의 볼륨을 포드에 마운트할 수도 있다.

   🌻 NFS

   NFS(Network File System)는 대부분의 운영 체제에서 사용할 수 있는 네트워크 스토리지로, 여러 개의 클라이언트가 동시에 마운트해 사용할 수 있다는 특징이 있다.

   실제 운영 환경에서 NFS 서버를 도입하려면 백업 스토리지를 별도로 구축해 NFS의 데이터 손실에 대비하거나 NFS 서버의 설정 튜닝 및 NFS 서버에 접근하기 위한 DNS 이름을 준비해야 한다. 이러한 설정들은 환경에 맞게 적절히 구성할 필요가 있다.

 

👏 퍼시스턴트 볼륨 클레임 (Persistent Volume Claim: PVC)

볼륨과 애플리케이션의 정의는 서로 밀접하게 연관되어 있어 서로 분리할 수 없는 상황이 될 수 있다.

이러한 불편함을 해결하기 위해 PV와 PVC 오브젝트를 함께 사용한다.

이 두 오브젝트는 포드가 볼륨의 세부적인 사항을 몰라도 볼륨을 사용할 수 있도록 추상화해주는 역할을 담당한다.

→ 사용자는 디플로이먼트의 YAML 파일에 볼륨의 상세한 스펙을 정의하지 않아도 된다!

 

🎨 퍼시스턴트 볼륨의 사용 방법

   🍕 퍼시스턴트 볼륨을 선택하기 위한 조건 명시

  적어도 특정 조건을 만족하는 볼륨만을 사용한다는 것을 퍼시스턴트 볼륨 클레임을 통해 쿠버네티스에 알려주어야 한다.

   애플리케이션에서 사용하기 위한 볼륨의 조건을 만족하는 것이 중요 (실제 볼륨의 종류는 중요 X)

 

🌿 Reclaim Policy

퍼시스턴트 볼륨의 사용이 끝나 퍼시스턴트 볼륨 클레임을 삭제했을 때, 해당 볼륨과 볼륨의 데이터를 어떻게 처리할 것인지 별도로 설정할 수 있다.

이를 Reclaim Policy라고 부르는데, Reclaim Policy는 크게 Retain, Delete, Recycle 방식이 있다.

 

🥽 다이나믹 프로비저닝과 스토리지 클래스

  • 다이나믹 프로비저닝 (Dynamic Provisioning)
    • 퍼시스턴트 볼륨 클레임이 요구하는 조건과 일치하는 퍼시스턴트 볼륨이 존재하지 않는다면 자동으로 퍼시스턴트 볼륨과 외부 스토리지를 함께 프로비저닝하는 기능
    • 퍼시스턴트 볼륨 클레임을 생성하면 외부 스토리지가 자동으로 생성된다.
  • 스토리지 클래스 (Storage Class)
    • 다이나믹 프로비저닝은 스토리지 클래스의 정보를 참고해 외부 스토리지를 생성
    • 조건에 일치하는 퍼시스턴트 볼륨을 새롭게 만들기 위해 스토리지 클래스에 정의된 속성에 따라서 외부 스토리지를 생성

 


[출처] 시작하세요! 도커/쿠버네티스 (용찬호 지음)

profile
DCDI

0개의 댓글