背景
Kubernetes 的卷分为临时卷跟持久卷,临时卷顾名思义就是容器销毁后也会被清理。持久卷则不受容器销毁的影响。说白了卷其实就是一个目录,里面存放一些与应用相关的数据文件或资源文件什么的。在使用卷时只需要在 .spce.volumes
字段中设置为Pod提供的卷。并在.spce.conatiner[*].volumeMounts
字段中声明卷在容器中的挂载位置即可。
Volume 常用支持的卷
这里有很多的关于存储卷的选择,我个人还是比较喜欢用 NFS。所以接下来我将使用NFS来做为 Kubernetes cluster 的存储卷选择。
NFS
在正式开始之前假设您已经拥有一个集群,并且有一个 master 节点名为k8s-master
,两个Node节点k8s-node01, k8s-node02。接下来我们在节点k8s-master上来安装 NFS 服务,数据目录:/home/k8s
安装配置 nfs
# Debian apt-get -y install nfs-common nfs-kernel-server rpcbind # Centos yum -y install nfs-utils rpcbind
共享目录设置权限:
mkdir /home/k8s
chmod 755 /home/k8s
配置 nfs,nfs 的默认配置文件在 /etc/exports 文件下,在该文件中添加下面的配置信息:
vim /etc/exports
/var/k8s *(rw,sync,no_root_squash)
配置说明:
- /home/k8s:是共享的数据目录
*
:表示任何人都有权限连接,当然也可以是一个网段,一个 IP,也可以是域名- rw:读写的权限
- sync:表示文件同时写入硬盘和内存
- no_root_squash:当登录 NFS 主机使用共享目录的使用者是 root 时,其权限将被转换成为匿名使用者,通常它的 UID 与 GID,都会变成 nobody 身份
当然 nfs 的配置还有很多,感兴趣的同学可以在网上去查找一下。
- 启动服务 nfs 需要向 rpc 注册,rpc 一旦重启了,注册的文件都会丢失,向他注册的服务都需要重启
注意启动顺序,先启动 rpcbind
systemctl start rpcbind.service
systemctl enable rpcbind
systemctl status rpcbind
然后启动 nfs 服务:
# Debian
systemctl start nfs-server
systemctl enable nfs-server
systemctl status nfs-server
# Centos
$ systemctl start nfs.service
$ systemctl enable nfs
$ systemctl status nfs
另外我们还可以通过下面的命令确认下:
rpcinfo -p|grep nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 3 udp 2049 nf
查看具体目录挂载权限:
cat /var/lib/nfs/etab
/home/k8s *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)
到这里我们就把 nfs server 给安装成功了,接下来我们在节点k8s-node01, k8s-node02上来安装 nfs 的客户端来验证下 nfs
# Debian
apt-get -y install nfs-common rpcbind
# Centos
$ yum -y install nfs-utils rpcbind
安装完成后,和上面的方法一样,先启动 rpc、然后启动 nfs.
- 挂载数据目录 客户端启动完成后,我们在客户端来挂载下 nfs 测试下:
首先检查下 nfs 是否有共享目录:
showmount -e k8s-master
Export list for k8s-master:
/home/k8s
然后我们在客户端上新建目录:
mkdir -p /root/course/kubeadm/data
将 nfs 共享目录挂载到上面的目录:
mount -t nfs k8s-master:/home/k8s /root/course/kubeadm/data
挂载成功后,在客户端上面的目录中新建一个文件,然后我们观察下 nfs 服务端的共享目录下面是否也会出现该文件:
# k8s-node01 exec command
touch /root/course/kubeadm/data/node01.txt
# k8s-node02 exec command
touch /root/course/kubeadm/data/node02.txt
然后在 nfs 服务端查看:
ls -ls /home/k8s/
total 0
0 -rw-r--r-- 1 root root 0 Jul 18 16:27 node01.txt
0 -rw-r--r-- 1 root root 0 Jul 18 16:27 node02.txt
如果上面出现了的文件,那么证明我们的 nfs 挂载成功了。
要在客户端每次启动时自动挂载NFS,可以编辑/etc/fstab,添加一行:
k8s-master:/home/k8s /root/course/kubeadm/data nfs rsize=8192,wsize=8192,timeo=14,intr