NFS Provisioner v4.0.18 설치 가이드
본 문서는 Rocky Linux 9.6 / K8s v1.33.7 환경에서 NetApp NFS v4.1을 백엔드로 연동하는 절차를 설명합니다.
0. 오프라인 설치 자산 준비 (인터넷 환경)
폐쇄망에 반입할 Helm 차트와 컨테이너 이미지(.tar)가 charts/ 및 images/ 디렉토리에 없는 경우, 인터넷이 연결된 외부 PC(리눅스)에서 아래 스크립트를 실행하여 자산을 다운로드해야 합니다.
주의: 이 작업은 폐쇄망 내부가 아닌, 외부망에서 사전에 수행되어야 합니다. (Docker 또는 containerd(
ctr),helmCLI 설치 필수)
# 컴포넌트 스크립트 디렉토리로 이동
cd scripts/
# 실행 권한 부여 및 다운로드 스크립트 실행
chmod +x download_assets_offline.sh
sudo ./download_assets_offline.sh
스크립트 실행이 완료되면 charts/ 디렉토리에 .tgz 차트 파일이, images/ 디렉토리에 .tar 이미지 파일들이 생성됩니다. 전체 프로젝트 폴더를 압축하여 폐쇄망 내부로 반입하십시오.
📋 사전 준비 사항
1. (온라인인 경우) 헬름 차트 다운로드
설치 스크립트 실행 전, 공식 차트를 아래 명령어로 확보해야 합니다.
cd nfs-provisioner-4.0.18/charts
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.18 --untar
2. OS 패키지 설치 (전체 워커 노드)
NFS 마운트를 위해 모든 노드에 관련 패키지가 설치되어 있어야 합니다.
- Rocky 9: sudo dnf install -y nfs-utils
- Ubuntu 24: sudo apt install -y nfs-common
🛠️ 단계별 설치 프로세스
Step 1: 설치 스크립트 실행
Step 2: 정보 입력
- NFS 서버 IP: NetApp Vserver의 LIF IP 입력.
- NFS 공유 경로:
/k8s/data등 실제 Export된 경로 입력.
💡 NetApp NFS v4.1 최적화 내용 (Rationale)
본 패키지의 values.yaml에는 NetApp 벤더 권장 최적화 옵션이 기본 적용되어 있습니다.
vers=4.1: v3에서 발생하는 파일 잠금(Locking) 문제를 해결하고 고가용성을 확보합니다.proto=tcp: 전송 안정성을 보장합니다.rsize/wsize=1048576: 1MB 단위 대용량 입출력을 통해 성능을 극대화합니다.hard: 네트워크 일시 단절 시 데이터 유실 방지를 위해 마운트를 유지합니다.noresvport: 클라이언트 재접속 시 포트 제약 없이 즉시 연결하도록 설정합니다.
📁 다중 StorageClass 운영 (Multi-SC)
기본적으로 nfs-app StorageClass가 생성됩니다. 추가로 백업이나 테스트용이 필요한 경우 아래 명령어를 참고하십시오.
manifests/additional-sc.yaml파일에서 원하는 이름과 설정을 확인합니다.- 설치 스크립트 실행 시 자동으로 함께 적용됩니다.
- 수동 적용 시:
kubectl apply -f manifests/additional-sc.yaml
| SC 명칭 | 용도 | 삭제 시 데이터 정책 |
|---|---|---|
| nfs-app | 일반 애플리케이션 | Archive (보관) |
| nfs-backup | DB 백업 등 | Retain (완전 유지) |
| nfs-test | 임시 테스트 | Delete (즉시 삭제) |
✅ 설치 검증
# 1. StorageClass 상태 확인
kubectl get sc
# 2. 프로비저너 포드 상태 확인
kubectl get pods -n kube-system -l app=nfs-client-provisioner
# 3. 테스트 PVC 생성 및 바인딩 확인
kubectl apply -f - <<EOF
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs-test-pvc
spec:
storageClassName: nfs-app
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
EOF
kubectl get pvc nfs-test-pvc