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