NFS 서버 구축하고 쿠버네티스 NFS 볼륨 마운트하기 (PV,PVC,NFS)
NFS 서버를 외부에 구축하고 쿠버네티스 환경에서 이를 통해 NFS 볼륨을 만들어 pod를 배포합니다.
Jul 02, 2024
본 테스트에서는 아래와 같이 설정합니다.
192.168.1.130 (NFS 서버)
192.168.1.114 (NFS 클라이언트, 마스터노드)
192.168.1.115 (NFS 클라이언트, 워커노드)
192.168.1.116 (NFS 클라이언트, 워커노드)
NFS 서버에서 공유할 디렉토리 경로 및 이름 :
/mnt/shared
NFS 서버 세팅
- NFS 서버 구축하기
sudo apt-get update
sudo apt-get install -y nfs-common nfs-kernel-server rpcbind portmap
root@k8s-masterjw:~# sudo apt-get install -y nfs-common nfs-kernel-server rpcbind portmap
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'rpcbind' instead of 'portmap'
The following additional packages will be installed:
keyutils libnfsidmap1
Suggested packages:
watchdog
The following NEW packages will be installed:
keyutils libnfsidmap1 nfs-common nfs-kernel-server rpcbind
0 upgraded, 5 newly installed, 0 to remove and 126 not upgraded.
Need to get 521 kB of archives.
After this operation, 1,973 kB of additional disk space will be used.
Get:1 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libnfsidmap1 amd64 1:2.6.1-1ubuntu1.2 [42.9 kB]
Get:2 http://kr.archive.ubuntu.com/ubuntu jammy/main amd64 rpcbind amd64 1.2.6-2build1 [46.6 kB]
Get:3 http://kr.archive.ubuntu.com/ubuntu jammy/main amd64 keyutils amd64 1.6.1-2ubuntu3 [50.4 kB]
Get:4 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 nfs-common amd64 1:2.6.1-1ubuntu1.2 [241 kB]
Get:5 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 nfs-kernel-server amd64 1:2.6.1-1ubuntu1.2 [140 kB]
Fetched 521 kB in 2s (300 kB/s)
Selecting previously unselected package libnfsidmap1:amd64.
(Reading database ... 110340 files and directories currently installed.)
Preparing to unpack .../libnfsidmap1_1%3a2.6.1-1ubuntu1.2_amd64.deb ...
Unpacking libnfsidmap1:amd64 (1:2.6.1-1ubuntu1.2) ...
Selecting previously unselected package rpcbind.
Preparing to unpack .../rpcbind_1.2.6-2build1_amd64.deb ...
Unpacking rpcbind (1.2.6-2build1) ...
Selecting previously unselected package keyutils.
Preparing to unpack .../keyutils_1.6.1-2ubuntu3_amd64.deb ...
Unpacking keyutils (1.6.1-2ubuntu3) ...
Selecting previously unselected package nfs-common.
Preparing to unpack .../nfs-common_1%3a2.6.1-1ubuntu1.2_amd64.deb ...
Unpacking nfs-common (1:2.6.1-1ubuntu1.2) ...
Selecting previously unselected package nfs-kernel-server.
Preparing to unpack .../nfs-kernel-server_1%3a2.6.1-1ubuntu1.2_amd64.deb ...
Unpacking nfs-kernel-server (1:2.6.1-1ubuntu1.2) ...
Setting up libnfsidmap1:amd64 (1:2.6.1-1ubuntu1.2) ...
Setting up rpcbind (1.2.6-2build1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service → /lib/systemd/system/rpcbind.service.
Created symlink /etc/systemd/system/sockets.target.wants/rpcbind.socket → /lib/systemd/system/rpcbind.socket.
Setting up keyutils (1.6.1-2ubuntu3) ...
Setting up nfs-common (1:2.6.1-1ubuntu1.2) ...
Creating config file /etc/idmapd.conf with new version
Creating config file /etc/nfs.conf with new version
Adding system user `statd' (UID 115) ...
Adding new user `statd' (UID 115) with group `nogroup' ...
Not creating home directory `/var/lib/nfs'.
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-client.target → /lib/systemd/system/nfs-client.target.
Created symlink /etc/systemd/system/remote-fs.target.wants/nfs-client.target → /lib/systemd/system/nfs-client.target.
auth-rpcgss-module.service is a disabled or a static unit, not starting it.
nfs-idmapd.service is a disabled or a static unit, not starting it.
nfs-utils.service is a disabled or a static unit, not starting it.
proc-fs-nfsd.mount is a disabled or a static unit, not starting it.
rpc-gssd.service is a disabled or a static unit, not starting it.
rpc-statd-notify.service is a disabled or a static unit, not starting it.
rpc-statd.service is a disabled or a static unit, not starting it.
rpc-svcgssd.service is a disabled or a static unit, not starting it.
rpc_pipefs.target is a disabled or a static unit, not starting it.
var-lib-nfs-rpc_pipefs.mount is a disabled or a static unit, not starting it.
Setting up nfs-kernel-server (1:2.6.1-1ubuntu1.2) ...
Created symlink /etc/systemd/system/nfs-client.target.wants/nfs-blkmap.service → /lib/systemd/system/nfs-blkmap.service.
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /lib/systemd/system/nfs-server.service.
nfs-mountd.service is a disabled or a static unit, not starting it.
nfsdcld.service is a disabled or a static unit, not starting it.
Creating config file /etc/exports with new version
Creating config file /etc/default/nfs-kernel-server with new version
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.7) ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
- shared 폴더 생성 후 적절한 권한 부여
root@k8s-masterjw:~# cd /mnt
root@k8s-masterjw:/mnt# ls
root@k8s-masterjw:/mnt# mkdir shared
root@k8s-masterjw:/mnt# sudo chmod 777 shared
root@k8s-masterjw:/mnt# ls
shared
- /mnt/shared에 접글할 IP정보를 설정
접근할 IP = 192.168.1.0/24 대역에 있는 모든 IP
sudo echo '/mnt/shared 192.168.1.0/24(rw,sync,no_subtree_check)' >> /etc/exports
- NFS 서비스 적용 및 재시작
$ sudo exportfs -a
$ sudo systemctl restart nfs-kernel-server
쿠버네티스 환경에서 NFS pod 만들기
본 테스트에서는 NFS 서버를 구축하고 동일 네트웍에 다른 환경(쿠버네티스)에서 NFS 볼륨을 만들어 Pod를 생성합니다.
사전 준비 사항
NFS 볼륨을 만들어 pod를 생성하기 위해서는,
쿠버네티스 환경(NFS 클라이언트)에서는
nfs-common
를 설치해야 합니다.각 노드마다
apt-get install nfs-common
진행하여 설치를 합니다. PV 생성
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-storage
labels:
type: nfs
spec:
capacity:
storage: 10Gi
accessModes: ["ReadWriteMany"]
nfs:
server: 192.168.1.130
path: /mnt/shared # NFS server's shared path
PVC 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-storage-claim
spec:
storageClassName: ""
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 4Gi
selector:
matchExpressions:
- key: type
operator: In
values:
- nfs
Nginx Pod 생성 (NFS Volume)
간단한 테스트 파일은 아래와 같이 구성해볼 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: nfs-volume
mountPath: /usr/share/nginx/html
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-storage-claim
NFS 확인하기
- 192.168.1.130(NFS서버) 의 /mnt/shared 경로에 index.html 파일 생성


- 192.168.1.114 (쿠버네티스 마스터노드) 에서
kubectl exec pod/nginx-pod -it -- /bin/bash
로 접속 하여 생성한 index.html 파일 확인

Nginx pod의 /usr/share/nginx/html 경로가 130번 서버의 /mnt/shared 경로와 공유된 것을 확인할 수 있습니다.
Share article