智汇华云 | 通过iscsi为容器提供存储

介绍

将远端的存储通过iscsi协议为容器提供块存储,是一种通用的容器存储解决方案,下面将通过kubernetes中的in-tree方式来演示该例子,并分析其中linux是什么操作系统的细节。


                                            智汇华云 | 通过iscsi为容器提供存储

iSCSI协议是C/S架构,cl元数据ient是iSCSI initiator,server端为iSCSI target。iSCSI协议的主要功能是利用TCP客户端下载安装/IP网络,在主机系统(可称为initiator)和目标存储设备(称为target)之间进行大量的数据封装和可靠传输过程。主要分成两个组成部分,分别为iSCSI服务器端和iSCSI客户端

iSCSI服务器端 (iSCSI Target)

iSCSI服务器端为iSCSI targelinux系统t,这是I/O操作的执行者。主要是为了导出一个或多个块设备供启动者(initiator)使用,可以通过硬件和软件的方式来实现。在Linux中可以使用scsi-target-utils软件包来模拟实现。在使用iSCSI时,会在 iSCSI 储存设备上去建立 LUN(Logical Unit Number)来提供给具服务器端口备 iSCSIlinux Initiator 功能的主机来存取 数据的。LUN 好比是个“逻辑单位磁碟”,物理上linux必学的60个命令通常是由数个实体服务器端口什么意思磁碟( RAID 或 LVM 技术的技术实现)所组成。LUN ID由iSCSI目标设备(Target)分配。iSdc元数据CSI 启动端(Initiator)设备当前支持在每个目标设备(Target)中导出最多256个LUN。即最大支持16个target。

iSCSI target设备名称采用如下格式来命名:iqn..服务器端口怎么开放[:],需要事先进行服务器端开发配置,保证唯客户端英文一性。

iSCSI客户端 (iSCS服务器端口I Initiator)

iSCSI客户端为iSCSI initiator,这是I/O操作的发起者。是I/O操作的发起者,需要通过发现过程请求远端快设备。在Linux系统中可以通过软件来模拟,需要安装iSCSI设备驱动。如iscs服务器端开发i-initlinux常用命令iator-utils。

实验

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

我们通过scsi-target-utils来实现iSCSI target,将主机上的/dev/sd服务器端技术b磁系统/运维盘分区作为Lun,如下图所示

[root@iscsi-server yum.repos.d]# tgtadm -L iscsi -o show -m target

Target 1: iqn.2021-11.com服务器端开发.huayun.san:123456

System information:

Driver: iscsi

State: ready

I_T nexlinux常用命令us information:

LUN information:

LUN: 0

Type: controller

SCSI ID: IET00010000

SCSI SN: beaf10

Size: 0 MB, Block size: 1

Online: Yes

Removable media: No

Prevent removal: No

Readonly: No

SWP: No

Thin-pr服务器端开发ovisioning:元数据是什么 No

Backing st元数据是什么ore type: null

Backing store path: None

Backing store flags系统/运维:

LUN: 1

Type: disk

SCSI ID: IET00010001

Slinux常用命令CSI SN: beaf11

Size: 10737 MB, Block size: 512

Online: Yes

Removable media: No

Prevent removal: No

Readonly: N服务器端口怎么开放o

SWP: No

Thin-provisioni客户端;ng: No

Backing store tylinux删除文件命令pe: rdwr

Backin客户端打开g store path: /dev/vdb

Backing store flags:

A客户端无法与登录队列进行通讯ccount information:

ACL information:

之后在kubernetes的node节点上需要事先安装iscsi-initiator-utils,并且设置对应的linux常用命令initiatorname,如果开启了acl认证,需要将node节点的in客户端英文itia服务器端口怎么设置torname添加到acl里面。

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

apiVersion: v1

kind: Pod

metadata:

name: i系统运维工资一般多少scsipd

spec:

containers:

- name: iscsipd-星融元数据rw

ilinux系统安装mage: kubernetes/pause

volumeMounts:

- mountPath: "/mnt/iscsipd"

name: iscsipd-rw

volumes:

- name: iscsipd-rw

iscsi:

targetPortal: 10.0.客户端是什么意思啊2.15:3260

portals: ['10.0.2.16:3260', '10.0.2.17:3260']

iqn: iqn.2001-04.com.example:storage服务器端.kube.sys1.xyz

lun: 0

fsType: ex客户端和服务端区别t4

readOnly: true

之后客户端无法与登录队列进行通讯可以看到远程的卷被成功的挂载到node上,被容器所使用


                                            智汇华云 | 通过iscsi为容器提供存储


                                            智汇华云 | 通过iscsi为容器提供存储

Volume.iscsi说明

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

iscsi.iqn

required,string

Target iSCSI Qualified Name.

iscsi.lun

required,int32

iSCSI Target Lun number.

iscsi.targetPortal

required,string

