块设备

块,是指512或4K的数据块。
块设备,就是指数据读写是按块进行的。 相对应的字符设备,其数据读写是按字节进行的。

Ceph块设备

普通块设备,是数据线连接的真实硬盘;
Ceph块设备,是通过网络连接到Ceph集群中的一块存储区域,可以看做一块硬盘。
用户可以直接使用不含文件系统的块设备(裸设备),不经过OS缓存,性能更高,最常见的场景是数据库;也可以将其格式化成特定文件系统格式,由文件系统来组织管理存储空间,为用户提供更易用更丰富的数据读写接口。

K8S创建存储卷

K8S存储卷完整流程
完成流程如下:

  • 用户创建了一个包含 PVC 的 Pod,该 PVC 要求使用动态存储卷;
  • Scheduler 根据 Pod 配置、节点状态、PV 配置等信息,把 Pod 调度到一个合适的 Worker 节点上;
  • PV控制器 watch到该 Pod 使用的 PVC 处于 Pending 状态,于是调用 Volume Plugin(in-tree)创建存储卷,并创建 PV 对象(out-of-tree 由 External Provisioner 来处理);
  • AD控制器发现 Pod 和 PVC 处于待挂接状态,于是调用Volume Plugin挂接存储设备到目标 Worker 节点上
  • 在 Worker 节点上,Kubelet 中的 Volume Manager 等待存储设备挂接完成,并通过 Volume Plugin 将设备挂载到全局目录:/var/lib/kubelet/pods/[pod uid]/volumes/kubernetes.io~iscsi/[PV name](以 iscsi 为例);
  • Kubelet通过 Docker 启动 Pod 的 Containers,用 bind mount 方式将已挂载到本地全局目录的卷映射到容器中。

特别说明:
全局目录(global mount path)存在的目的:块设备在 Linux 上只能挂载一次,而在 K8s 场景中,一个 PV 可能被挂载到同一个 Node 上的多个 Pod 实例中。若块设备格式化后先挂载至 Node 上的一个临时全局目录,然后再使用 Linux 中的 bind mount 技术把这个全局目录挂载进 Pod 中对应的目录上,就可以满足要求。上述流程图中,全局目录即 /var/lib/kubelet/pods/[pod uid]/volumes/kubernetes.io~iscsi/[PV name]

存储卷Mount流程-1
存储卷Mount流程-2
挂载流程:

  • 记录RBD镜像元数据信息。比如image使用的池、是否加密等。记录在本地文件中。
  • map rbd image。对应rbd map /命令。
  • 创建挂载目录。对应mkdir调用。
  • 创建设备上的文件系统。mkfs.xfs或者mkfs.ext4程序创建文件系统,如果是裸块类型则该步跳过。
  • 挂载块设备。对应mount调用。

相关参考链接,感谢文章作者:
https://blog.csdn.net/weixin_32093689/article/details/112317035
https://www.jianshu.com/p/92d2c31d0f4b

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