在CentOS7上安装NFS server并在Kubernetes Pod中挂载NFS卷
文章目录
在CentOS7上安装NFS server并在Kubernetes Pod中挂载NFS卷
资源规划
- NFS server IP为
172.31.240.127
- NFS client IP段为
172.31.240.0/24
(Kuberntes worker node IP也是该网段)
安装NFS server
安装nfs-utils
和rpcbind
:
yum install nfs-utils rpcbind -y
创建nfsupload:nfsupload
的Linux user/group用来给NFS client往共享目录中写入数据。
# 先检查210的user id和group id是否存在
cat /etc/passwd | grep 210
# 创建"nfsupload/nfsupload"的User/Group,且user id和group id为210
# -M, --no-create-home do not create the user's home directory
groupadd -g 210 nfsupload
useradd -g 210 -u 210 -M nfsupload
创建要共享的目录的根目录,并将该目录的所有者设置为nfsupload:nfsupload
:
mkdir -p /mnt/data/nfs
chown -R nfsupload:nfsupload /mnt/data/nfs
编辑/etc/exports
,添加共享根目录的共享规则:
# 限制只有172.31.240.0/24才可以访问
# rw 有读写权限
# all_squash 所有NFS client的用户名都会被压缩成匿名用户
# anonuid=210,anongid=210 匿名用户的user id和group id为210
/mnt/data/nfs 172.31.240.0/24(rw,all_squash,anonuid=210,anongid=210)
运行exportfs -r
更新全部共享规则。
启动NFS server服务:
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
安装NFS client
安装nfs-utils
和rpcbind
:
yum install nfs-utils rpcbind -y
NFS client不需要启动nfs和rpcbind服务。
检查NFS server的共享规则:
showmount -e 172.31.240.127
挂载NFS server的共享根目录:
mkdir -p /mnt/nfsdata
mount -t nfs 172.31.240.127:/mnt/data/nfs /mnt/nfsdata
运行df -hk
查看挂载情况。
可以运行
umount -l /mnt/nfsdata
来卸载目录。
测试NFS
在NFS client上,测试往共享根目录写入文件:
cd /mnt/nfsdata
touch test.txt
在NFS server上,查看文件:
cd /mnt/data/nfs
ls -ltra
可以看到文件可以创建成功,且user/group都为nfsupload
。
在Kubernetes Pod中使用NFS卷示例
在NFS server的共享根目录下创建子目录:
mkdir -p /mnt/data/nfs/kudard/data
如果共享目录不存在,在创建Pod时挂载会失败,Pod会一直处在ContainerCreating状态。可通过
kubectl describe pods/<pod-name>
查看详细错误信息。
在Pod yaml文件中定义名为kuard-data
的nfs volume:
spec:
volumes:
- name: "kuard-data"
nfs:
path: "/mnt/data/nfs/kudard/data"
server: "172.31.240.127"
说明:
-
nfs.path
为NFS server上的共享目录 -
nfs.server
为NFS server的IP或主机名,或FQDN
在Pod yaml中挂载kuard-data
的nfs volume
volumeMounts:
- mountPath: "/data"
name: "kuard-data"
完整的Pod yaml参见:https://github.com/cookcodeblog/k8s-yaml/blob/master/up-running/pod/kuard-pod-vol-nfs.yaml
在Pod创建时,Pod作为NFS client会通过节点宿主机的网络,去连接NFS server来挂载目录,并可往目录中读写文件。
这种在Pod中使用NFS卷的方法,需要在在Pod yaml中写死NFS server的IP地址,不是推荐的做法。推荐使用Kubernetes PVC来对NFS卷进行抽象后再使用。
参考文档:
-
https://kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim
-
https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs
参考文档
- 《鸟哥的Linux私房菜:服务器篇》
下一篇: DH加密通信python实现