안녕하세요! 오늘은 쿠버네티스 환경, 특히 온프레미스나 엣지(Edge), 개발 환경에서 스토리지를 다룰 때 "필수템"으로 불리는 Rancher Local Path Provisioner에 대해 아주 상세하게 알아보겠습니다.
쿠버네티스에서 스토리지(PV/PVC)를 설정하는 건 꽤 골치 아픈 일입니다. 클라우드(AWS EBS, Azure Disk)라면 버튼 몇 번으로 해결되지만, 베어메탈이나 로컬 PC에서 테스트할 때는 NFS를 구축하거나 Ceph 같은 거대한 스토리지 솔루션을 깔기엔 너무 부담스럽죠.
이때 등장한 구세주가 바로 Local Path Provisioner입니다! 🦸♂️

🤔 Rancher Local Path Provisioner란 무엇인가요?
Local Path Provisioner는 Rancher Labs(현재는 SUSE)에서 개발한 오픈 소스 프로젝트로, 쿠버네티스 사용자가 로컬 스토리지(노드의 디스크)를 사용하여 PersistentVolumeClaim(PVC) 요청을 할 때, 자동으로 PersistentVolume(PV)을 생성해 주는 동적 프로비저닝(Dynamic Provisioning) 도구입니다.
쉽게 말해, "복잡한 네트워크 스토리지 없이 그냥 노드에 있는 폴더를 자동으로 PV로 만들어주는 녀석"이라고 보시면 됩니다. K3s 같은 경량 쿠버네티스 배포판에는 기본 내장되어 있을 정도로 신뢰성이 높고 가볍습니다.
⚙️ 핵심 작동 원리 (Architecture)
이 녀석이 작동하는 방식은 의외로 단순하지만 강력합니다.
- PVC 생성: 사용자가 StorageClass: local-path를 지정하여 PVC를 생성합니다.
- 감지: Provisioner가 이 요청을 감지합니다.
- 스케줄링 대기: VolumeBindingMode: WaitForFirstConsumer 설정에 의해, 파드(Pod)가 어느 노드에 배치될지 결정될 때까지 기다립니다. (이게 아주 중요합니다! 🌟)
- 디렉터리 생성: 파드가 특정 노드에 스케줄링되면, Provisioner는 그 노드의 파일 시스템(기본값: /opt/local-path-provisioner) 안에 고유한 폴더를 생성합니다.
- PV 연결: 생성된 폴더를 가리키는 hostPath 기반의 PV를 생성하고 PVC와 바인딩합니다.
🚀 설치 및 사용 방법
설치는 정말 간단합니다. 명령어 한 줄이면 끝납니다.
1. 설치 (Standard)
Bash
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
이 명령어를 실행하면 local-path-storage 네임스페이스가 생성되고, 그 안에 프로비저너 파드와 관련 리소스(ServiceAccount, ClusterRole 등)가 배포됩니다.
2. PVC 생성 예시
이제 바로 스토리지를 요청해 볼까요?
YAML
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-path-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path # 핵심! 설치 시 기본 생성되는 스토리지 클래스 이름
resources:
requests:
storage: 2Gi
3. 파드 연결 예시
YAML
apiVersion: v1
kind: Pod
metadata:
name: volume-test-pod
spec:
containers:
- name: volume-test
image: nginx
volumeMounts:
- name: data-vol
mountPath: /usr/share/nginx/html
volumes:
- name: data-vol
persistentVolumeClaim:
claimName: local-path-pvc
이 파드를 배포하고 나면, 해당 노드의 /opt/local-path-provisioner/ 경로 밑에 데이터가 저장되는 것을 볼 수 있습니다. 📂
🔧 심화 설정: 경로는 어떻게 바꾸나요? (ConfigMap)
기본 경로는 /opt/local-path-provisioner입니다. 하지만 운영하다 보면 용량이 큰 다른 디스크(예: /mnt/data)를 쓰고 싶을 수 있죠. 이때는 ConfigMap을 수정해야 합니다.
local-path-config라는 ConfigMap을 열어보면 config.json 부분이 있습니다.
JSON
{
"nodePathMap":[
{
"node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
"paths":["/opt/local-path-provisioner"]
},
{
"node":"worker-node-1",
"paths":["/mnt/ssd-data"]
}
]
}
- DEFAULT_PATH...: 특정하지 않은 모든 노드에 적용될 기본 경로입니다.
- node "이름": 특정 노드(worker-node-1)에서는 다른 경로( /mnt/ssd-data)를 쓰도록 지정할 수 있습니다.
이렇게 설정하면 노드별로 스토리지 환경이 달라도 유연하게 대처할 수 있습니다! 👍
⚠️ 주의사항 및 한계점 (매우 중요!)
Local Path Provisioner는 만능이 아닙니다. 다음 특성을 반드시 이해하고 써야 합니다.
- 노드 종속성 (Node Affinity):
- 데이터가 특정 노드의 "로컬 디스크"에 저장됩니다. 만약 그 노드가 죽으면, 데이터에 접근할 수 없습니다. 파드가 다른 노드로 옮겨가도 데이터는 따라오지 않습니다. (NFS 같은 네트워크 스토리지가 아니니까요!)
- 데이터 백업:
- 노드가 완전히 망가지면 데이터도 함께 사라집니다. 중요한 데이터라면 별도의 백업 전략이나, 애플리케이션 레벨의 복제(예: DB의 ReplicaSet)가 필수입니다.
- 디스크 용량 제한 없음:
- 기본적으로 PVC에서 2Gi를 요청해도, 실제로는 리눅스 파일 시스템의 폴더를 쓰는 것이라 Hard Limit(용량 제한)이 적용되지 않습니다. 디스크 전체가 찰 때까지 쓸 수 있으니 모니터링이 필요합니다.
🏆 언제 사용하면 좋을까요?
- 개발 및 테스트 환경: 빠르고 간편하게 스토리지가 필요할 때.
- 싱글 노드 쿠버네티스: 미니PC 등에서 홈랩을 돌릴 때.
- 분산 데이터베이스: Cassandra, ElasticSearch, Kafka 같이 앱 자체적으로 데이터 복제 기능(Replication)이 있는 경우, 로컬 디스크의 빠른 속도(I/O)를 활용하기 위해 사용합니다. (이때는 로컬 스토리지가 네트워크 스토리지보다 훨씬 성능이 좋습니다!) ⚡️
📝 마치며
Rancher Local Path Provisioner는 쿠버네티스 스토리지의 진입 장벽을 획기적으로 낮춰주는 고마운 도구입니다. "상태가 있는(Stateful)" 애플리케이션을 가볍게 테스트해보고 싶다면, 지금 바로 설치해서 사용해보세요!
여러분의 쿠버네티스 여정이 조금 더 가벼워지길 바랍니다. ☁️✨
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| 🏗️ [쿠버네티스] 파드에 디스크를 직접 연결하면 안 되는 이유 (PV, PVC, SC의 필요성) (0) | 2025.12.11 |
|---|---|
| 📦 그림 한 장으로 끝내는 쿠버네티스 볼륨(Volume) 구조와 원리 (0) | 2025.12.11 |
| "DevOps는 죽었다?" 개발자를 구원할 플랫폼 엔지니어링(Platform Engineering)의 등장 💀🛠️ (0) | 2025.12.09 |
| 🤯 보는 순간 어질어질... CNCF 랜드스케이프는 도대체 왜 이렇게 복잡할까? (0) | 2025.12.08 |
| 컨테이너 제왕의 몰락? 도커(Docker)는 왜 쇄락의 길을 걷게 되었나 🐳📉 (0) | 2025.12.08 |