为什么我看到 UnresponsiveMountHelperContainerUtility 错误File Storage for VPC?

虚拟私有云

您的应用在使用基于区域的 dp2 配置文件 File Storage for VPC 进行传输中加密(EIT)时,会出现 UnresponsiveMountHelperContainerUtility 错误,导致应用无法正常运行。

使用 EIT(传输中加密)排查 VPC 文件存储系统无响应的问题。

您会看到类似以下示例的错误信息:

Code: UnresponsiveMountHelperContainerUtility,
Description: Failed to mount target because unable to make connection to mount helper container service.,
BackendError: Failed to send EIT based request. Failed with error:
  Post "http://unix/api/mount": dial unix /var/lib/ibmshare.sock: connect: no such file or directory,
Action: Check if EIT is enabled from storage operator.
  Run command 'kubectl edit configmap addon-vpc-file-csi-driver-configmap -n kube-system'
  and set 'ENABLE_EIT' flag to 'true'.

要么是您的 worker 池未启用 EIT,要么是您的应用 pod 被调度到了一个未启用 EIT 的 worker 池节点上。 以下条件之一成立:

  • ENABLE_EIT configmap 中 falseEIT_ENABLED_WORKER_POOLS 为空。
  • 该 Pod 运行的 worker 池未在 EIT_ENABLED_WORKER_POOLS 中列出。
  • 在 RHCOS 工作节点上,EIT 软件包已安装,但尚未重启节点以激活这些软件包。
  • 在 RHCOS 工作节点上,此前曾进行过一次卸载和重新安装的操作,期间未重启系统,导致该软件包处于“已分层”但损坏的状态。

解决问题

请按照以下步骤排查并解决问题原因。

检查哪些节点启用了 EIT

查看 file-csi-driver-status 配置映射,以确认哪些节点已安装EIT软件包,并确认配置是否正确。

  1. 描述该状态配置映射,以查看哪些节点启用了 EIT。 查找 EIT_ENABLED_WORKER_NODES 键,其中列出了工作池名称以及已完成EIT安装的节点的IP地址。

    oc describe cm file-csi-driver-status -n kube-system
    

    示例输出:

    EIT_ENABLED_WORKER_NODES:
    ----
    default:
    - 10.240.0.89
    - 10.240.0.87
    - 10.240.0.88
    

    空值表示尚未有任何节点安装 EIT。

  2. 请确认“ENABLE_EIT”已设置为“true”,并且目标工作池已列在“EIT_ENABLED_WORKER_POOLS”中。

    oc describe cm addon-vpc-file-csi-driver-configmap -n kube-system
    

请确认您的应用 Pod 正在支持 EIT 的节点上运行

列出您的 Pod,以查明它们被调度到了哪个节点,然后与上一节中的列表进行核对。

  1. 列出您的 Pod,并记录每个 Pod 运行的节点 IP 地址。

    oc get pods -A -o wide
    
  2. 将该节点的 IP 地址与步骤 1 中提供的 EIT_ENABLED_WORKER_NODES 列表进行核对。 如果该 Pod 位于该列表中未包含的节点上,请执行以下任一操作:

    • 使用节点选择器或亲和性规则,将 Pod 迁移到支持 EIT 的节点上。
    • 将包含该节点的 worker 池添加到 configmap 中的 EIT_ENABLED_WORKER_POOLS 中,并等待操作员完成协调。

针对不同操作系统的注意事项

所需软件包的安装方式因工作节点操作系统的不同而有所差异。

Ubuntu 以及 RHEL

无需重新引导。 这些软件包在安装完成后立即生效。 如果该节点的 IP 地址出现在 EIT_ENABLED_WORKER_NODES 中,且该 Pod 位于该节点上,则 EIT 应能正常工作。 如果套接字仍然缺失,请检查存储操作员 Pod 的日志,查看是否有安装错误。

oc logs -n kube-system -l app=ibm-vpc-file-csi-operator --tail=100

RHCOS / CoreOS

RHCOS 是一个不可变的操作系统。 除非重启节点,否则这些软件包不会生效,即使该节点的 IP 地址已经出现在 EIT_ENABLED_WORKER_NODES 中。

Node 显示为支持 EIT,但挂载仍失败

