手動解除k8s對ceph rbd的掛載

2021-09-12 03:20:13 字數 1289 閱讀 4919

在 kubernetes 中,如果某個節點出現問題(比如 kubelet 服務不可用), 集群會自動把這個節點上的pod 飄到其他節點.但是,如果乙個pod掛載了ceph rbd型別的儲存卷(pv),那麼這個pod在新節點上是無法正常啟動的.會提示如下錯誤:

multi-attach errorforvolume"pvc-4f91d1a6-fcec-11e8-bd06-6c92bf74374a"volumeisalready exclusively attached to one nodeandcan't be attached to another。
kubelet 服務是與集群通訊的.如果這個服務出現問題,集群就會與這個節點失聯,而這個節點上的容器是正常在執行的,所以這個容器還會占用這個pv的掛載.而集群並不能刪掉這個容器,也不能控制這個節點取消掛載.

所以.這個時候,需要手動進行干預

首先看一下卷是如何掛載的.

1. 強制刪除有問題的pod:

kubectl delete pod -n 

--grace-period=0 –force

2.檢視新建pod的狀態:

kubectl describe pod -n 

在event中發現 multi-attach 的異常.

3. 檢視這個pv的資訊:

kubectl describe pv

可以source.rbdimage獲取相關的rbd name

rbd status 
可以看到.這個rbd的image正在被某個node使用

4. 到這個node上去檢視 rbd的使用情況,可以看到rbd掛載到node的裝置名

grep

5.找到之前pod產生的容器.手動將它停止:

6.解除裝置到容器(pod)的掛載.(第四步的獲取裝置)

umount /dev/rbd0
7.解除node對ceph-rbd 的對映:

rbd unmap 
8.重啟新的pod:

kubectl delete po -n 

9.到這,新的pod就可以正常啟動了.

重啟這個有問題的節點

出現這個問題的乙個重要原因是ceph-rbd只能支援單讀寫(rwo).而cephfs支援多讀寫(rwx),就不會有這個問題了.

k8s使用 ceph rbd 模式 踩坑

建立pod時,kubelet需要使用rbd命令去檢測和掛載pv對應的ceph image,所以要在所有的worker節點安裝ceph客戶端ceph common。將ceph的ceph.client.admin.keyring和ceph.conf檔案拷貝到master的 etc ceph目錄下 安裝失...

K8s部署prometheus監控K8s細節

prometheus 一些配置檔案可以再github上找到。部署 root kube prometheus manifests 目錄下所有檔案 部署 root kube prometheus manifests setup 目錄下所有檔案 要注意的是自己要建立乙個工作空間 如果報錯執行下面語句 部署...

k8s 多租戶 k8s 基礎介紹

備註 1 每乙個pod裡執行著乙個特殊的容器 pause容器,其他容器都是業務容器,這些業務容器共享pause容器的網路棧和volume 邏輯卷 掛載卷。因此他們之間的通訊和資料交換更為高效。2 k8s設計了pod物件,將每個服務程序包裝到相應的pod中,使其成為pod中執行的乙個容器 contai...