DevOps/Kubernetes

[K8S] k8s 정리 - (9) Kubernetes Volume (PV, PVC, emptyDir, hostPath)

yubi5050 2022. 9. 9. 06:15

이전 글에서는 Kubernetes Pod의 컨테이너 구성과 리소스 할당, 환경 변수 설정에 대해 알아보았다.

https://yubi5050.tistory.com/180

 

[K8S] k8s 정리 - (8) Kubernetes Pod (Container 구성, 리소스, 환경변수)

이전 글에서는 Kubernetes Pod의 Lifecycle과 Probe와 Handler의 역할에 대해 알아보았다. https://yubi5050.tistory.com/179 [K8S] k8s 정리 - (7) Kubernetes Pod (Lifecycle, Probe, Handler) 이전 글에서는..

yubi5050.tistory.com

이번 글에서는 Kubernetes의 Volume의 emptyDir, hostPath 개념과, PV/PVC 추상화 개념이 대해서 알아보려고 합니다.

 

Volume 목적, 종류

Pod나 Container에 문제가 생기더라도, 데이터 유실을 방지 목적

📌 Volume의 종류

  • 내부 호스트의 디스크를 볼륨으로 사용 : emptyDir, hostPath, local
  • 클라우드 서비스 제공 볼륨 서비스 : EBS(awsElastcBlockstore) / azureDisk / azureFile
  • 오픈소스 스토리지 서비스 : glusterfs, cephfs
  • 쿠버네티스 내부 오브젝트 : configmap, secret

 

📌 추상화 Volume

  • PV : 데이터 저장소를 추상화한 리소스 (시스템 관리자가 생성한 물리적 디스크를 쿠버네티스 클러스터에 표현)
  • PVC : Pod의 볼륨과 정의된 PV를 연결하는 관계

 

Volume - emptyDir

Pod 생성시 같이 생성되고, 삭제시 같이 삭제되는 임시 Volume (컨테이너간의 볼륨)

emptyDir의 생명 주기는 Pod 단위이기 때문에 Volume이 연결되어 있던 Container가 죽더라도 emptyDir은 유지됨

 

ex) shared-storage라는 이름으로 redis container와 nginx container 공유

 

emptydir Volume 공유

 

Volume - hostPath

노드의 로컬 디스크의 경로를 Pod에서 마운트해서 사용하는 방법의 Volume (Pod 간의 볼륨)

 

📌 HostPath Volume 의 특징

  • hostPath 내에 있는 여러 pod 사이에서 공유
  • Host의 로컬디스크 경로를 Mount 하여 사용
  • Pod가 삭제되더라도, hostPath 파일들 유지됨
  • 노드의 파일 시스템을 접근하는데 유용

 

ex) redis container에서 host의 /tmp volume을 mount 하여 사용

hostpath volume 공유

 

PV & PVC

PV (Persistent Volume) &  PVC(Persistent Volume Claim)의 목적은 인프라의 물리적 디스크 구조에 대한 복잡성을 추상화를 통해 간단히 하여, 개발자들이 손쉽게 인프라를 설정 할 수 있도록 하는 목적 (쉽게 말해 Object나 Controller 처럼 다루는 것)

 

📌 PV (Persistent Volume) 예시

PV의 생명주기는 쿠버네티스 클러스터에 의해서 관리되며, Pod의 생성 또는 삭제에 상관없음

 

Capacity : 볼륨의 용량 정의

VolumeMode : 볼륨의 파일시스템

AccessModes : PV에 대한 Pod의 동시 접근에 대한 정책

: ReadWriteOnce : 1대1

: ReadOnlyMany : 1대다, 쓰기 불가능

: ReadWriteMany:1대다, 모두 가능

 Reclaim Policy : 연결된 PV의 PVC 삭제 후, 다른 PVC에 의해 재사용 될시 디스크의 내용을 지울지에 대한 정책 정의

 

 

📌 PVC (Persistent Volume Claim) 예시

PVC의 생명 주기는 Pod 내 컨테이너의 Volume에 대한 로직(생성/삭제)에 따르기 때문에 PV와는 다른 LifeCycle을 가지며, 이부분은 Namespace 단위로도 관리될 수 있다. (ex. namespace 삭제시 PVC 연결 해제)

 

VolumeMode : 볼륨의 파일시스템

AccessModes : PV에 대한 Pod의 동시 접근에 대한 정책

Resources : 필요한 볼륨 사이즈 정의

Selector :  label selector 볼륨 선택 방식 (생성되어 있는 PV중에 label이 매칭되는 볼륨을 찾아서 매칭)

 

 

 

 

 

📌 PV, PVC 설정 예시 그림 설명

 

PV - PVC 예제

(1) 시스템 관리자가 실제 물리 디스크를 생성 및 디스크를 PV로 등록

(2) 개발자가 Pod 생성시 볼륨을 정의

(3) 개발자가 물리적 디스크에 대한 특성 PVC를 지정, 관리자가 생성한 PV와 연결

 

📌 PV, PVC 설정 yaml 비교

 

PV, PVC, POD yaml 연결

 

마무리 

이번 글에서는 Kubernetes Volume의 emptyDir, hostPath 개념과, PV/PVC 추상화 개념에 대해 알아보았습니다. 다음 글에서는 Kuberenetes의 Service와 그 근간인 kube-proxy에 대해 좀 더 자세히 알아보도록 하겠습니다.