×

K3S 配置 NFS 存储

hqy hqy 发表于2025-10-12 02:22:34 浏览6 评论0

抢沙发发表评论

       前言        


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.servernfs.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 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客