k8s之PV & PVC
PV : PersistentVolume(持久化卷)
它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS 等,都是通过插件机制完成与共享存储的对接。
PVC:PersistentVolumeClaim(持久化卷声明),PVC 是用户存储的一种声明。
PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可 以请求特定的存储空间和访问模式。
以NFS作为示例:
先在各节点安装nfs服务:
1、关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
2、安装配置nfs
yum -y install nfs-utils rpcbind
3、设置共享目录的权限,chmod 755 $path (假设这里的path为 /data/k8s)【server端需配置】
配置NFS: 默认配置文件是 /etc/exports ,添加以下信息
/data/k8s *(rw,sync,no_root_squash)
配置说明:
/data/k8s:是共享的数据目录
* :表示任何人都有权限连接,当然也可以是一个网段,一个 IP,也可以是域名
rw:读写的权限
sync:表示文件同时写入硬盘和内存
no_root_squash:当登录 NFS 主机使用共享目录的使用者是 root 时,其权限将被转换成为匿名
使用者,通常它的 UID 与 GID,都会变成 nobody 身份
启动nfs服务:先启动 rpcbind 再启动 nfs
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs
systemctl enable nfs
可以通过以下指令可以确认nfs是否启动成功:
systemctl status nfs
查看具体目录挂载权限: cat /var/lib/nfs/etab
showmount -e $server_ip 查看nfs 服务端的是否有共享目录。【共享文件的服务器为server端,其他的为client端】
mount -t $server_ip:$path $client_path 挂载到指定路径
可在client端 df -h 查看挂载目录
使用yaml文件创建pv
kubectl get pv 可查看pv
使用yaml文件创建pvc,这里可以看到pv与pvc不存在任何的绑定的行为,是因为在k8s中pvc会自动去匹配适合的pv。
主要是依据 labels、accessmodes、storage进行自动匹配的。
【注意】这里要求pv满足或超过 pvc的条件才会去匹配的。
譬如:pv的storage为2Gi; pv的storage为1Gi; 在 labels、accessmodes 符合的情况下,是可以自动匹配绑定的
pvc已经绑定好pv了,就在pod中进行挂载了。
以下通过创建deployment 和service进行测试。