如果该节点的 IP 地址已列在 EIT_ENABLED_WORKER_NODES 中,但您仍然看到“UnresponsiveMountHelperContainerUtility”错误,则说明自安装软件包以来该节点尚未重启。 在重启之前,/var/lib/ibmshare.sock 套接字并不存在。

要确认是否即将重启,请在受影响的节点上运行以下命令:

  1. 使用 OpenShift 命令行界面(CLI)在受影响的节点上打开一个调试终端。

    oc debug node/<nodeName>
    
  2. 在调试 shell 中,检查 EIT 包是否已准备就绪但尚未激活。

    chroot /host
    rpm-ostree status
    

    在输出结果中,查找一个状态为“待处理”或“已分阶段”的图层,该图层中列出了 mount-helpermount-helper-container。 如果这些软件包出现在标记为“(booted)”的层中,则需要重启系统才能激活它们。

    以下示例输出显示了已准备好在下次启动时安装的软件包:

    State: idle
    Deployments:
      ● ostree-unverified-registry:...
        ...
        LayeredPackages: mount-helper mount-helper-container
      ostree-unverified-registry:...  (booted)
        ...
    

要解决此问题,请将受影响的 RHCOS 节点排空并重启,以避免对正在运行的工作负载造成影响。

  1. 通过匹配其 IP 地址,查找 EIT_ENABLED_WORKER_NODES 中列出的节点的 worker ID。

    ibmcloud ks workers --cluster CLUSTER_ID
    
  2. 在重启之前,清空该节点以安全地移除所有正在运行的 Pod。

    oc drain <node-name> --ignore-daemonsets --delete-emptydir-data
    
  3. 重新启动已断电的节点。

    ibmcloud ks worker reboot --cluster CLUSTER_ID --worker WORKER_ID
    
  4. 节点恢复联机并进入 Ready 状态后,请解除其锁定,以便工作负载能够再次被调度到该节点上。

    oc uncordon <node-name>
    

在 RHCOS 上安装作业时出现“已分层”错误,导致安装失败

如果您之前已在 RHCOS 工作池上卸载了 EIT,随后在未重启节点的情况下重新启用了它,则存储操作员的安装作业可能会失败,并显示类似以下的错误:

error: Packages are already layered: mount-helper-<version>.rpm mount-helper-container-<version>.rpm

出现这种情况是因为 rpm-ostree uninstall 仅将删除操作标记为待处理。 在重新启动之前,这些软件包仍会保留在当前的启动层中。 当操作员尝试再次运行 rpm-ostree install 时,系统会将这些软件包识别为已安装。

要解决此问题:

  1. 在重启之前,清空该节点以安全地移除所有正在运行的 Pod。

    oc drain <node-name> --ignore-daemonsets --delete-emptydir-data
    
  2. 重新启动 RHCOS 节点以应用待处理的卸载操作。

    ibmcloud ks worker reboot --cluster CLUSTER_ID --worker WORKER_ID
    
  3. 节点恢复联机并进入 Ready 状态后,请解除其锁定,以便工作负载能够再次被调度到该节点上。

    oc uncordon <node-name>
    
  4. 节点恢复联机后,之前安装的软件包已不复存在。 存储运营商会在下一个对账周期自动重新安装这些文件,通常只需几分钟。

  5. 在运维人员通过 EIT_ENABLED_WORKER_NODES 报告该节点已启用 EIT 功能后,请清空节点并重新启动,以激活新安装的软件包,然后解除该节点的隔离状态。

RHCOS 的卸载并重新安装完整流程为:卸载后重启 → 操作员重新安装 → 再次重启以激活。

向启用了 EIT 的工作池中添加了新节点

当一个新节点加入已列入 EIT_ENABLED_WORKER_POOLS 的工作池时,存储操作员会在该节点的下一个同步周期中自动在其上安装 EIT 软件包。 无需更新配置映射。

对于 RHCOS 节点,在安装完成后,您仍需清空节点并重启该节点,EIT 才会生效。 排空节点,重启该节点,然后解除其隔离状态,以减少对正在运行的工作负载的影响。 在节点重启之前,任何使用启用了 EIT 的 PVC 并被调度到该新节点的 Pod 都会遇到相同的“UnresponsiveMountHelperContainerUtility”错误。 Ubuntu (IKS) 和 RHEL (ROKS) 节点在添加新节点时无需重启。