컨테이너 특성 상 어떠한 문제가 발생하여 컨테이너가 삭제 된다면 데이터도 같이 삭제 됩니다.
그렇다면, 로그 파일이 컨테이너가 꺼져도 보관되어야하는 경우나 데이터 베이스를 사용할 경우 실시간으로 생성되던 데이터가 사라지면 큰 장애가 발생 합니다.
이러한 이유로 컨테이너를 사용할 때 중요한 데이터가 있다면 볼륨을 사용하여 데이터를 보관(백업)해주어야 합니다.
## 볼륨의 종류
emptryDir은 Pod가 사라지면 볼륨도 같이 삭제되는 임시 볼륨의 성격을 가지고 있고 Pod가 실행되는 디스크의 공간에 볼륨 마운트를 하게 됩니다.
따라서, Life cycle이 컨테이너가 아닌 Pod 단위로 되어있어서 컨테이너가 어떠한 문제로 삭제되어도 Pod는 실행중이므로 데이터는 emptyDir에 의해 보관되며 Pod가 삭제되는 순간 emptyDir로 보관중이던 모든 데이터는 삭제 됩니다.
즉, 임시 볼륨으로 위에서 볼륨의 탄생 이유와는 약간 거리가 멉니다.
apiVersion: v1
kind: Pod
metadata:
name: emptydir-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: /emptydir # 실행될 컨테이너 안에 마운트할 경로 입니다. 컨테이너 안에 해당 디렉토리가 없더라도 자동으로 생성 해줍니다.
name: emptydir-volume # 마운트할 볼륨의 이름
volumes: # 위에 작성한 emptydir-volume을 사용하도록 지정
- name: emptydir-volume
emptyDir: {}
hostPath는 노드의 디스크에 볼륨을 생성하여 Pod가 삭제 되더라도 볼륨에 있던 데이터는 유지 됩니다.
apiVersion: v1
kind: Pod
metadata:
name: hostpath-pod
spec:
containers:
- name: hostpath-pod
image: nginx
volumeMounts:
- mountPath: /hostpath
name: hostpath-volume
volumes:
- name: hostpath-volume
hostPath: # 노드에 마운트할 경로를 정해주고 해당 경로는 Directory 라는것을 명시 합니다. 해당 디렉토리는 노드에 생성되어 있어야 하며, DirectoryOrCreate를 사용할 경우 디렉토리가 존재하지 않으면 디렉토리를 생성 해줍니다.
path: /tmp/hostpath # 해당 디렉토리가 존재해야 합니다.
type: Directory