볼륨(Volume)은 컨테이너 간에 데이터를 공유하고, 컨테이너의 데이터를 영속적으로 보존하기 위해 사용한다.
볼륨은 컨테이너와 별도로 존재하며, 파드(Pod) 내의 여러 컨테이너가 해당 볼륨을 공유할 수 있다.
Pod가 만들어질때 만들어지는 volume으로, 파드 내에서 일시적인 데이터를 저장하는 데 사용된다.
Pod가 삭제되면 volume도 같이 삭제된다.
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-1
spec:
containers:
- name: container1
image: ksp7331/sp-app:1.1
ports:
- containerPort: 8080
volumeMounts:
- name: empty-dir
mountPath: /mount1
- name: container2
image: nginx
volumeMounts:
- name: empty-dir
mountPath: /mount2
volumes:
- name : empty-dir
emptyDir: {}
container1에 접속해서 mount1에 파일을 추가하면 container2의 mount2에도 파일이 추가된다.
호스트 노드의 파일 시스템 경로를 파드에 마운트하여 사용하는 볼륨이다. 호스트 노드의 파일 시스템에 직접 접근할 수 있다. 노드에 있는 데이터를 Pod에서 사용하기 위해 사용한다.
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-2
spec:
containers:
- name: container
image: ksp7331/sp-app:1.1
volumeMounts:
- name: host-path
mountPath: /mount1
volumes:
- name : host-path
hostPath:
path: /node-v
pod에 접속해서 /mount1에 파일을 추가하면 minikube ssh 명령어로 노드에 접속해서 해당 파일을 확인할 수 있다.
PV(Persistent Volume)은 이름 그대로 영속적인 저장소를 나타내는 객체이다. PV를 생성할 때는 저장소에 대한 세부 사항을 정의한다. 이러한 정의를 토대로 PV는 실제 저장소, 즉 로컬 스토리지나 클라우드에 연결된다.
pv, persistentvolume, persistentvolumes
ReadWriteOnce 하나의 노드에서 해당 볼륨이 읽기-쓰기로 마운트 될 수 있다. ReadWriteOnce 접근 모드에서도 파드가 동일 노드에서 구동되는 경우에는 복수의 파드에서 볼륨에 접근할 수 있다. ReadOnlyMany 볼륨이 다수의 노드에서 읽기 전용으로 마운트 될 수 있다. ReadWriteMany 볼륨이 다수의 노드에서 읽기-쓰기로 마운트 될 수 있다.apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-01
spec:
capacity:
storage: 2G
accessModes:
- ReadWriteOnce
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube
PV에는 4가지 상태가 있다.
PVC(Persistent Volume Claim)는 필요한 PV를 요청하기 위해 사용하는 객체이다.
pvc, persistentvolumeclaim, persistentvolumeclaims