Kubernetes/Volume

[Kubernetes | Volume] Kubernetes Volume 개념 정리 01

cloud_nice 2021. 5. 20. 17:08
더보기

저는 평소에 쿠버네티스를 사용하면서 Volume 부분에 대한 개념들이 헷갈렸었는데 조금씩 정리해보려 합니다.

우선 컨테이너는 특성상 지워지면 데이터도 함께 사라지는 일시적인 특성을 가지고 있습니다. 즉 데이터를 영구적으로 저장하고 싶다면 Volume이라는 리소스를 사용 해야하고, Volume에는 여러가지 종류가 있습니다.

 

오늘은 emptyDirhostPath에 대해 정리해보겠습니다.

 

emptyDir

개념

  • emptyDir은 Pod가 사라지면 볼륨도 함께 사라지는 임시 볼륨의 성격을 가지고 있음.
  • Pod가 실행되는 노드의 디스크의 공간에 마운트.(즉 파드가 삭제되면, 볼륨도 사용 불가)
  • 파드 내에 모든 컨테이너는 emptyDir 볼륨에서 동일한 파일을 읽고 쓸 수 있음.

 

실습

1. 해당 yaml을 통해 emptyDir 볼륨을 사용한 Pod 생성

  • emptydir-pod라는 이름의 pod생성
  • 파드내의 /emptyDir 디렉토리에 볼륨 마운트
  • spec.volumes[]에 emptyDir 명시
apiVersion: v1
kind: Pod
metadata:
  name: emptydir-pod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - mountPath: /emptyDir
      name: test
  volumes:
  - name: test
    emptyDir: {}

 

2. pod를 생성한 뒤에 접속하여 /emptyDir 디렉토리 내에서 테스트 파일 생성

  • emptyDir 디렉토리 생성 확인
  • emptyDir 디렉토리 내에 hello라는 테스트 파일 생성

 

2. 컨테이너 삭제후, 다시 파드 접속하여 hello 파일 확인

  • 컨테이너를 삭제하고 파드내에 볼륨이 그대로 남아있는지 확인

 

3. 파드 삭제후, hello 파일 여부 확인

  • 컨테이너를 삭제하고 파드내에 볼륨이 그대로 남아있는지 확인

 

실습결과

컨테이너 삭제시에는 볼륨이 그대로 보존되는 것을 알 수 있고, pod를 날리니 볼륨도 그대로 날아갑니다!

 

hostPath

개념

  • hostPath 볼륨은 호스트 노드의 파일시스템에있는 파일이나 디렉토리를 노드의 디스크에 마운트함
  • hostPath는 노드의 디스크에 볼륨을 생성하므로, Pod가 삭제 되더라도 볼륨에 있던 데이터는 유지됨

 

실습

1. 해당 yaml을 통해 hostPath 볼륨을 사용하는 Pod 생성

  • spec.volumes.hostPath => 노드에 마운트할 경로를 정해주는 부분. 해당 디렉토리는 노드에 생성되어 있어야 하며, 만약 노드에 디렉토리가 없을 경우 ContainerCreating상태에서 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:
      path: /tmp/hostpath   #해당 디렉토리가 존재해야 함
      type: Directory

 

2. 파드에 접속하여 테스트 파일 생성

 

3. 파드를 삭제한 후, 노드내의 디렉토리에 테스트 파일 존재하는지 확인

 

실습결과

hostPath의 경우, pod가 삭제되더라도 노드의 디렉토리내에 저장되는 것이므로 그대로 데이터가 남음