1 분 소요

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