在Docker中就有数据卷的概念,当容器删除时,数据也一起会被删除,想要持久化使用数据,需要把主机上的目录挂载到Docker中去,在K8S中,数据卷是通过Pod实现持久化的,如果Pod删除,数据卷也会一起删除,k8s的数据卷是docker数据卷的扩展,K8S适配各种存储系统,包括本地存储EmptyDir,HostPath,网络存储NFS,GlusterFS,PV/PVC等,下面就详细介绍下K8S的网络存储NFS如何实现。
1、部署NFS主机
- YN100-81.host.com
2、安装NFS服务端
#创建数据目录
mkdir /usr/local/kubernetes/volumes
#设置读写权限
chown -R 777 /usr/local/kubernetes/volumes
#安装NFS服务端
yum -y install rpcbind nfs-utils
#开启服务
systemctl start rpcbind nfs-server
配置NFS服务目录,打开/etc/exports,在尾部新增一行
#增加内容如下
/usr/local/kubernetes/volumes *(rw,sync,no_subtree_chexk,no_root_squash)
- /usr/local/kubernetes/volumes:作为服务目录向客户端开放
- *:表示任何ip都可以访问
- rw:读写权限
- sync:同步权限
- no_subtree_check:表示如果输出目录是一个子目录,NFS服务器不检查其父目录的权限
- no_root_squash:客户端连接服务端时如果使用root,那么也拥有对服务端分享的目录的root权限
当配置文件发生修改,重新载入配置
exportfs -ra
3、安装NFS客户端
实际应用中客户端与服务端是分开的,此步骤只是验证NFS是否可以用
yum -y install rpcbind nfs-utils
创建NFS客户端挂载目录
mkdir /usr/local/kubernetes/volumes-mount
将NFS的/usr/local/kubernetes/volumes目录挂载到NFS的客户端目录/usr/local/kubernetes/volumes-mount
mount 192.168.100.81:/usr/local/kubernetes/volumes /usr/local/kubernetes/volumes-mount
使用df命令查看挂载消息,输出信息如下:
[root@yn100-81 kubernetes]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 1003376 0 1003376 0% /dev
tmpfs 1013952 0 1013952 0% /dev/shm
tmpfs 1013952 1544 1012408 1% /run
tmpfs 1013952 0 1013952 0% /sys/fs/cgroup
/dev/sda3 19706880 2473192 17233688 13% /
/dev/sda1 201380 139492 61888 70% /boot
tmpfs 202792 0 202792 0% /run/user/0
192.168.100.81:/usr/local/kubernetes/volumes 19706880 2472960 17233920 13% /usr/local/kubernetes/volumes-mount
测试:在volumes-mount写入一个文件,查看volumes是否同步,如果文件同步了说明安装成功。
取消NFS客户端挂载
#注意不要直接在挂载目录执行,否则会报错
umount /usr/local/kubernetes/volumes-mount