為什麼我看到一個 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'.

這可能是因為您的工作匣未啟用 EIT,或是您的應用程式 Pod 被排程至一個未啟用 EIT 的工作匣節點上。 以下任一條件成立:

  • ENABLE_EIT configmap 中,falseEIT_ENABLED_WORKER_POOLS 為空。
  • 該 Pod 所執行的工作節點池並未列於 EIT_ENABLED_WORKER_POOLS 中。
  • 在 RHCOS 工作節點上,EIT 套件已安裝,但尚未重新啟動該節點以啟用這些套件。
  • 在 RHCOS 工作節點上,先前曾執行過一輪卸載與重新安裝的循環,期間未重新開機,導致套件處於損壞的「已分層」狀態。

解決問題

請按照以下步驟來找出並解決問題原因。

檢查哪些節點已啟用 EIT

檢視 file-csi-driver-status 配置映射,以確認哪些節點已安裝 EIT 套件,並確認配置是否正確。

  1. 請描述該 ConfigMap 的狀態,以查看哪些節點已啟用 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 的節點。
    • 將包含該節點的工作者池新增至 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. 在除錯殼層中,檢查 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 中列出的節點所對應的工作者 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,隨後在未重新啟動節點的情況下重新啟用 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 套件。 無需更新 ConfigMap。

對於 RHCOS 節點,在安裝完成後,您仍須將節點清空並重新啟動,EIT 才會生效。 將節點中的資料排空、重新啟動,然後解除其連線,以減輕對正在執行中的工作負載的影響。 在該節點重新啟動之前,任何使用啟用 EIT 的 PVC 並被排程至該新節點的 Pod,都會出現相同的「UnresponsiveMountHelperContainerUtility」錯誤。 Ubuntu 當新增節點時,(IKS) 和 RHEL (ROKS) 節點無需重新開機。