跳至主要内容

iSCSI 卷

在將資料儲存在 iSCSI 卷上的 Rancher 啟動的 Kubernetes 叢集中,你可能會遇到 kubelet 無法自動連接 iSCSI 卷的問題。這種故障可能是由於涉及 iSCSI 啟動器工具的不相容問題所致。你可以透過在叢集的每個節點上安裝 iSCSI 啟動器工具來解決此問題。

將資料儲存在 iSCSI 卷上的 Rancher 啟動的 Kubernetes 叢集利用 iSCSI 啟動器工具,該工具嵌入在 kubelet 的 rancher/hyperkube Docker 映像中。從每個 kubelet(即_啟動器_),該工具會發現並啟動與 iSCSI 卷(即_目標_)的會話。然而,在某些情況下,安裝在啟動器和目標上的 iSCSI 啟動器工具版本可能不匹配,導致連接失敗。

如果你遇到此問題,可以透過在叢集的每個節點上安裝啟動器工具來解決。你可以透過登入叢集節點並輸入以下命令之一來安裝 iSCSI 啟動器工具:

平台套件名稱安裝命令
Ubuntu/Debianopen-iscsisudo apt install open-iscsi
RHELiscsi-initiator-utilsyum 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。