欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在CentOS7上安装NFS server并在Kubernetes Pod中挂载NFS卷

程序员文章站 2022-05-11 21:12:38
...

在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-utilsrpcbind:

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-utilsrpcbind:

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卷进行抽象后再使用。

参考文档:

参考文档

  • 《鸟哥的Linux私房菜:服务器篇》