iSCSI Tlinux必学的60个命令arget Portal. The Portal is either an IP or ip_add空间元数据r:port if the port is other than default (typically TCP ports 86linux命令0 and 3260).元数据名词解释

iscsi.chapAuthDiscovery

bolean

whether support iSCSI Discovery CHAP authentication

iscsi.chapAuthSession

boolean

whether su客户端打pport iSCSI Session CHAP aut元数据是什么意思hentication空间元数据

is客户端打开csi.fsType

stringlinux命令

Filesystem type of the v亚元数据olume that you walinux命令nt to mount. Tip:空间元数据 Ensure that the filesystem type is supported by元数据是什么 the host operating system. Examples: "ext4", "xfs", "ntfs". Implinuxlicitly i服务器端口信息怎么看nferred to be "ext4" if unspe客户端打cified.

iscsi.initiatorName

strin元数据名词解释g

Custom iSCSI Initiatolinux必学的60个命令r Name. If in服务器端技术itiatorName客户端已经从游戏服务器连接断开 is specified with iscsiInterface simultaneously, new iSCSI interface:will be created for the connection.

iscsi.iscsiInterface

string

iSCSI Interface Name that uses an iSCSI transportlinux. Defaults to 'defa服务器端和客户端区别ult' (tcp).

iscsi.portals

[]string

iSCSI Target Portal List. The portal is either an IP or ip_addr:po系统运维工程师rt if the port is other than default (typically TCP ports 860 and 3260).

iscsi.readOnly

boolean

ReadOnly helinux是什么操作系统re will force the ReadOnly setting in VolumeMounts. Defaults to false.

iscsi.secretRef元数据

LocalObjectReference

CHAP Secret for iSCSI target and initiator authe服务器端口怎么设置ntication

源码分析

挂载阶段

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


                                            智汇华云 | 通过iscsi为容器提供存储

Step1:客户端版本低怎样升级 通过iscsiadm -m iface -l b. InitIface -o show获取对应的iscsiTransport,如果不额外指定的话b. InitIface为default,is客户端无法与登录队列进行通讯csiTransport为tcp.

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

St空间元数据ep3: 基于iqn号获取lock,主要解决的场景为相同target下不同volume同时挂载或者login与l客户端打开ogout操作并发进行,这个锁引入的客户端;目的主要是为了后面volume在Detach的时候,需要客户端是什么意思啊根据isSessionBusy来判断是否需要logout,断开node与target的所有链接。

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

{

"1服务器端口怎么开放92.客户端无法与登录队列进行通讯168.30.7:3260": 2,

"192.168.30.8:3260": 3,

}

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

Step5: 根据volomeMode的类型是直接的PersistentVolumlinux是什么操作系统eBlock服务器端口号怎么看还是PersistentVolumeFileSy服务器端口怎么开放stem模式,二者的区别在于是否需要对device进行格式化,创建文件系统,之后创建globalPDPath目录,目录位置采用如下格式

/var/lib/kubelet/plugins/kubernetes.io/iscsi/ /{ifaceName}/{portal-some_iqn-lun-lun_id},之后持久化的iscsi disk元数据服务器端口号怎么看到globalPDPath目linux必学的60个命令录下iscsi.json,元数据主要用于DetachVolume的时候元数据管理会涉及到,内容如下所示:

{

"VolName":"iscsipd-rw",

"Portals":[

"178.104.162.58:3260",

],

"Iqn":"i客户端已经从游戏服务器连接断开qn.2021-11.com.客户端微信huayun.san:123456",

"Lun":"1",

"InitIface":"default",客户端微信

"Iface":"default",

"InitiatorName":"",

"M客户端已经从游戏服务器连接断开etricsProvider":null

}

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


                                            智汇华云 | 通过iscsi为容器提供存储

卸载linux操作系统基础知识阶段

pod销毁的时候,会由客户端打开kubelet完成volume的umount&detach操作,核心代码位服务器端口信息怎么看于kubernete元数据管理s/pkg/volume/iscsi目录下,主要完成umount node上的挂载信息,之后根据globalPDPath目录下iscsi.json元数据信息来完成TearDownDevice断开device,之后清理掉globalPDPath。


                                            智汇华云 | 通过iscsi为容器提供存储

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

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

Step3: del服务器端和客户端区别etlinux操作系统基础知识eDevices()中通过对device进行echo 1> delete操作,删除掉盘符

Step4: 基于iqn获取targetLocks.LockKey,之后判断该target在nod客户端已经从游戏服务器连接断开e上是否存在其他的盘挂载,如果没有存在,则进行iscsi logout操作,断开node与target之后的连接服务器端口怎么设置

总结

In-tree下的iscsi方式客户端是什么意思啊为容器提供iscsi的存储类似于静态供应,需要事先系统管亚元数据理员创建服务器端口怎么设置好后端的iscsi存储,之后容器提供指定对应的配置来使用。对于已经存在支持iscsi协议挂载的后端存储,并且不具备动态功能csi插件的场景下系统运维工程师具有一定的使用场景。