-
[Kubernetes | Volume] Kubernetes Volume 개념 정리 01Kubernetes/Volume 2021. 5. 20. 17:08더보기
저는 평소에 쿠버네티스를 사용하면서 Volume 부분에 대한 개념들이 헷갈렸었는데 조금씩 정리해보려 합니다.
우선 컨테이너는 특성상 지워지면 데이터도 함께 사라지는 일시적인 특성을 가지고 있습니다. 즉 데이터를 영구적으로 저장하고 싶다면 Volume이라는 리소스를 사용 해야하고, Volume에는 여러가지 종류가 있습니다.
오늘은 emptyDir과 hostPath에 대해 정리해보겠습니다.
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가 삭제되더라도 노드의 디렉토리내에 저장되는 것이므로 그대로 데이터가 남음