본문 바로가기
DevOps/Kubernetes

[Kubernetes] Kubernetes NFS PV/PVC 마운트 실패 해결 과정

by Yoon_estar 2025. 3. 5.
728x90

🛠️ 문제 발생

쿠버네티스 클러스터에서 NFS를 활용한 Persistent Volume (PV) 및 Persistent Volume Claim (PVC) 설정 후, Pod가 NFS를 정상적으로 마운트하지 못하고 ContainerCreating 상태에서 멈추는 문제가 발생했다.

 

📌 증상

# kubectl get pods
NAME           READY   STATUS              RESTARTS   AGE
nfs-test-pod   0/1     ContainerCreating   0          14m

 

📌 상세 로그 확인 (kubectl describe pod nfs-test-pod)

# kubectl describe pod nfs-test-pod

Events:
  Type     Reason       Age                 From               Message
  ----     ------       ----                ----               -------
  Warning  FailedMount  40s (x15 over 15m)  kubelet            MountVolume.SetUp failed for volume "nfs-pv" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs 192.168.207.202:/DATA /var/lib/kubelet/pods/.../volumes/kubernetes.io~nfs/nfs-pv
Output: mount: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.
dmesg(1) may have more information after failed mount system call.

 

🕵️‍♂️ 원인 분석

1️⃣ NFS 클라이언트 패키지가 설치되지 않음

  • Pod가 배포된 워커 노드(kube-worker-204)에서 NFS를 마운트하려 했지만 mount.nfs 프로그램이 없음.

2️⃣ NFS 서버에서 올바르게 /DATA 디렉토리를 공유하지 않음

  • NFS 서버(192.168.207.202)에서 /DATA가 클라이언트에 올바르게 공유되지 않았을 가능성이 있음.

3️⃣ 방화벽 문제로 인해 NFS 연결이 차단됨

  • NFS 서버와 워커 노드 간 포트(2049, 111, 20048 등)가 차단되어 있을 가능성이 있음.

 

🔥 해결 과정

✅ 1️⃣ NFS 클라이언트 패키지 설치

📌 각 워커 노드(kube-worker-204, kube-worker-205)에서 실행

# apt-get update && apt-get install -y nfs-common

# cat /etc/fstab
```
192.168.207.202:/DATA  /DATA  nfs4  defaults,_netdev  0  0
```

 

🎉 최종 결과 및 분석

# k get po
NAME           READY   STATUS    RESTARTS   AGE
nfs-test-pod   1/1     Running   0          20m

# k get po -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP              NODE              NOMINATED NODE   READINESS GATES
nfs-test-pod   1/1     Running   0          54m   10.110.33.129   kube-worker-204   <none>           <none>
  • /DATA 마운트 확인
# kubectl exec -it nfs-test-pod -- sh
/ # df -Th
Filesystem           Type            Size      Used Available Use% Mounted on
overlay              overlay       236.3G      7.7G    216.5G   3% /
tmpfs                tmpfs          64.0M         0     64.0M   0% /dev
192.168.207.202:/DATA
                     nfs4          249.0G      6.5G    229.8G   3% /DATA
/dev/sda2            ext4          236.3G      7.7G    216.5G   3% /etc/hosts
/dev/sda2            ext4          236.3G      7.7G    216.5G   3% /dev/termination-log
/dev/sda2            ext4          236.3G      7.7G    216.5G   3% /etc/hostname
/dev/sda2            ext4          236.3G      7.7G    216.5G   3% /etc/resolv.conf
shm                  tmpfs          64.0M         0     64.0M   0% /dev/shm
tmpfs                tmpfs           3.7G     12.0K      3.7G   0% /var/run/secrets/kubernetes.io/serviceaccount
tmpfs                tmpfs           1.9G         0      1.9G   0% /proc/asound
tmpfs                tmpfs           1.9G         0      1.9G   0% /proc/acpi
tmpfs                tmpfs          64.0M         0     64.0M   0% /proc/kcore
tmpfs                tmpfs          64.0M         0     64.0M   0% /proc/keys
tmpfs                tmpfs          64.0M         0     64.0M   0% /proc/latency_stats
tmpfs                tmpfs          64.0M         0     64.0M   0% /proc/timer_list
tmpfs                tmpfs           1.9G         0      1.9G   0% /proc/scsi
tmpfs                tmpfs           1.9G         0      1.9G   0% /sys/firmware
/ #

 

