볼륨
- emptyDir
- hostPath
- downwardAPI
- projected
- nfs
- iscsi
- cephfs
emptyDir 특징
- pod 용 임시 디스크 영역
- pod 종료 시 삭제 된다.
- host 의 임의 영역을 마운트 할 수 없음.
- 리소스 제한이 가능하며, 초과 사용 시 pod 가 축출(Evict) 된다.
# emptyDir.sizeLimit: 128Mi - tmpfs 로 할당 가능하다. 역시 초과 사용 시, OOM 이 발생하여 pod 가 정지 된다.
# emptyDir.medium: Memory
hostPath
- node 의 영역을 컨테이너에 마운트 한다.
- host 의 어떤 영역을 사용할 지 지정해야 한다.
# Directory, DirectoryOrCreate, File, Socket, BlockDevice
영구 볼륨(이하 PV)
- 볼륨은 pod 정의 안에 직접 지정하는 형태로 사용해야 하나,
- 영구 볼륨은 개별 리소스로 생성 후 사용한다.
- 기본적으로 Network 를 통해 disk 를 attach 하는 방식이다.
- 다양한 플러그인 존재함 (단, google cloud 같은 서비스 이용 시 사용 가능해 보임.)
- 생성 시 아래와 같은 항목에 대해 설정 가능하다.
# Label
# Capacity
# Access
# Reclaim policy
# Mount option
# Storage class
# 각 플러그인 고유 설정 - Label
- Capacity
# 동적 프로비저닝을 사용할 수 없는 경우, 다양한 용량을 미리 할당해야 한다. - Access
# ReadWriteOnce => 단일 노드에서 Read/Write 가능
# ReadOnlyMany => 여러 노드에서 Read 가능
# ReadWriteMany => 여러 노드에서 ReadWrite 가능 - Reclaim policy
# PV 사용 후 처리 방법 제어 (정확히는 영구볼륨 클레임 삭제 시)
# Delete => PV 자체를 삭제 한다.
# Retain => 삭제하지 않고 유지 하며, 다른 PVC 에 의해 마운트 되지 않는다. - nfs 플러그인 사용 시 (nfs 를 직접 설치해야 하는지 확인 필요...)
# nfs.server:
# nfs.path:
영구 볼륨 클레임 (이하 PVC)
- PV 를 요청하는 리소스
- PVC 에서 지정된 조건을 기반으로 하는 PV 에 대한 요청 발생 시, 스케줄러는 현재 가지고 있는 PV 에서 적당한 볼륨을 할당한다.
- 생성 시 아래와 같은 항목을 설정한다.
# LabelSelector
# Capacity
# Access
# StorageClass - 위 설정에 부합하는 PV 가 최종적으로 할당된다.
- PVC 가 PV 확보에 실패하면 pending 상태가 유지된다.
동적 프로비저닝
- PVC 는 PV 를 미리 생성해두고, PVC 요청에 따라 볼륨이 할당되는 방식이었다.
- 이로 인한 단점이 존재
# PV 를 생성해야 하는 점
# 생성한 PV 를 사용하지 않는 경우 자원 낭비 - 동적 프로비저닝을 사용하는 PVC 의 경우, PVC 를 생성하는 시점에 PV 를 생성하고 할당한다.
- 동적 프로비저닝을 사용하려면, 사전에 어떤 영구 볼륨을 생성할지 정의한 StorageClass 를 생성해야 한다.
StatefulSet 에서 영구 볼륨 클레임
- StatefulSet 에서는 spec.volumeClaimTemplate 항목이 있다.
- PVC 를 별도로 정의하지 않아도 자동으로 영구 볼륨 클레임을 생성 할 수 있다.