yum install nfs-utils rpcbind
nfs-utils所有节点都需要安装
启动
systemctl restart rpcbind nfs
在主机节点编辑
vim /etc/exports
写入:/mnt/share *(rw)
(如果没有这个目录那就mkdir一下)
然后把权限给到最大
chmod 777 /mnt/share
showmount -e nfs服务器ip
可查看挂载目录
更多关于nfs操作
https://www.xuebuyuan.com/1490537.html
遇到clnt_create: RPC: Program not registered
用这个方法重启可解决
解决办法:
1.在服务器上先停止rpcbind,
service rpcbind stop
然后在停止nfs
service nfs stop
最后在重启rpcbind和nfs,一定要按顺序启动和停止
service rpcbind start
service nfs start
K8S中pod在挂载volume时出现FailedMount错误(exit status 32)
Warning FailedMount 2m42s kubelet, k8s-node01 MountVolume.SetUp failed for v…
这个问题跟nfs有关,可能是挂载出现错误
vim pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.134.131
path: "/mnt/share"
这里的server是服务器ip地址,即主机ip
应用
kubectl apply -f pv1.yaml
查看
kubectl get pv
kubectl describe pv nfs
vim pvc1.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs
spec:
accessModes:
- ReadWriteMany
storageClassName: manual
resources:
requests:
storage: 1Gi
应用
kubectl apply -f pvc1.yaml
查看
kubectl get pvc
vim nginx-nfs.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-nfs
labels:
role: web-frontend
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
volumeMounts:
- name: nfs
mountPath: "/usr/share/nginx/html" #这个是挂载到pod里的某个目录
volumes:
- name: nfs
persistentVolumeClaim:
claimName: nfs
cd /mnt/share
vim test
kubectl exec -it nginx-nfs bsh
在挂载的目录里查看有没有那个文件
cat /usr/share/nginx/html/test
删除这个pod,在master上查看是否还有这个文件。以此证明pvc不受pod的删除而受影响
kubectl delete pod nginx-nfs
kubectl apply -f nginx-nfs.yaml
看看那个文件还存在
对于这种基于NFS的持久化PV存储,就是在主机一端的本地目录里建立NFS远程目录,挂载到pod的目录里,然后pod被调度到某个节点上,从而实现无论在哪个节点里pod都能访问这个主机目录,并且能添加删除文件,即存储到远程主机的磁盘中,而且不会随着这个pod的存在与否影响这个文件目录,即实现持久化存储。
参考教程
https://my.oschina.net/u/3866149/blog/3056436