Kubernetes 클러스터(RHEL 10, Vanilla K8s 등)에서 각 노드의 로컬 디스크/디렉토리를 영구 스토리지(Persistent Storage)로 사용할 수 있게 해주는 Rancher Local Path Provisioner 설치 및 설정 방법입니다.
설치가 매우 간단하고 오버헤드가 적어, 단일 노드 스토리지나 로컬 SSD/NVMe를 활용해야 하는 워크로드(예: Kafka, StarRocks BE, MinIO 등)에 널리 사용됩니다.
kubectl 명령어로 공식 저장소의 배포 매니페스트를 적용하는 것만으로 즉시 설치가 완료됩니다.
# 최신 안정 버전 적용 (v0.0.31 기준)
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.31/deploy/local-path-storage.yaml
kubectl get pods -n local-path-storage
local-path-provisioner-xxxx 파드가 Running 상태이면 정상 동작 중입니다.
설치가 완료되면 local-path라는 이름의 StorageClass가 자동으로 생성됩니다.
kubectl get storageclass
local-path를 기본 StorageClass로 지정하고 싶은 경우PersistentVolumeClaim(PVC) 생성 시 storageClassName을 지정하지 않아도 자동으로 local-path를 사용하게 하려면 아래 명령어로 annotaiton을 설정합니다.
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
기본 설정으로 생성되는 PV 볼륨 데이터는 각 노드의 /opt/local-path-provisioner 경로에 저장됩니다.
만약 디스크 용량이 큰 별도 마운트 포인트(예: /data, /mnt/nvme 등)로 저장 경로를 변경하려면 ConfigMap을 수정해야 합니다.
kubectl edit configmap local-path-config -n local-path-storage
config.json 부분을 찾아 paths 배열 경로를 원하는 마운트 경로로 변경합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: local-path-config
namespace: local-path-storage
data:
config.json: |-
{
"nodePathMap":[
{
"node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
"paths":["/data/local-path-provisioner"] # <--- 원하는 경로로 변경 (예: /data/...)
}
]
}
팁: ConfigMap을 수정하면 Provisioner 파드가 설정 변경을 자동으로 감지하므로 파드를 재시작할 필요가 없습니다.
정상적으로 PVC가 생성되고 노드 로컬 디렉토리에 마운트되는지 검증합니다.
test-local-path.yaml)apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-path-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
name: volume-test-pod
spec:
containers:
- name: test-container
image: nginx:alpine
volumeMounts:
- name: my-vol
mountPath: /usr/share/nginx/html
volumes:
- name: my-vol
persistentVolumeClaim:
claimName: local-path-pvc
kubectl apply -f test-local-path.yaml
kubectl get pvc,pv
Status가 Bound 상태가 되었는지 확인합니다.
Pod가 배포된 해당 노드로 접속하여 저장 경로(예: /opt/local-path-provisioner/pvc-xxxx...)로 이동하면 PV 디렉토리가 생성되어 있는 것을 확인할 수 있습니다.
RHEL 10 환경에서 SELinux가 Enforcing 모드인 경우, 호스트 디렉토리를 Pod에 마운트할 때 권한 문제가 발생할 수 있습니다.
# 저장 경로에 container_file_t 컨텍스트 부여
chcon -Rt container_file_t /opt/local-path-provisioner
nodeAffinity 자동 추가됨).