이전 글에서는 Kubernetes Pod의 컨테이너 구성과 리소스 할당, 환경 변수 설정에 대해 알아보았다.
https://yubi5050.tistory.com/180
이번 글에서는 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 공유
Volume - hostPath
노드의 로컬 디스크의 경로를 Pod에서 마운트해서 사용하는 방법의 Volume (Pod 간의 볼륨)
📌 HostPath Volume 의 특징
- hostPath 내에 있는 여러 pod 사이에서 공유
- Host의 로컬디스크 경로를 Mount 하여 사용
- Pod가 삭제되더라도, hostPath 파일들 유지됨
- 노드의 파일 시스템을 접근하는데 유용
ex) redis container에서 host의 /tmp volume을 mount 하여 사용
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 설정 예시 그림 설명
(1) 시스템 관리자가 실제 물리 디스크를 생성 및 디스크를 PV로 등록
(2) 개발자가 Pod 생성시 볼륨을 정의
(3) 개발자가 물리적 디스크에 대한 특성 PVC를 지정, 관리자가 생성한 PV와 연결
📌 PV, PVC 설정 yaml 비교
마무리
이번 글에서는 Kubernetes Volume의 emptyDir, hostPath 개념과, PV/PVC 추상화 개념에 대해 알아보았습니다. 다음 글에서는 Kuberenetes의 Service와 그 근간인 kube-proxy에 대해 좀 더 자세히 알아보도록 하겠습니다.
'DevOps > Kubernetes' 카테고리의 다른 글
[K8S] k8s 정리 - (11) Kubernetes 명령어 (kubectl) (0) | 2022.09.10 |
---|---|
[K8S] k8s 정리 - (10) Kubernetes Service와 kube-proxy (0) | 2022.09.10 |
[K8S] k8s 정리 - (8) Kubernetes Pod (Container 구성, 리소스, 환경변수) (0) | 2022.09.09 |
[K8S] k8s 정리 - (7) Kubernetes Pod (Lifecycle, Probe, Handler) (0) | 2022.09.09 |
[K8S] k8s 정리 - (6) Kubernetes Controller 종류와 역할 (2) | 2022.09.07 |