✅ emptyDir
- Pod 내부에서 컨테이너끼리 데이터를 공유할 때 사용하는 임시 볼륨.
- Pod이 삭제되면 데이터도 함께 삭제됨.
- 주로 임시 데이터 저장소로 활용됨.
📌 어떤 상황에서 많이 사용될까?
- 여러 컨테이너가 같은 데이터를 공유해야 하는 경우
- 예를 들어, A 컨테이너가 데이터를 생성하고, B 컨테이너가 이를 가공할 때 유용함.
- emptyDir을 마운트하면 두 컨테이너가 같은 파일을 실시간으로 공유할 수 있음.
- 임시 캐시 또는 버퍼 저장소 역할
- 애플리케이션에서 **일시적인 파일(로그, 캐시, 프로세스 간 공유 데이터 등)**을 저장하는 용도로 활용됨.
- 예를 들어, 웹 서버 컨테이너가 요청을 처리하는 동안 데이터를 캐싱할 공간이 필요할 때.
- 데이터 프로세싱 단계에서 활용
- 컨테이너 내에서 데이터 처리가 필요하지만, 처리 후 결과물이 유지될 필요가 없을 때 사용.
- 예를 들어, 일시적인 데이터를 저장하고, 처리가 끝난 후 삭제되는 작업(배치 프로세싱, 데이터 변환 등).
✅ hostPath
- 쿠버네티스 노드의 로컬 디스크를 공유하는 방식.
- 특정 노드의 디렉토리를 컨테이너에 마운트하여 사용함.
- Pod이 다른 노드로 이동하면 기존 데이터에 접근할 수 없음.
📌 hostPath와 단순한 노드 로컬 저장의 차이점
- 볼륨 없이 컨테이너 내부의 파일 시스템에 저장하면, 컨테이너가 재시작되거나 Pod이 다른 노드로 이동하면 데이터가 사라짐.
- 하지만 hostPath를 사용하면 해당 노드의 로컬 디스크에 직접 저장되므로 Pod이 삭제되어도 데이터가 유지됨.
- 단, Pod이 다른 노드로 이동하면 해당 데이터에 접근할 수 없음.
✅ NFS (네트워크 파일 시스템)
- 여러 Pod이 동시에 같은 데이터를 공유할 수 있는 네트워크 스토리지.
- PersistentVolume(PV) 및 PersistentVolumeClaim(PVC)과 함께 사용하여 영구적인 데이터 저장 가능.
- Pod이 삭제되더라도 데이터는 유지됨.
✅ StorageClass
- PVC 요청이 있을 때마다 자동으로 PV를 생성해주는 메커니즘.
- 미리 PV를 생성할 필요 없이 스토리지가 동적으로 할당됨.
- 다양한 스토리지 유형(SSD, HDD 등)에 따라 설정 가능.
✅ VolumeClaimTemplates
- StatefulSet에서 각 Pod마다 독립적인 볼륨을 제공할 때 사용.
- Pod이 삭제되더라도 각 Pod의 볼륨 데이터는 유지됨.
- 데이터베이스 같은 각 Pod이 고유한 데이터를 저장해야 하는 경우 적합.
✅ 파드 간에 공유 볼륨(Shared Volume) 설정이 없으면, 기본적으로 서로의 파일 시스템에 직접 접근할 수 없습니다.
- 각 파드는 독립된 파일 시스템을 가짐
- 쿠버네티스에서 파드는 기본적으로 독립된 파일 시스템을 사용합니다.
- 같은 노드에 있더라도, 볼륨을 공유하지 않는 이상 서로의 파일을 직접 읽거나 쓰는 것이 불가능합니다.
- 컨테이너끼리 공유하려면 볼륨이 필요
- 같은 파드 내의 컨테이너들은 emptyDir 같은 공유 볼륨을 사용하면 서로 파일을 주고받을 수 있음.
- 하지만, 다른 파드들끼리는 emptyDir을 공유할 방법이 없음.
→ 이 경우, NFS, PV/PVC 같은 네트워크 기반 스토리지를 사용해야 함.
- 네트워크를 통해 간접적인 공유는 가능
- 볼륨 없이도 네트워크를 활용하면 데이터 공유가 가능함.
- 예를 들어:
- 한 파드에서 웹 서버를 띄우고, 다른 파드가 API 요청을 보내 파일을 받아오는 방식.
- DB를 통해 데이터를 저장하고, 여러 파드가 같은 DB를 사용하여 공유하는 방식.
✅ 왜 노드끼리 직접 파일 공유가 안 되는가?
쿠버네티스 환경에서 각 노드는 독립적인 파일 시스템을 가지고 있기 때문입니다.
- 각 노드는 자신의 로컬 디스크를 사용
- 기본적으로 쿠버네티스에서 노드는 자신의 로컬 디스크만 접근 가능.
- A 노드에서 생성된 파일을 B 노드에서 바로 읽을 수 없음.
- 노드 간 공유 스토리지가 없다면, 다른 노드에서 데이터 접근 불가
- 쿠버네티스에서 노드 간 파일 공유는 "공유 스토리지"를 통해서만 가능함.
- 공유 볼륨(NFS, PV/PVC, 클라우드 스토리지 등)이 없으면 다른 노드에서 데이터를 읽을 수 없음.
- 각 노드는 물리적으로 서로 독립적인 머신 (또는 VM) 임
- 로컬 디스크는 각 노드의 물리적(또는 가상화된) 저장 공간이므로, 직접 접근이 불가능함.
- 여러 노드에서 같은 데이터를 접근하려면, 공유 볼륨을 설정하거나 네트워크를 활용해야 함.
🛠 노드 간 파일 공유를 위한 해결책
노드 간에 데이터를 공유하려면 공유 스토리지 시스템이 필요합니다. 대표적인 방법은 다음과 같습니다.
- NFS (Network File System)
- 하나의 노드에 NFS 서버를 띄우고, 다른 노드들이 이를 마운트하여 공유.
- 여러 노드에서 동일한 볼륨을 사용할 수 있음.
- PV (Persistent Volume) + PVC (Persistent Volume Claim)
- 클러스터 내에서 여러 노드가 공유할 수 있는 Persistent Volume(PV) 을 설정.
- PVC를 사용하여 파드가 PV를 요청하고, 여러 노드에서도 같은 데이터를 접근 가능.
- 클라우드 스토리지 활용
- AWS EFS, Google Filestore, Azure File Share 등의 네트워크 기반 스토리지를 사용하면 노드 간 공유 볼륨을 쉽게 구성 가능.
- 네트워크 API 방식
- 한 노드에서 파일을 저장하고, 다른 노드에서 API 요청으로 데이터를 가져오는 방식.
- 예: 파일을 저장하는 서버를 운영하고, 다른 노드들이 HTTP API로 접근.
1️⃣ NFS (Network File System)
NFS는 여러 서버 또는 클러스터에서 동일한 파일 시스템을 네트워크를 통해 공유할 수 있도록 해주는 프로토콜로 NFS 서버를 설정하고 여러 노드에서 이를 마운트하여 파일 시스템을 공유할 수 있습니다.
- 장점: 여러 노드에서 동일한 데이터를 공유할 수 있다.
- 단점: NFS 자체는 동적 스토리지 관리나 리소스 할당을 제공하지 않기 때문에, 저장소 용량 관리나 클러스터 리소스 관리에는 한계가 있을 수 있다.
2️⃣ PV (Persistent Volume) & PVC (Persistent Volume Claim)
PV는 쿠버네티스에서 영구 저장소를 제공하는 리소스이고, PVC는 사용자가 요청한 영구 볼륨을 실제로 동적으로 할당하는 방법
- PV는 실제 물리적 저장소를 나타내며, PVC는 클러스터 내에서 특정 파드나 서비스가 이 저장소를 사용하도록 요청하는 방법
- PVC는 파드가 사용하는 저장소의 크기, 액세스 모드 등을 정의하고, PV는 실제 저장소 자원을 제공
- 장점: PV와 PVC를 사용하면 저장소를 클러스터 외부에서 쉽게 관리하고 동적으로 할당 가능
- 단점: 기본적으로 NFS와 같은 외부 저장소와는 다르게, PVC는 내부 클러스터 자원으로만 사용가능
3️⃣ 왜 NFS와 PV/PVC를 같이 쓰는가?
NFS는 네트워크 파일 시스템으로 여러 노드에서 동일한 파일 시스템을 공유하는 데 유용하지만, 쿠버네티스에서 PV/PVC를 사용하는 이유는 Kubernetes 리소스 관리와 동적 할당 때문
NFS와 PVC를 함께 사용하는 이유:
- 동적 스토리지 할당:
- NFS는 공유 스토리지를 제공하지만, 쿠버네티스에서 동적 스토리지 할당(PVC)을 사용하려면 NFS 서버와 PersistentVolume 리소스를 연결해야 한다.
- PVC는 파드에 영구적인 스토리지를 동적으로 제공하는 기능을 하는데, NFS 서버를 PersistentVolume 리소스로 정의하고 PVC를 통해 이를 요청하는 방식으로 활용
- 클러스터 관리:
- PV/PVC는 쿠버네티스 리소스로, 스토리지를 리소스처럼 관리할 수 있어요. 예를 들어, PVC를 사용하면 특정 파드가 스토리지 용량이나 액세스 모드를 요구할 수 있습니다.
- NFS를 PersistentVolume으로 선언하면, 여러 파드가 동적으로 NFS 스토리지를 요청하고 사용할 수 있게 되므로, 스토리지 관리가 용이
- 다양한 스토리지 시스템 통합:
- NFS를 사용하여 네트워크 파일 시스템을 구축하고, 이를 PersistentVolume으로 정의하면, 다양한 스토리지 시스템을 쿠버네티스와 통합할 수 있다.
- 클라우드 환경에서는 EFS (AWS)나 Filestore (GCP) 같은 서비스도 NFS와 유사하게 네트워크 스토리지를 제공하며, 이를 PV로 관리하고 PVC로 동적으로 요청할 수 있습니다.
- 보안과 확장성:
- PV/PVC를 사용하면 스토리지가 쿠버네티스 리소스로 관리되므로 보안과 확장성이 좋아집니다. 또한, 스토리지를 동적으로 할당하여, 클러스터의 크기나 리소스 요구사항에 따라 적절하게 조정할 수 있습니다.
'도커&쿠버네티스' 카테고리의 다른 글
로키 리눅스 인스턴스에 도커 쿠버네티스 설치 (0) | 2025.04.11 |
---|---|
쿠버네티스 용어 및 개념 정리 (0) | 2025.04.11 |
로키 리눅스 기반 쿠버네티스 설치 (0) | 2024.12.06 |
쿠버네티스 개념 및 용어 정리 (0) | 2024.11.21 |
로키 리눅스 기반 도커 컴포즈 파일 작성 및 실행하기 (0) | 2024.10.28 |