emptyDir
- pod내의 container끼리 데이터를 공유하기 위한 volume
- pod내에 생성되기 때문에 pod 삭제시 함께 삭제됨 → 일시적으로 사용하는 데이터만 저장
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-1
spec:
containers:
- name: con-1
image: something
volumeMounts:
- name: empty-dir
mountPath: /mount1
- name: con-2
image: something
volumeMounts:
- name: empty-dir
mountPath: /mount2
volumes:
- name: empty-dir
emptyDir: {}
hostPath
- node의 path를 volume으로써 사용
- pod가 삭제되더라도 데이터는 유지
- 주의 사항
- pod 재생성시 기존 node가 아닌 다른 Node에 생성될 수 있음
- 기존 volume에 mount 불가
- 리눅스 시스템의 mount 기능을 이용해 pod가 만들어 질 때마다 해당 Node에 volume을 생성한 후 각 node의 volume끼리 mount 가능하지만 권장하지 않음
- 각 node마다 해당 node를 위해 사용되는 파일(시스템 파일, 설정 파일)들을 pod들이 이와 같은 host의 데이터를 참조해야 할 때 사용
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-2
spec:
containers:
- name: container
image: somethig
volumeMounts:
- name: host-path
mountPath: /mount1
volumes:
- name: host-path
hostPath:
path: /node-v
type: DirectoryOrCreate
PVC/PV
- git, AWS와 같이 원격 volume을 사용할 경우 연결
- volume에 따라 pv 구성이 다름
- volume과 직접 연결하는 pv, pv와 연결하는 pvc로 나누어 구성이 됨
- pvc의 spec을 만족하는 pv와 연결됨
- accessMode가 같고, pvc의 resource 이상인 pv와 연결
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-1
spec:
capacity:
storage: 1G
accessModes:
- ReadWriteOnce
gitRepo:
repository: github.com/xxx
revision: master
directory: .
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: ""
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-3
spec:
containers:
- name: container
image: something
volumeMounts:
- name: pvc-pv
mountPath: /volume
volumes:
- name: pvc-pv
persistentVolumeClaim:
claimName: pvc-1
Dynamic Provisioning
- PVC를 만들면 StorageClass를 사용해 자동으로 PV를 생성
- 별도로 PV를 생성하고 PVC를 맞추어야 하는 등의 번거로움을 없앰
- 지원해주는 솔루션을 설치하면 StorageClass, Service, Pod 등 오브젝트를 생성함
- PVC의
StorageClassName
“”
: localVolume과 연결된 적절한 PV와 연결
“{StorageClass의 이름}”
: 해당 StorageClass와 연결
명시 x
: default StorageClass와 연결
PV Status & ReclaimPolicy
- PV Status
- Available: PV 생성 후 연결되지 않았을 때
- Bound: PVC와 연결이 되었을 때 → Pod가 PVC와 연결이 되어 실제 사용할 때 volume이 생성되고 PV와 연결됨
- Released: PV가 Volume과 연결된 상태에서 PVC와 연결이 끊어졌을 때
- Failed: PV와 volume의 연결이 끊어졌을 때
- ReclaimPolicy: PV가 Released 상태일 때 정책
- Retain
- Delete
- volume에 따라 데이터 삭제
- PV 재사용 불가
- StorageClass 사용시 Default
Recycle (deprecated)