kubernetes - Kubernetes Pod无法挂载iSCSI卷:无法获取iscsi磁盘的任何路径

标签 kubernetes iscsi

我想在this example中将iSCSI卷添加到Pod中。我已经在Debian服务器上准备了一个iSCSI目标,并在所有工作节点上安装了open-iscsi。我还确认我可以使用命令行工具(即仍然在Kubernetes外部)将iSCSI目标安装在工作节点上。这很好。为简单起见,目前尚没有身份验证(CHAP),并且目标上已经存在ext4文件系统。

我现在想让Kubernetes 1.14将相同的iSCSI目标安装到带有以下 list 的Pod中:

---
apiVersion: v1
kind: Pod
metadata:
  name: iscsipd
spec:
  containers:
  - name: iscsipd-ro
    image: kubernetes/pause
    volumeMounts:
    - mountPath: "/mnt/iscsipd"
      name: iscsivol
  volumes:
  - name: iscsivol
    iscsi:
      targetPortal: 1.2.3.4 # my target
      iqn: iqn.2019-04.my-domain.com:lun1
      lun: 0
      fsType: ext4
      readOnly: true

根据kubectl describe pod,此方法在初始阶段(SuccessfulAttachVolume)有效,但随后失败(FailedMount)。确切的错误消息显示为:
Warning  FailedMount ... Unable to mount volumes for pod "iscsipd_default(...)": timeout expired waiting for volumes to attach or mount for pod "default"/"iscsipd". list of unmounted volumes=[iscsivol]. list of unattached volumes=[iscsivol default-token-7bxnn]
Warning  FailedMount ... MountVolume.WaitForAttach failed for volume "iscsivol" : failed to get any path for iscsi disk, last err seen:
Could not attach disk: Timeout after 10s

如何进一步诊断和克服此问题?

更新在与this相关的问题中,解决方案包括使用数字IP地址作为目标。但是,这对于我的情况没有帮助,因为我已经使用了targetPortal形式的1.2.3.4(具有
也尝试使用端口号3260和不使用端口号3260)。

UPDATE 停止scsid.service和/或open-iscsi.service(建议here)也没有任何区别。

UPDATE 如果pkg/volume/iscsi/iscsi_util.go失败,显然会在 waitForPathToExist(&devicePath, multipathDeviceTimeout, iscsiTransport) 中触发该错误。但是,奇怪的是,当触发该文件时,节点上实际上存在devicePath(/dev/disk/by-path/ip-...-iscsi-...-lun-...)上的文件。

更新我已使用此过程来定义用于这些测试目的的简单iSCSI目标:
pvcreate /dev/sdb
vgcreate iscsi /dev/sdb
lvcreate -L 10G -n iscsi_1 iscsi
apt-get install tgt
cat >/etc/tgt/conf.d/iscsi_1.conf <<EOL
<target iqn.2019-04.my-domain.com:lun1>
  backing-store /dev/mapper/iscsi-iscsi_1
  initiator-address 5.6.7.8 # my cluster node #1
  ... # my cluster node #2, etc.
</target>
EOL
systemctl restart tgt
tgtadm --mode target --op show

最佳答案

这可能是由于您的iscsi目标的身份验证问题。

如果尚未使用CHAP身份验证,则仍然必须禁用身份验证。
例如,如果使用targetcli,则可以运行以下命令来禁用它。

$ sudo targetcli
/> /iscsi/iqn.2003-01.org.xxxx/tpg1 set attribute authentication=0 # will disable auth
/> /iscsi/iqn.2003-01.org.xxxx/tpg1 set attribute generate_node_acls=1 # will force to use tpg1 auth mode by default

如果这对您没有帮助,请共享您的iscsi目标配置,或指导您遵循。

关于kubernetes - Kubernetes Pod无法挂载iSCSI卷:无法获取iscsi磁盘的任何路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920173/

相关文章:

python - APScheduler 会跳过作业并在其他时间运行

c++ - 如何使用 C++ 在 Windows 和 Linux 中获取 iSCSI 启动器名称

docker - 在 Kubernetes 设置期间保持我的服务器 O/S 的静态 IP 地址

Spring Cloud Kubernetes - 启用配置重新加载时 Spring boot 无法启动

docker - openshift 集群中 Kaniko 作业的权限被拒绝

linux - iscsiadm 无法登录除 3260 之外的任何端口

ubuntu - 重新启动时 iSCSI 出错。错误的默认值

linux - open-iscsi 是如何用 3.x 内核编译的?

networking - iSCSI 数据包 header

kubernetes - 无需从teamcity进行解码即可获取密码的任何其他选项