智汇华云 您所在的位置:网站首页 iscsi服务器挂载 智汇华云

智汇华云

2023-04-09 00:26| 来源: 网络整理| 查看: 265

实验

可以通过iSCSI将远程的磁盘分区映射到本地之后就可以像使用本地磁盘一样,将该远程盘进行格式化以及挂载操作,给容器使用。

我们 通过 scsi-target-utils来实现iSCSI target,将主机上的/dev/sdb磁盘分区作为Lun,如下图所示

之后在kubernetes的node节点上需要事先安装iscsi-initiator-utils,并且设置对应的initiatorname,如果开启了acl认证,需要将node节点的initiatorname添加到acl里面。

之后创建一个pod,其中指定一个存在的iscsi lun对接信息如下

之后可以看到远程的卷被成功的挂载到node上,被容器所使用

Volume.iscsi说明

pod的spec中可以在volumes.iscsi中指定对接信息包括如下

源码分析

挂载阶段

pod调度到某个node上,之后由kubelet中的volumemanager完成对于volume attach&mount操作,核心代码位于kubernetes/pkg/volume/iscsi目录下,在volume挂载的过程中,会首先调用WaitForAttach完成挂载流程,SetUpDevice挂载到某个容器所对应的目录。iscsiAttacher.WaitForAttach流程如图所示:

Step1: 通过iscsiadm -m iface -l b. InitIface -o show获取对应的iscsiTransport,如果不额外指定的话b. InitIface为default,iscsiTransport为tcp.

Step2: 如果pod的定义中指定iscsi.initiatorName ,则需要cloneIface, 指定iscsi.initiatorName需要与node的不一致,这样当开启ACL initiatorName控制的时候,pod可以运行在不同的节点上。

Step3: 基于iqn号获取lock,主要解决的场景为相同target下不同volume同时挂载或者login与logout操作并发进行,这个锁引入的目的主要是为了后面volume在Detach的时候,需要根据isSessionBusy来判断是否需要logout,断开node与target的所有链接。

Step4:GetISCSIPortalHostMapForTarget主要根据target iqn获取到login到该target上的scsi hosts number, 返回的结构为

通过这个map的引入后面用于判断是否需要login,还是直接通过scanOneLun来发现接入的Lun,避免没有必要的login操作。scanOneLun之后会发现挂载到node上的device。

Step5: 根据volomeMode的类型是直接的PersistentVolumeBlock还是PersistentVolumeFileSystem模式,二者的区别在于是否需要对device进行格式化,创建文件系统,之后创建globalPDPath目录,目录位置采用如下格式

/var/lib/kubelet/plugins/kubernetes.io/iscsi/ /{ifaceName}/{portal-some_iqn-lun-lun_id},之后持久化的iscsi disk元数据到globalPDPath目录下iscsi.json,元数据主要用于DetachVolume的时候会涉及到,内容如下所示:

在WaitForAttach 阶段完成了device远端挂载、格式化以及挂载到globalPDPath目录下,SetUpDevice流程较为简单主要是将globalPDPath mount –bind到容器对应的目录,之后对目录进行SetVolumeOwnership操作。

卸载阶段

pod销毁的时候,会由kubelet完成volume的umount&detach操作,核心代码位于kubernetes/pkg/volume/iscsi目录下,主要完成umount node上的挂载信息,之后根据globalPDPath目录下iscsi.json元数据信息来完成TearDownDevice断开device,之后清理掉globalPDPath。

Step1: 根据mntPath挂载点信息获得device盘符,之后Unmount掉挂载点信息

Step2:loadISCSI中根据mntPath获得该iscsi挂载信息的元数据信息,其中包括iqn iface volName initiatorName等信息

Step3: deleteDevices中通过对device进行echo 1> delete操作,删除掉盘符

Step4:基于iqn获取targetLocks.LockKey,之后判断该target在node上是否存在其他的盘挂载,如果没有存在,则进行iscsi logout操作,断开node与target之后的连接

总结

In-tree下的iscsi方式为容器提供iscsi的存储类似于静态供应,需要事先系统管理员创建好后端的iscsi存储,之后容器提供指定对应的配置来使用。对于已经存在支持iscsi协议挂载的后端存储,并且不具备动态功能csi插件的场景下具有一定的使用场景。

往期推荐 ·

智汇华云 | 华云数据计算团队在内存大页动态分配的探索与实践

智汇华云 | ArSDN之分布式路由及浮动IP简介

智汇华云 | 混合IT下的云管理套件核心技术解析

智汇华云 | kata container virtiofs测试和技术分析 返回搜狐,查看更多



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有