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/sharedNFS 서버 세팅
- NFS 서버 구축하기
 
sudo apt-get updatesudo apt-get install -y nfs-common nfs-kernel-server rpcbind portmaproot@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 pathPVC 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-storage-claim
spec:
  storageClassName: ""
  accessModes: ["ReadWriteMany"]
  resources:
    requests:
      storage: 4Gi
  selector:
    matchExpressions:
      - key: type
        operator: In
        values:
          - nfsNginx 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-claimNFS 확인하기
- 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


