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) │
└───────────────────────────────────────────┘
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] etcd 데몬 설정 및 문제해결 (0) | 2025.03.18 |
---|---|
[Kubernetes] 로드밸런싱을 위한 Control Plane 중설 및 HAProxy 장애 처리 (0) | 2025.03.17 |
[Kubernetes] containerd VS CRI-O 차이점 (0) | 2025.03.01 |
[Kubernetes] Kubernetes NodePort란? (0) | 2025.02.28 |
[Kubernetes] YAML에서 Deploy(Deployment)와 Service의 차이 (0) | 2025.02.26 |