前言
NFS(Network File System)是一种由Sun Microsystems开发的网络文件系统协议,允许客户端计算机像访问本地文件一样访问远程服务器上的文件。
我家里放了一台DIY的群晖NAS主机,硬盘做了Raid1,为了更好的保护服务产生的数据,所以决定将K3S集群中部署的服务所产生的数据持久化群晖的硬盘中。
除了NFS,还有其他常见的有:

创建共享目录
在群晖中共享
在群晖中创建共享非常简单,只需要在控制面板中的共享文件夹里选择自己想要对外共享的目录,然后点击编辑最后在NFS权限中新增访问权限:

新增完成后,就能看到NFS的共享目录位置:

在Linux中共享
如果没有群晖,但是家里有Linux系统也是可以的,以Rocky Linux为例,执行下面的命令即可:
# 安装nfs 工具包sudo yum install nfs-utils -y# 创建一个工项目录sudo mkdir -p /data/nfsshare# 修改目录权限sudo chown nobody:nogroup /data/nfssharesudo chmod 755 /data/nfsshare
然后编辑共享配置文件:
sudo nano /etc/exports
在文件中添加以下内容:
/data/nfsshare *(rw,sync,no_subtree_check)
启动NFS服务并设置为开机自启:
sudo systemctl start nfs-serversudo systemctl enable nfs-server
连接测试
有了NFS共享目录,我们就可以进行测试连接是否正常,这个操作需要在所有的K3S集群的节点上安装nfs客户端,在所有节点中执行:
sudo yum install nfs-utils -y
然后创建一个临时目录进行挂载测试:
# 创建本地挂载点sudo mkdir -p /mnt/test# 执行挂载 IP需要替换成NFS的IP地址sudo mount -t nfs 192.168.1.10:/data/nfsshare /mnt/test
然后在创建的/mnt/test目录中写入数据或者创建一个目录,相应的在nfs服务器上的/data/nfsshare目录中就会出现刚才写入或者创建的数据。
在K3S中创建存储类
使用 K3S 的 Helm Controller 来部署 NFS 外部提供者,新建一个nfs.yaml文件:
vim /var/lib/rancher/k3s/server/manifests/nfs.yaml
然后写入下面的配置信息:
apiVersion: helm.cattle.io/v1kind: HelmChartmetadata: name: nfs namespace: defaultspec: chart: nfs-subdir-external-provisioner repo: https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner targetNamespace: default set: nfs.server: <NFS_SERVER_IP> nfs.path: /exported/path storageClass.name: nfs storageClass.reclaimPolicy: Retain
将对应的nfs.server、nfs.path补充完整后,保存并退出,K3S集群则会自动去部署所需要的服务,如果网络较好的情况下,应该能看到新增的名为nfs存储类。

第一个PVC
PVC(PersistentVolumeClaim)是用户对持久化存储的请求声明,它抽象了底层存储细节,使 Pod 无需关心存储具体实现,只需通过 PVC 申请所需容量与访问模式(如读写独占或共享),集群根据 PVC 自动绑定符合条件的 PersistentVolume(PV),实现存储资源的动态供给与解耦。
我们可以向新建的nfs存储类,申请100MB的空间给某个服务使用,则可以按照以下去申请:
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: nfsclaimspec: accessModes: - ReadWriteOnce storageClassName: nfs resources: requests: storage: 100Mi
然后应用申请:
sudo kubectl apply -f pvc.yaml
应用后就会多出一个名为nfsclaim的pvc:
sudo kubectl get pvc

让Pod持久化到NFS中
我们可以部署一个pod来读写nfs的存储:
apiVersion: v1kind: Podmetadata: name: nfs-test-podspec: containers: - name: test-container image: nginx:latest volumeMounts: - name: nfs-storage mountPath: "/usr/share/nginx/html" volumes: # 选择nfs存储 - name: nfs-storage persistentVolumeClaim: #pvc 的名称 claimName: nfsclaim
应用pod:
sudo kubectl apply -f pod.yaml
然后就可以看到在nfs服务器中的共享目录下多了一个空文件夹:

这个文件的命名规则如下:
${namespace}-${pvcName}-${pvName}本文链接:https://www.kinber.cn/post/5706.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
