대표적으로 쿠버네티스의 볼륨에는 3가지가 있다.
빈 디렉터리(emptyDir), 호스트 경로(hostPath), 그리고 마지막 네트워크 파일 시스템(NFS)이다.
- 빈 디렉터리(emptyDir) : 파드 내 volume (컨테이너 간 공유하는 볼륨)
- 호스트 경로(hostPath) : 노드 내 volume (파드 간 공유하는 볼륨)
hostPath를 Volume 으로 사용하는 것 이외에도, hostPath 경로를 통해서 PV를 생성하는 것도 가능하다.- 네트워크 파일 시스템(NFS) : 클러스터 내 Persistent Volume (노드 간 공유하는 볼륨)
이에 대해서 직접 실습해보며 어떤 차이가 있고, 각각 어떤 형태인지 알아보도록 하자.
빈 디렉터리는 파드 내에서 컨테이너끼리 공유하는 저장소를 의미한다.
하나의 파드에는 여러개의 컨테이너(애플리케이션, DB 등)를 배포할 수 있는데, 이처럼 파드 하나에 여러개의 컨테이너를 배포하는 경우, 컨테이너끼리 공유해서 사용하는 형태이다.
당연하게도, 다른 파드에서는 접근할 수 없고, 파드내에 존재하는 볼륨이므로 파드가 삭제되면 해당 볼륨 또한 삭제된다.
- 예시
- 생성 결과
- curl 명령 결과
호스트 경로는 노드 내에서 공유되는 저장소를 의미한다.
노드 즉, 호스트(PC라 생각하면 편하다)에 위치하는 볼륨이다.
특정 노드 자체에 볼륨이 생성되므로, 노드 내 여러 파드들이 해당 볼륨에 접근할 수 있고, 노드 자체에 종속되므로 파드가 죽더라도 볼륨에는 전혀 영향이 없다.
(단, 노드가 죽으면 볼륨도 죽는다)
하나의 노드 내에는 일반적으로 여러개의 파드 및 컨테이너가 동작하고, 파드 및 컨테이너들이 해당 볼륨을 공유해서 사용할 수 있다.
로그 배포의 가장 좋은 방법은 데몬셋 형태로 배포하는 것이다.
- 예제
- 결과
네트워크 파일 시스템(NFS)는 실제 쿠버네티스 클러스터 범위 밖의 특정 네트워크의 서버에서 공유되는 저장소이다.
이는 직접적으로 파드와 PV를 직접 연결하는 방법과 PVC를 쓰는 방법으로 총 2가지가 있다.
결론적으로 말하면 PVC를 거의 반드시 무조건 쓴다.
파드와 PV를 직접적으로 연결하는 방법이다.
PV는 외부의 NFS 스토리지와 연결되어 있다.
파드와 PV 사이에 소통 창구인 PVC를 두는 방법이다.
이 또한 PV는 외부의 NFS 스토리지와 연결되어 있다.
우리는 주로 이러한 2번 방법을 사용한다.
추상화와 분리의 목적 때문이다.
PVC는 PV와 Pod 사이에 추상화된 레이어를 제공 하는데, 이를 통해 Pod은 스토리지에 대한 세부 정보를 몰라도 된다. 즉, Pod과 볼륨 간의 결합도를 줄여(Low Coupling) 유연성과 관리 용이성을 높일 수 있다.
예를 들어서 PV를 AWS의 EFS에서 Azure가 제공하는 NFS로 변경해야한다고 생각해 보자.
이 때 파드와 PV간에 PVC를 중간에 추상화 레이어를 둠으로써, Pod가 PV가 변경되는 것을 눈채 못채게 PVC와 연결된 PV를 교체할 수 있다.
(참고로. PV를 교체하는 방법은 파드와 연결된 PVC를 수정하여 새로운 NFS를 가리키도록 업데이트하면 된다.)
- nfs 볼륨 생성
/etc/exports
파일에 nfs 볼륨이 생성됨
/etc/exports
파일은 NFS(Network File System) 서버에서 공유 디렉토리와 관련된 설정을 지정하는 파일
- 파일 확인
- curl 명령어 전송 및 결과 확인