解決k8s集群中mount volume失敗的問題


有的時候,k8s中掛載了rbd存儲的pod重啟后會持續處於ContainerCreating的狀態,describe后發現有MountVolume.Setup failed以及Unable to mount volumes for pod xxx的錯誤描述。

這種情況看上去是rbd設備掛載到pod上失敗,但真實原因往往是pod遷移后,在原節點上map的rbd設備沒有正常遷移走導致的。

這個時候應該執行的是手動從原節點上unmap掉這個rbd設備。

一、找到rbd設備map的節點

通過kubectl get pvc找到這個pvc所綁定的pv。

然后根據這個pv,在集群中每個節點上依次執行:

rbd showmapped | grep [pv]

找到這個pv所map的節點和rbd設備。(節點多的話需要通過腳本)

二、查看掛載點

看一下這個rbd設備有沒有掛載點(應該是沒有)。

執行:

findmnt -n [rbd設備]

如果沒有輸出表明沒有掛載點。如果輸出類似/var/lib/kubelet/plugins/kubernetes.io/rbd/*,表明掛載點有誤,需要手動刪除掛載點。

執行:

umount [掛載點]

三、手動unmap

確保沒有掛載點之后,執行

rbd unmap [rbd設備]

手動將這個rbd設備unmap掉。

過一段時間后,新的rbd設備會自動掛載到新節點上,並為新pod所使用。

四、問題排查

如果在執行rbd unmap的時候,出現:

rbd: sysfs write failed
rbd: unmap failed: (16) Device or resource busy

這樣的報錯信息,可以參考下面這篇文章的思路進行排查:

https://cloud.tencent.com/developer/article/1469532?from=information.detail.rbd:%20unmap%20failed:%20(16)%20device%20or%20resource%20busy

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM