概念

存储资源和 CPU 资源以及内存资源有很大不同,为了屏蔽底层的技术实现细节,让用户更加方便的使用,Kubernetes 便引入了 PV 和 PVC 两个重要的资源对象来实现对存储的管理。
PV 的全称是:PersistentVolume(持久化卷),是对底层的共享存储的一种抽象,PV 由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS 等,都是通过插件机制完成与共享存储的对接。
PVC 的全称是:PersistentVolumeClaim(持久化卷声明),PVC 是用户存储的一种声明,PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可以请求特定的存储空间和访问模式。对于真正使用存储的用户不需要关心底层的存储实现细节,只需要直接使用 PVC 即可。
但是通过 PVC 请求到一定的存储空间也很有可能不足以满足应用对于存储设备的各种需求,而且不同的应用程序对于存储性能的要求可能也不尽相同,比如读写速度、并发性能等,为了解决这一问题,Kubernetes 又为我们引入了一个新的资源对象:StorageClass,通过 StorageClass 的定义,管理员可以将存储资源定义为某种类型的资源,比如快速存储、慢速存储等,用户根据 StorageClass 的描述就可以非常直观的知道各种存储资源的具体特性了,这样就可以根据应用的特性去申请合适的存储资源了。

nfs

服务节点安装nfs

我们这里为了演示方便,决定使用相对简单的 NFS 这种存储资源,接下来我在我的外网节点101.34.86.4上来安装 NFS 服务,数据目录:/root/project-server/nfs

1. 关闭防火墙

  1. ~ systemctl stop firewalld.service
  2. ~ systemctl disable firewalld.service

2. 安装nfs服务

  1. ~ yum -y install nfs-utils rpcbind

共享目录设置权限:
  1. ~ chmod 755 /root/project-server/nfs

配置 nfs,nfs 的默认配置文件在 /etc/exports 文件下,在该文件中添加下面的配置信息:

  1. ~ vi /etc/exports
  2. /root/project-server/nfs *(rw,sync,no_root_squash)

配置说明:

  • /root/project-server/nfs:是共享的数据目录
  • *:表示任何人都有权限连接,当然也可以是一个网段,一个 IP,也可以是域名
  • rw:读写的权限
  • sync:表示文件同时写入硬盘和内存
  • no_root_squash:当登录 NFS 主机使用共享目录的使用者是 root 时,其权限将被转换成为匿名使用者,通常它的 UID 与 GID,都会变成 nobody 身份

当然 nfs 的配置还有很多,感兴趣的同学可以在网上去查找一下。

3. 启动pcbind 服务

启动服务 nfs 需要先向 rpc 注册,rpc 一旦重启了,注册的文件都会丢失,向它注册的服务都需要重启。(注意启动顺序,先启动 rpcbind)

  1. ~ systemctl start rpcbind.service
  2. ~ systemctl enable rpcbind
  3. ~ systemctl status rpcbind
  4. rpcbind.service - RPC Bind
  5. Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
  6. Active: active (running) since Tue 2021-12-07 11:47:20 CST; 11s ago
  7. Docs: man:rpcbind(8)
  8. Main PID: 708138 (rpcbind)
  9. Tasks: 1 (limit: 11505)
  10. Memory: 1.1M
  11. CGroup: /system.slice/rpcbind.service
  12. └─708138 /usr/bin/rpcbind -w -f
  13. Dec 07 11:47:20 VM-0-5-centos systemd[1]: Starting RPC Bind...
  14. Dec 07 11:47:20 VM-0-5-centos systemd[1]: Started RPC Bind.

4. 启动nfs服务

  1. ~ systemctl start nfs.service
  2. Failed to start nfs.service: Unit nfs.service not found. (如果出现此错误,改下服务名)
  3. ~ systemctl start nfs-server.service
  4. ~ systemctl enable nfs-server.service
  5. Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service /usr/lib/systemd/system/nfs-server.service.
  6. ~ systemctl status nfs-server.service
  7. nfs-server.service - NFS server and services
  8. Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  9. Drop-In: /run/systemd/generator/nfs-server.service.d
  10. └─order-with-mounts.conf
  11. Active: active (exited) since Tue 2021-12-07 13:59:36 CST; 6min ago
  12. Main PID: 726782 (code=exited, status=0/SUCCESS)
  13. Tasks: 0 (limit: 11505)
  14. Memory: 0B
  15. CGroup: /system.slice/nfs-server.service
  16. Dec 07 13:59:36 VM-0-5-centos systemd[1]: Starting NFS server and services...
  17. Dec 07 13:59:36 VM-0-5-centos systemd[1]: Started NFS server and services.

看到 Started 则证明 NFS Server 启动成功了,另外我们还可以通过下面的命令确认下:

  1. ~ rpcinfo -p|grep nfs
  2. 100003 3 tcp 2049 nfs
  3. 100003 4 tcp 2049 nfs
  4. 100227 3 tcp 2049 nfs_acl

查看具体目录挂载权限:

  1. ~ cat /var/lib/nfs/etab
  2. /root/project-server/nfs *(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 给安装成功了,接下来我们另外一个节点10.10.10.111上来安装 nfs 的客户端来验证下 nfs

工作节点安装nfs

安装方法同上,我这里就一股脑全部把命令列出来了

  1. ~ systemctl stop firewalld.service
  2. ~ systemctl disable firewalld.service
  3. ~ yum -y install nfs-utils rpcbind
  4. ~ systemctl start rpcbind.service
  5. ~ systemctl enable rpcbind.service
  6. ~ systemctl start nfs.service
  7. ~ systemctl enable nfs.service
  1. 挂载数据目录 客户端启动完成后,我们在客户端来挂载下 nfs 测试下:

首先检查下 nfs 是否有共享目录:

参考链接:https://www.qikqiak.com/k8s-book/docs/33.PV.html