K8S Volume
1. emptyDir
하나의 Pod 내에서 2개 이상의 Container가 파일을 공유하기 위해 사용한다
1) Pod Sample
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-1
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: empty-dir
mountPath: /mount1
- name: container2
image: kubetm/init
volumeMounts:
- name: empty-dir
mountPath: /mount2
volumes:
- name : empty-dir
emptyDir: {}
# container1
$ mount | grep mount1
$ cd mount1
$ echo "file context" >> file.txt
# container2
$ cd mount2
$ ls
file.txt
$ cat file.txt
file context
2. hostPath
Node 별로 이미 존재하는 정보를 Pod에서 얻기 위해 사용한다. 배포되는 Node에 종속적인 정보라 각각 다르거나 없을 수 있다.
3. PVC / PV
Pod에 영속성있는 Volume을 제공한다. Local Volume을 할당하거나, AWS난 Git Repo, NFS, Storeag OS 같은 외부 Volume도 가능하다.
1) PV Sample
# k8s-node1
$ mkdir /node-v
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-04
labels:
pv: pv-04
spec:
capacity:
storage: 2G
accessModes:
- ReadWriteMany
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
2) PVC Sample
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-01
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2G
storageClassName: ""
selector:
matchLabels:
pv: pv-04
- accessMode
- ReadWriteMany : 여러개의 노드가 Read/Write 가능하도록 마운트
- ReadWriteOnce : 하나의 노드가 볼륨을 Read/Write 가능하도록 마운트
- ReadOnlyMany : 여러개의 노드가 Read 전용으로 사용하도록 마운트
3) Pod Sample
apiVersion: v1
kind: Pod
metadata:
name: pod-1
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: pvc-pv
mountPath: /mount3
volumes:
- name : pvc-pv
persistentVolumeClaim:
claimName: pvc-01