一、安装nfs
#master节点安装nfs
[root@k8s-master nginx]# yum -y install nfs-utils
#创建nfs目录
[root@k8s-master nginx]# mkdir -p /nfs/data/
#修改权限
[root@k8s-master nginx]# chmod -R 777 /nfs/data
#编辑export文件,这个文件就是nfs默认的配置文件
[root@k8s-master nginx]# vim /etc/exports
/nfs/data *(rw,no_root_squash,sync)
#配置生效
[root@k8s-master nginx]# exportfs -r
#查看生效
[root@k8s-master nginx]# exportfs
/nfs/data <world>
#启动rpcbind、nfs服务
[root@k8s-master nginx]# systemctl restart rpcbind && systemctl enable rpcbind
[root@k8s-master nginx]# systemctl restart nfs && systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
#查看 RPC 服务的注册状况
[root@k8s-master nginx]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
#showmount测试
[root@k8s-master nginx]# showmount -e 192.168.0.66
Export list for 192.168.0.66:
/nfs/data *
二、创建pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
namespace: default
labels:
pv: nfs-pv
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
server: 192.168.0.66
path: "/nfs/data/nginx" #NFS目录,需要该目录在NFS上存在,所以需提前创建nginx目录
然后执行pv命令
[root@k8s-master nfs]# kubectl apply -f pv.yaml
persistentvolume/nfs-pv created
[root@k8s-master nfs]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv 100Mi RWX Retain Available 7s
三、创建pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Mi #容量
selector:
matchLabels:
pv: nfs-pv #关联pv 的label,key/value要一致
执行创建命令
[root@k8s-master nfs]# kubectl apply -f pvc.yaml
persistentvolumeclaim/nfs-pvc created
[root@k8s-master nfs]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs-pvc Bound nfs-pv 100Mi RWX
[root@k8s-master nfs]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv 100Mi RWX Retain Bound default/nfs-pvc
四、创建pod并使用pvc存储资源 (以nginx为例)
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-nginx
namespace: default
spec:
selector:
matchLabels:
app: nfs-nginx
replicas: 2
template:
metadata:
labels:
app: nfs-nginx
spec:
containers:
- name: nginx-web
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: html
volumes:
- name: html
persistentVolumeClaim:
claimName: nfs-pvc
---
#service
apiVersion: v1
kind: Service
metadata:
name: nfs-nginx
namespace: default
spec:
type: NodePort
ports:
- port: 80
protocol: TCP
targetPort: 80
nodePort: 31681
selector:
app: nfs-nginx
执行创建pod命令
[root@k8s-master nfs]# kubectl apply -f nginx.yaml
[root@k8s-master nfs]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nfs-nginx-7695b95db6-l74zx 1/1 Running 0 12s 10.244.2.93 k8s-node1 <none> <none>
nfs-nginx-7695b95db6-qcqp8 1/1 Running 0 12s 10.244.1.22 k8s-node2 <none> <none>
五、验证nfs服务器上对应得文件内容(自行验证)