Kubernetes接入iSCSI存储
本文简单介绍了k8s集群集成外部iSCSI存储的过程。数据存储使用的是浪潮AS5300G2设备。该设备是以iSCSI接口对外提供存储服务。
一、iSCSI使用背景
公司目前有几台浪潮Inspur AS5300G2的存储设备,该设备是以iSCSI接口对外提供存储服务,本文简单介绍了k8s集群集成外部iSCSI存储。AS5300G2提供了web管理界面来简化了部分操作,如果没有界面的,则需要查询相关指令来实现相关功能。
- 工作主机:指k8s的工作节点
- Target:指iSCSI存储设备
二、客户端配置
1. 安装iscsi-initiator-utils
这个工具用来管理工作主机与Target的发现与会话。
yum install iscsi-initiator-utils -y
2. 在Target上添加主机
下图中名称可以自定义,iSCSI端口来自工作主机,可以通过以下命令在工作主机服务器上获得
[root@kube-s5 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:4ea02bcfe858
其中主机kube-s5的iSCSI端口即 iqn.1994-05.com.redhat:4ea02bcfe858
![image.png](https://img-blog.csdnimg.cn/img_convert/13e69ea728a5af754fadc42f66664944.png#align=left&display=inline&height=240&margin=[object Object]&name=image.png&originHeight=480&originWidth=1052&size=30183&status=done&style=none&width=526)
将所有的k8s工作主机都加入到Target上。
3. 工作主机登录到Target
这里会用到三个命令,所有的工作节点确认都可以登录的Target
- 发现Target
iscsiadm -m discovery -t sendtargets -p 172.16.28.141
172.16.28.141是存储设备的IP
- 登录Target
iscsiadm -m node --targetname iqn.2004-12.com.inspur:mcs.as5300g2.node1 -p 172.16.28.141:3260 -l
iqn.2004-12.com.inspur:mcs.as5300g2.node1是Target上控制器的名称
172.16.28.141:3260 是Target IP地址,默认端口为3260
- 查看登录状态
iscsiadm -m session –R
查看登录状态
4. Target创建Volume并映射到工作主机
![image.png](https://img-blog.csdnimg.cn/img_convert/748c0ec4f72caba1a153ef2c2d203231.png#align=left&display=inline&height=272&margin=[object Object]&name=image.png&originHeight=544&originWidth=940&size=44994&status=done&style=none&width=470)
在Target上完成卷的创建后,我们映射到所有的工作节点,这样操作的好处是,无论Pod被调度到哪个工作节点,都可以与Target完成链接。
三 、创建PVC
apiVersion: v1
kind: PersistentVolume
metadata:
name: test
spec:
capacity:
storage: 200Gi
accessModes:
- ReadWriteOnce
iscsi:
targetPortal: 172.16.28.141:3260 #Target IP:Port
iqn: iqn.2004-12.com.inspur:mcs.as5300g2.node1 # Target IQN
lun: 0 # 对应到Target LUN号
fsType: ext4
readOnly: false
---
apiVersion: "v1"
kind: PersistentVolumeClaim
metadata:
name: "test-pvc"
spec:
accessModes:
- "ReadWriteOnce" # iSCSI不支持ReadWriteMany
resources:
requests:
storage: "200Gi"
volumeName: "test"
storageClassName: "" #由于设置了默认的sc,需要强制指定为空,才会使用test pv去创建pvc
四、测试
在完成pvc的创建后,可以直接将卷挂载到Pod上。
# 在Pod所在的主机上执行lsblk
$ lsblk
sdc 8:32 0 200G 0 disk /var/lib/kubelet/pods/51275b0c-c77a-4072-9416-ec0274c54619/volumes/kubernetes.io~iscsi/test
五、其它
-
总结下来iSCSI作为k8s的存储,并不是很好用。目前 觉得唯一的好处是可以预先填充数据到iSCSI卷中。
-
使用dd测试iSCSI卷的读写的能力,在以8k的为一个块的情况下,Target设备的IOPS值在2000-2500,写速率在20M/s,这个速率和本地写相比,差距还是蛮大的,目前还不是很懂这个性能标准衡量。
# 写测试
time dd if=/dev/zero of=test.dbf bs=8k count=300000 oflag=direct
# 读测试
dd if=test.dbf bs=8k count=300000 of=/dev/null
更多推荐
所有评论(0)