안녕하세요! 오늘은 쿠버네티스에서 가장 중요한 개념 중 하나인 '볼륨(Volume)'에 대해 이야기해 보려 합니다.
쿠버네티스를 처음 접할 때 가장 헷갈리는 부분이 바로 "컨테이너가 죽으면 내 데이터는 어떻게 되지?"라는 점인데요. 위 그림을 하나씩 뜯어보면서, 쿠버네티스가 어떻게 데이터를 안전하게 보관하고 컨테이너끼리 공유하는지 완벽하게 정리해 드리겠습니다. 🚀

1. 왜 '볼륨'이 필요할까요? 🤷♂️
기본적으로 컨테이너는 '휘발성(Ephemeral)'입니다. 컨테이너 내부에서 파일을 만들고 저장해도, 컨테이너가 재시작되거나 삭제되면 그 안의 데이터도 연기처럼 사라집니다.
하지만 데이터베이스나 로그 파일처럼 사라지면 안 되는 데이터도 있겠죠? 또는 한 파드 안에 있는 여러 컨테이너가 데이터를 공유해야 할 때도 있습니다. 이때 등장하는 것이 바로 볼륨(Volume)입니다.
2. 그림으로 보는 구조 분석 🔍
위 그림은 크게 파드(Pod) 내부와 외부 스토리지로 나뉩니다. 하나씩 살펴볼까요?
① 파드(Pod)와 컨테이너의 관계
그림의 가장 안쪽을 보면 Pod라는 큰 상자 안에 컨테이너1과 컨테이너2가 있습니다.
- 파일 시스템: 각 컨테이너는 자신만의 독립적인 파일 시스템을 가집니다.
- Mount (마운트): 그런데 그림을 보면 두 컨테이너 모두 /my-path라는 경로가 화살표를 통해 중앙의 volumes 원통으로 연결되어 있죠? 이것이 바로 마운트입니다.
- 데이터 공유: 이렇게 되면 컨테이너1이 /my-path에 파일을 쓰면, 컨테이너2도 /my-path에서 똑같은 파일을 읽을 수 있게 됩니다. 한 지붕 두 가족이 냉장고를 같이 쓰는 것과 같죠! 🏠
② 다양한 볼륨의 종류 (우측 박스들)
파드 중앙에 있는 volumes는 실제로 어디에 저장될까요? 그림 오른쪽의 세 가지 박스가 그 해답입니다.
- 📁 emptyDir (임시 저장소)
- 이름 그대로 처음엔 '비어 있는(empty)' 디렉토리입니다.
- 파드가 생성될 때 만들어지고, 파드가 삭제되면 같이 삭제됩니다.
- 용도: 주로 캐시(Cache) 데이터나, 컨테이너끼리 임시로 데이터를 교환할 때 사용합니다. 빠르고 간편하지만 영구 저장은 안 돼요!
- 💻 hostPath (노드 직접 연결)
- 그림의 가장 큰 테두리인 Kubernetes Node의 파일 시스템을 직접 사용합니다.
- 파드가 노드의 특정 경로(예: /var/log)를 직접 쳐다보는 방식입니다.
- 용도: 주로 모니터링 툴이나 시스템 관련 컨테이너가 노드의 상태를 읽어야 할 때 사용합니다. 보안상 주의가 필요해요! ⚠️
- ☁️ Network Storage (네트워크 스토리지)
- 이것이 데이터 영구 보존의 핵심입니다.
- 그림에서 화살표가 Kubernetes Node 밖으로 나가서 스토리지 서비스의 영구 디스크로 연결되는 것이 보이시나요?
- AWS EBS, Azure Disk, NFS 같은 외부 저장소를 연결합니다.
- 장점: 파드가 죽거나, 심지어 노드가 고장 나서 파드가 다른 노드로 이사를 가도 데이터는 안전하게 외부 스토리지에 남아있기 때문에 그대로 다시 연결해서 쓸 수 있습니다. 🛡️
3. 요약: 데이터의 흐름 🌊
그림의 흐름을 한 문장으로 요약하면 다음과 같습니다.
"컨테이너 내부의 /my-path에 데이터를 저장하면 ➡️ 파드 내부의 volume을 거쳐 ➡️ 실제 저장소(emptyDir, hostPath, 또는 외부 디스크)에 기록된다."
이 구조 덕분에 개발자는 컨테이너가 죽든 살든 걱정 없이, 데이터를 안전하게 관리하고 활용할 수 있는 것이죠.
💡 마치며
쿠버네티스 볼륨은 복잡해 보이지만, "컨테이너와 스토리지를 연결해 주는 다리"라고 생각하면 쉽습니다.
- 잠깐 쓰고 버릴 데이터 👉 emptyDir
- 노드의 정보가 필요할 때 👉 hostPath
- 절대 잃어버리면 안 되는 데이터 👉 Network Storage (PVC/PV)
이 세 가지만 기억해도 쿠버네티스 스토리지의 절반은 이해하신 겁니다! 다음 포스팅에서는 실제 설정 파일(YAML)을 어떻게 작성하는지 다뤄보겠습니다. 👋
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| [Kubernetes] 파드를 3개나 띄웠는데 왜 한 노드에만 몰릴까? (스케줄러의 비밀) 🧐 (0) | 2025.12.19 |
|---|---|
| 🏗️ [쿠버네티스] 파드에 디스크를 직접 연결하면 안 되는 이유 (PV, PVC, SC의 필요성) (0) | 2025.12.11 |
| 📦 쿠버네티스 스토리지의 가벼운 혁명: Rancher Local Path Provisioner 완벽 해부 (0) | 2025.12.11 |
| "DevOps는 죽었다?" 개발자를 구원할 플랫폼 엔지니어링(Platform Engineering)의 등장 💀🛠️ (0) | 2025.12.09 |
| 🤯 보는 순간 어질어질... CNCF 랜드스케이프는 도대체 왜 이렇게 복잡할까? (0) | 2025.12.08 |