服务端操作
#服务端安装
yum install -y nfs-utils rpcbind#启动服务 并设置开启启动
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs-server && systemctl enable nfs-server#创建共享目录
mkdir -p /root/data/nfs
#设置权限
chmod 666 /root/data/nfs
#修改 NFS 配置文件
vim /etc/exports
/root/data/nfs *(rw,sync,insecure,no_subtree_check,no_root_squash)
#载入配置
exportfs -rv
#查看 NFS 服务项 rpc 服务器注册的端口列表
rpcinfo -p localhost
#服务端看下是否正确加载了设置的 /etc/exports 配置
showmount -e localhost
#关闭防火墙
systemctl stop firewalld.service
客户端操作
#客户端安装
yum install -y nfs-utilsmkdir /nfs_share
#设置开机自动挂载
echo "10.0.2.21:/root/data/nfs /nfs_share nfs defaults 0 0" >> /etc/fstab#客户端查看能否正常挂载 10.0.2.21 是nfs服务端ip
showmount -e 10.0.2.21#客户端执行绑定目录注意:一定挂载根目录例如: /share
mount 10.0.2.21:/root/data/nfs /nfs_share#客户端在/nfs_share里写入文件测试
静态PVC测试
#测试pod使用nfs存储
apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pvnamespace: test-ng
spec:capacity:storage: 1Gi # 你想要的存储大小accessModes:- ReadWriteMany # 允许多个节点读写nfs:path: /root/data/nfs # NFS 共享的路径server: 10.0.2.21 # NFS 服务器地址persistentVolumeReclaimPolicy: Retain---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvcnamespace: test-ng
spec:accessModes:- ReadWriteManyresources:requests:storage: 1Gi---
apiVersion: apps/v1
kind: Deployment
metadata:name: nfsdemo-v1namespace: test-nglabels:app: nfsdemoversion: v1
spec:replicas: 1selector:matchLabels:app: nfsdemoversion: v1template:metadata:labels:app: nfsdemoversion: v1spec:containers:- name: nfsdemoimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:stable-alpineports:- containerPort: 80volumeMounts:- name: nfs-storagemountPath: "/usr/share/nginx/html" # 容器内的挂载路径volumes:- name: nfs-storagepersistentVolumeClaim:claimName: nfs-pvc
---
apiVersion: v1
kind: Service
metadata:name: nfsdemo-servicenamespace: test-ng
spec:type: NodePort # 设置为 NodePort 类型selector:app: nfsdemo # 与 Deployment 中的 Pod 匹配的标签ports:- port: 80 # 服务的端口targetPort: 80 # Pod 中容器的端口
安装nfs-subdir-external-provisioner
下载
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
安装nfs-subdir-external-provisioner
kubectl create ns nfs-provisionerhelm install nfs-subdir-external-provisioner . \--set storageClass.name=nfs-sc \--set nfs.server=10.0.2.21 \--set nfs.path=/root/data/nfs \-n nfs-provisioner
注:需要替换国内镜像
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/sig-storage/nfs-subdir-external-provisioner
卸载nfs-subdir-external-provisioner
helm uninstall nfs-subdir-external-provisioner \-n nfs-provisioner
动态PVC测试
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: test-claim
spec:storageClassName: "nfs-sc"accessModes:- ReadWriteManyresources:requests:storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:name: test-pod
spec:containers:- name: test-podimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:stable-alpinevolumeMounts:- name: nfs-pvcmountPath: "/usr/share/nginx/html"volumes:- name: nfs-pvcpersistentVolumeClaim:claimName: test-claim
参考:
https://blog.csdn.net/qq_49288154/article/details/143956580
https://www.cnblogs.com/nb-blog/p/17970547
https://blog.csdn.net/ltgsoldier1/article/details/142534752