iSCSI 卷
在将数据存储在 iSCSI 卷上的 Rancher 启动的 Kubernetes 集群中,你可能会遇到 kubelet 无法自动连接 iSCSI 卷的问题。成此问题的原因很可能是 iSCSI 启动器工具不兼容。你可以在每个集群节点上安装 iSCSI 启动器工具来解决此问题。
将数据存储到 iSCSI 卷的由 Rancher 启动的 Kubernetes 集群使用 iSCSI 启动器工具,该工具嵌入在 kubelet 的 rancher/hyperkube
Docker 镜像中。该工具从每个 kubelet(即 initiator)发现并发起与 iSCSI 卷(即 target)的会话。但是,在某些情况下,initiator 和 target 上安装的 iSCSI 启动器工具的版本可能不匹配,从而导致连接失败。
如果你遇到此问题,你可以在集群中的每个节点上安装启动器工具来解决该问题。你可以通过登录到集群节点并输入以下其中一个命令来安装 iSCSI 启动器工具:
平台 | 包名 | 安装命令 |
---|---|---|
Ubuntu/Debian | open-iscsi | sudo apt install open-iscsi |
RHEL | iscsi-initiator-utils | yum install iscsi-initiator-utils -y |
在节点上安装启动器工具后,编辑集群的 YAML,编辑 kubelet 配置以挂载 iSCSI 二进制文件和配置,如下面的示例所示。
在更新 Kubernetes YAML 以挂载 iSCSI 二进制文件和配置之前,请确保已将
open-iscsi
(deb)或iscsi-initiator-utils
(yum)安装到你的集群节点。如果在绑定挂载创建到你的 Kubernetes YAML 之前 未安装此包,Docker 将自动在每个节点上创建目录和文件,并且不允许包安装成功。下面的示例 YAML 不适用于 K3s,仅适用于 RKE 集群。由于 K3s kubelet 不在容器中运行,因此不需要添加额外的绑定。但是,所有 iSCSI 工具仍必须安装在你的 K3s 节点上。
services:
kubelet:
extra_binds:
- "/etc/iscsi:/etc/iscsi"
- "/sbin/iscsiadm:/sbin/iscsiadm"
如果你使用的是 RHEL 7.9,你需要挂载文件 /usr/lib64/libcrypto.so.10
,如下例所示。
services:
kubelet:
extra_binds:
- "/etc/iscsi:/etc/iscsi"
- "/sbin/iscsiadm:/sbin/iscsiadm"
- "/usr/lib64/libcrypto.so.10:/usr/lib/libcrypto.so.10"
如果你使用的是 RHEL 8.6,你需要挂载文件 /usr/lib64/libcrypto.so.1.1
,如下例所示。
services:
kubelet:
extra_binds:
- "/etc/iscsi:/etc/iscsi"
- "/sbin/iscsiadm:/sbin/iscsiadm"
- "/usr/lib64/libcrypto.so.1.1:/usr/lib/libcrypto.so.1.1"
要验证 iscsiadm 是否正常工作,你可以在任何节点上运行命令 docker exec kubelet iscsiadm --version
。