1. 개요
Kubernetes에서 사용할 수 있는 local 볼륨의 종류 두가지를 소개한다.
전체 볼륨에 대한 소개는 Kubernetes Docs에서 확인할 수 있으며,
이 글에서는 emptyDir, hostPath에 대해 소개한다.
2. emptyDir
emptyDir은 pod가 노드에 할당될 때 생성되고, 노드에서 실행되는 동안 유지되는 볼륨이다.
생성될 때 비어있는 상태로 만들어지기 때문에 emptyDir이라고 한다.
pod 내부의 각 컨테이너는 emptyDir 볼륨에서 동일한 파일을 읽고 쓸 수 있다.
디스크, SSD, 네트워크 스토리지 등 모든 저장 매체에 저장 가능하며, emptyDir.medium 필드 설정을 통해 메모리에 저장할 수도 있다.
아래와 같은 매니페스트 파일로 emptyDir을 사용하는 pod를 생성할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
3. hostPath
hostpath는 노드의 파일시스템에서 파일이나 디렉토리를 마운트하여 사용하는 방식이다.
같은 hostPath를 지정해두면 다른 pod에서 같은 볼륨을 공유할 수 있으며,
pod가 삭제되어도 hostPath 내부의 파일은 삭제되지 않는다.
예를 들어 다음과 같은 경우에 사용한다.
- 도커 내부에 접근해야하는 컨테이너를 실행하는 경우 hostPath를 /var/lib/docker로 지정하여 사용
- 컨테이너 내부에서 cAdvisor를 실행하는 경우 hostPath를 /sys로 지정하여 사용
hostPath를 지정할 때 볼륨의 유형을 지정할 수도 있다.
아래와 같은 매니페스트 파일로 hostPath를 사용하는 pod를 생성할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /data
# this field is optional
type: Directory