搞NFS存储时候发现如下问题:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 5m1s default-scheduler Successfully assigned dev/volume-nfs to node2
Warning FailedMount 2m58s kubelet Unable to attach or mount volumes: unmounted volumes=[logs-volume], unattached volumes=[logs-volume kube-api-access-k2tc8]: timed out waiting for the condition
Warning FailedMount 50s (x10 over 5m1s) kubelet MountVolume.SetUp failed for volume "logs-volume" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs 192.168.75.129:/root/data/nfs /var/lib/kubelet/pods/7fbfb3b5-f1e4-4eec-8a52-ecbf21dbf014/volumes/kubernetes.io~nfs/logs-volume
Output: mount.nfs: access denied by server while mounting 192.168.75.129:/root/data/nfs
Warning FailedMount 41s kubelet Unable to attach or mount volumes: unmounted volumes=[logs-volume], unattached volumes=[kube-api-access-k2tc8 logs-volume]: timed out waiting for the condition
问题:为卷"logs-volume"挂载失败,退出状态为32。挂载命令为:mount,挂载参数为:-t nfs 192.168.75.129:/root/data/nfs /var/lib/kubelet/pods/7fbfb3b5-f1e4-4eec-8a52-ecbf21dbf014/volumes/kubernetes.io~nfs/logs-volume。输出为:mount.nfs: access denied by server while mounting 192.168.75.129:/root/data/nfs。警告:FailedMount 41s kubelet Unable to attach or mount volumes: unmounted volumes=[logs-volume], unattached volumes=[kube-api-access-k2tc8 logs-volume]: timed out waiting for the condition。
已经检查如下:
1. 检查NFS服务器的配置,确保NFS共享目录已正确配置并且具有适当的权限。确保NFS服务器允许来自Kubernetes节点的访问。
2. 确保Kubernetes节点具有正确的网络访问权限,可以从Kubernetes节点ping通NFS服务器。
3. 检查Kubernetes节点上的防火墙设置,确保防火墙未阻止与NFS服务器的通信。
4. 检查Kubernetes节点上的NFS挂载点目录是否存在,并且具有适当的权限。
5. 重新尝试挂载NFS卷,确保挂载命令和参数正确,并且NFS服务器配置正确。
进行处理:
1、重新搭建NFS实验环境
#在master安装
[root@master ~]# yum install -y nfs-utils rpcbind
#在每个node安装
[root@node1 ~]# yum install -y nfs-utils
[root@node2 ~]# yum install -y nfs-utils
2、准备共享目录
[root@master ~]# mkdir -p /root/data/nfs
3、修改权限
#修改权限
[root@master ~]# chmod -R 777 /root/data/nfs
4、暴露主机
将共享目录以读写权限暴露给192.168.75.0/24网段中的所有主机
[root@master ~]# vim /etc/exports
/root/data/nfs 192.168.75.0/24(rw,no_root_squash)
192.168.75.0/24:这个是运行访问NFS的IP范围,根据自己的k8s主机网段设置。
(rw,no_root_squash,no_all_squash,sync):
可以设定的参数主要有以下这些:
rw:可读写的权限;
ro:只读的权限;
no_root_squash:登入到NFS主机的用户如果是root,该用户即拥有root权限;
root_squash:登入NFS主机的用户如果是root,该用户权限将被限定为匿名使用者nobody;
all_squash:不管登陆NFS主机的用户是何权限都会被重新设定为匿名使用者nobody。
anonuid:将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。
anongid:同anonuid,但是变成group ID就是了!
sync:资料同步写入存储器中。
async:资料会先暂时存放在内存中,不会直接写入硬盘。
insecure:允许从这台机器过来的非授权访问。
5、启动nfs服务&&设置服务随机自启
[root@master ~]# systemctl start nfs
[root@master ~]# systemctl enable nfs
[root@master ~]# systemctl start rpcbind
rpcbind是一个系统服务,它负责在NFS(Network File System)和其他RPC(Remote Procedure Call)服务之间建立连接。当客户端需要访问NFS服务器上的文件时,它会先与rpcbind建立连接,然后rpcbind会将客户端的请求转发给NFS服务器,从而实现文件的访问和共享。
因此,rpcbind在NFS中起着连接和协调的作用,是NFS服务的重要组成部分。
2、创建volume-nfs.yml文件
apiVersion: v1
kind: Pod
metadata:
name: volume-nfs
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
volumeMounts:
- name: logs-volume
mountPath: /var/log/nginx
- name: busybox
image: busybox:1.30
command: ["/bin/sh","-c","tail -f /logs/access.log"]
volumeMounts:
- name: logs-volume
mountPath: /logs
volumes:
- name: logs-volume
nfs:
server: 192.168.75.129
path: /root/data/nfs
1、创建pod
[root@master ~]# kubectl create -f volume-nfs.yml
2、查看pod详细信息
[root@master ~]# kubectl get po volume-nfs -n dev -o wide
3、查看master节点的nfs目录
可以看到数据已经同步到挂载目录中
4、访问测试
[root@master ~]# curl 10.122.104.30:80
查看日志内容