# kubectl get pvc
NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
nfs-pvc   Bound    nfs-pv   10Gi       RWX            nfs-storage    <unset>                 99m

# kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
nfs-pv   10Gi       RWX            Retain           Bound    default/nfs-pvc   nfs-storage    <unset>                          99m

# kubectl exec -it nfs-test-pod -- df -h
Filesystem                Size      Used Available Use% Mounted on
overlay                 236.3G      7.7G    216.5G   3% /
tmpfs                    64.0M         0     64.0M   0% /dev
192.168.207.202:/DATA
                        249.0G      6.5G    229.8G   3% /DATA
/dev/sda2               236.3G      7.7G    216.5G   3% /etc/hosts
/dev/sda2               236.3G      7.7G    216.5G   3% /dev/termination-log
/dev/sda2               236.3G      7.7G    216.5G   3% /etc/hostname
/dev/sda2               236.3G      7.7G    216.5G   3% /etc/resolv.conf
shm                      64.0M         0     64.0M   0% /dev/shm
tmpfs                     3.7G     12.0K      3.7G   0% /var/run/secrets/kubernetes.io/serviceaccount
tmpfs                     1.9G         0      1.9G   0% /proc/asound
tmpfs                     1.9G         0      1.9G   0% /proc/acpi
tmpfs                    64.0M         0     64.0M   0% /proc/kcore
tmpfs                    64.0M         0     64.0M   0% /proc/keys
tmpfs                    64.0M         0     64.0M   0% /proc/latency_stats
tmpfs                    64.0M         0     64.0M   0% /proc/timer_list
tmpfs                     1.9G         0      1.9G   0% /proc/scsi
tmpfs                     1.9G         0      1.9G   0% /sys/firmware

 

현재 아래와 같은 상태이다. 

1️⃣ NFS 서버(192.168.207.202)의 /DATA 디렉터리가 PV(nfs-pv)로 설정됨.
2️⃣ PVC(nfs-pvc)가 PV(nfs-pv)를 요청하여 Bound됨.
3️⃣ Pod(nfs-test-pod)가 PVC(nfs-pvc)를 사용하여 /DATA에 마운트함.
4️⃣ 결과적으로, nfs-test-pod 내부에서 /DATA 경로를 사용하면 192.168.207.202:/DATA에 직접 접근 가능.

┌───────────────────────────────────────────┐
│             NFS 서버 (192.168.207.202)    │
│                 /DATA                     │
└───────────────────────────────────────────┘
           ▲ (마운트)
           │
┌───────────────────────────────────────────┐
│   Persistent Volume (PV) - nfs-pv         │
│   - StorageClass: nfs-storage             │
│   - Access Mode: RWX                      │
│   - Capacity: 10Gi                        │
│   - Reclaim Policy: Retain                │
│   - Bound to PVC: nfs-pvc                 │
└───────────────────────────────────────────┘
           ▲ (바운드)
           │
┌───────────────────────────────────────────┐
│   Persistent Volume Claim (PVC) - nfs-pvc │
│   - 요청한 용량: 10Gi                     │
│   - Access Mode: RWX                      │
│   - Bound to PV: nfs-pv                   │
└───────────────────────────────────────────┘
           ▲ (바운드)
           │
┌───────────────────────────────────────────┐
│  Pod - nfs-test-pod                       │
│  - PVC: nfs-pvc                           │
│  - 볼륨 마운트 경로: /DATA                │
│  - /DATA → 192.168.207.202:/DATA (NFS)    │
└───────────────────────────────────────────┘