无法在 CoreOS 上的 rkt 容器内启动 iscsiadm
Can't start iscsiadm inside rkt container on CoreOS
我正在尝试使用 instruction here 在 CoreOS 上的 rkt 中使用 iscsi 插件启动 kubernetes。问题是 iscsi 守护进程无法启动,所以我收到错误消息,无法将卷挂载到 pod。
iscsi_util.go:112] iscsi: failed to sendtargets to portal 156.64.48.59:3260
error: iscsiadm: Failed to load module tcp: No such file
iscsiadm: Could not load transport tcp.Dropping interface default.
[disk_manager.go:50] failed to attach disk
iscsi: failed to setup
kubelet.go:1780] Unable to mount volumes for pod ...
我试图将整个 /dev/ 挂载到 rkt 容器中,但它对我没有帮助。
为了获得可行的解决方案,我必须:
将 RKT 选项更改为
RKT_OPTS=--volume=iscsiadm,kind=host,source=/usr/sbin/iscsiadm --mount volume=iscsiadm,target=/usr/sbin/iscsiadm --volume=resolv,kind= host,source=/etc/resolv.conf --mount volume=resolv,target=/etc/resolv.conf --volume=etcs,kind=host,source=/etc/iscsi/ --mount volume= etcs,target=/etc/iscsi --volume=iscsid,kind=host,source=/usr/sbin/iscsid --mount volume=iscsid,target=/usr/sbin/iscsid
sudo modprobe iscsi_tcp
提前初始化 tcp 模块,因为 it needed for ascsiadm. But CoreOS loads modules "as-needed" 并且由于某些原因它在 rkt 容器中不起作用。
echo "InitiatorName=iqn.2001-12.com.mycompany:volume.openiscsi-initiator" > /etc/iscsi/initiatorname.iscsi
至少一些启动器名称is needed。
我还在 CoreOS 中填充了 the bug,也许存在更好的解决方法。
看起来他们不会将其默认添加到 CoreOS 中,但您可以将其添加到点火配置中。 iscsid-initiatorname.service
将为您创建名称。
"storage": {
"files": [{
"filesystem": "root",
"path": "/etc/modules-load.d/iscsi_tcp.conf",
"contents": { "source": "data:iscsi_tcp" },
"mode": 420
}]
},
"systemd": {
"units": [{
"enable": true,
"name": "iscsid-initiatorname.service"
}]
}
这仅适用于全新安装或全新根磁盘,因此创建文件,执行 modprode iscsi_tcp
,如果您不想从干净的根开始,则执行 systemctl start iscsid-initiatorname.service
。
然后,如果您使用的是 kubernetes,只需设置卷映射:
kubelet:
extra_args:
feature-gates: MountPropagation=true
extra_binds:
- /usr/sbin/iscsiadm:/usr/sbin/iscsiadm
- /usr/sbin/iscsid:/usr/sbin/iscsid
- /etc/iscsi/:/etc/iscsi/
这让 OpenEBS 在我的裸机 CoreOS 集群上运行。
我正在尝试使用 instruction here 在 CoreOS 上的 rkt 中使用 iscsi 插件启动 kubernetes。问题是 iscsi 守护进程无法启动,所以我收到错误消息,无法将卷挂载到 pod。
iscsi_util.go:112] iscsi: failed to sendtargets to portal 156.64.48.59:3260
error: iscsiadm: Failed to load module tcp: No such file
iscsiadm: Could not load transport tcp.Dropping interface default.
[disk_manager.go:50] failed to attach disk
iscsi: failed to setup
kubelet.go:1780] Unable to mount volumes for pod ...
我试图将整个 /dev/ 挂载到 rkt 容器中,但它对我没有帮助。
为了获得可行的解决方案,我必须:
将 RKT 选项更改为
RKT_OPTS=--volume=iscsiadm,kind=host,source=/usr/sbin/iscsiadm --mount volume=iscsiadm,target=/usr/sbin/iscsiadm --volume=resolv,kind= host,source=/etc/resolv.conf --mount volume=resolv,target=/etc/resolv.conf --volume=etcs,kind=host,source=/etc/iscsi/ --mount volume= etcs,target=/etc/iscsi --volume=iscsid,kind=host,source=/usr/sbin/iscsid --mount volume=iscsid,target=/usr/sbin/iscsid
sudo modprobe iscsi_tcp
提前初始化 tcp 模块,因为 it needed for ascsiadm. But CoreOS loads modules "as-needed" 并且由于某些原因它在 rkt 容器中不起作用。
echo "InitiatorName=iqn.2001-12.com.mycompany:volume.openiscsi-initiator" > /etc/iscsi/initiatorname.iscsi
至少一些启动器名称is needed。
我还在 CoreOS 中填充了 the bug,也许存在更好的解决方法。
看起来他们不会将其默认添加到 CoreOS 中,但您可以将其添加到点火配置中。 iscsid-initiatorname.service
将为您创建名称。
"storage": {
"files": [{
"filesystem": "root",
"path": "/etc/modules-load.d/iscsi_tcp.conf",
"contents": { "source": "data:iscsi_tcp" },
"mode": 420
}]
},
"systemd": {
"units": [{
"enable": true,
"name": "iscsid-initiatorname.service"
}]
}
这仅适用于全新安装或全新根磁盘,因此创建文件,执行 modprode iscsi_tcp
,如果您不想从干净的根开始,则执行 systemctl start iscsid-initiatorname.service
。
然后,如果您使用的是 kubernetes,只需设置卷映射:
kubelet:
extra_args:
feature-gates: MountPropagation=true
extra_binds:
- /usr/sbin/iscsiadm:/usr/sbin/iscsiadm
- /usr/sbin/iscsid:/usr/sbin/iscsid
- /etc/iscsi/:/etc/iscsi/
这让 OpenEBS 在我的裸机 CoreOS 集群上运行。