一、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
将所有的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并映射到工作主机
在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