운영자가 미리 PV(PersistentVolume)를 만들어두는 것이 아니라, 개발자가 PVC(PersistentVolumeClaim)를 작성하면 StorageClass에 정의된 Provisioner가 해당 PVC의 요청을 처리하여 동적으로 볼륨을 생성한다. 이 방식은 리소스를 효율적으로 사용할 수 있고 운영자의 개입 없이 개발자가 필요한 만큼의 볼륨을 자동으로 확보할 수 있다는 장점이 있다.
Kubernetes에서는 다양한 CSI 드라이버를 통해 다양한 스토리지 백엔드(NFS, EBS, Ceph 등)와 연동할 수 있다. 여기서는 NFS용 CSI 드라이버를 설치하고 사용하는 방법을 소개한다.
git clone https://github.com/kubernetes-csi/csi-driver-nfs.git
cd csi-driver-nfs
./deploy/install-driver.sh v4.7.0 local
# nfs-csi.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: dev1-sc
mountOptions:
- nfsvers=4.2
parameters:
server: 211.183.3.99
share: /shared
provisioner: nfs.csi.k8s.io
reclaimPolicy: Delete
k apply -f nfs-csi.yml
k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
dev1-sc nfs.csi.k8s.io Delete Immediate false 12s
# dev1-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dev1-pvc
spec:
storageClassName: dev1-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
k apply -f dev1-pvc.yml
# mypod2.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod2
labels:
app: web
spec:
containers:
- name: myctn2
image: nginx
resources:
limits:
cpu: 500m
memory: 128Mi
requests:
cpu: 250m
memory: 64Mi
ports:
- containerPort: 80
name: http
volumeMounts:
- name: myvol2
mountPath: /usr/share/nginx/html
volumes:
- name: myvol2
persistentVolumeClaim:
claimName: dev1-pvc
k apply -f mypod2.yml
k exec -it mypod2 -- touch /usr/share/nginx/html/index.html
NFS 서버(/shared) 하위에 자동 생성된 pvc-... 디렉토리에 index.html 파일이 존재하는지 확인하면 마운트가 정상적으로 연결된 것을 알 수 있다. Pod에서의 경로(/usr/share/nginx/html)와 NFS 서버의 실제 경로(/shared/pvc-...)는 CSI 드라이버에 의해 연결되어 있다.
이렇게 개발자는 StorageClass만 알고 있으면 PVC와 Pod 설정만으로 필요한 스토리지를 간편하게 생성하고 사용할 수 있다. 이는 DevOps 관점에서도 매우 효율적인 구조이며, 특히 멀티 팀 환경에서 유용하게 활용된다.
[토이 프로젝트] 실제 기업에서도 사용할 수 있는 인프라 아키텍처 학습 (1) | 2025.04.17 |
---|---|
ArgoCD 설치 및 초기 설정 (0) | 2025.04.16 |
Kubernetes NFS 기반 정적 프로비저닝 및 ResourceQuota 적용 실습 정리 (0) | 2025.04.16 |
🧭 NGINX Ingress Controller + Ingress Routing 실습 정리 (0) | 2025.04.15 |
📈 Kubernetes HPA 실습: Horizontal Pod Autoscaler (0) | 2025.04.15 |