一、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

五、其它

  1. 总结下来iSCSI作为k8s的存储,并不是很好用。目前 觉得唯一的好处是可以预先填充数据到iSCSI卷中。

  2. 使用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 
Logo

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

更多推荐