自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解決K8S中Pod無法正常Mount PVC的問題

運(yùn)維 系統(tǒng)運(yùn)維
我是使用的Deployment來管理的有狀態(tài)應(yīng)用,正常使用StatefulSet不會出現(xiàn)這種問題,那使用Deployment該如何避免這種問題呢?

[[413739]]

今天發(fā)現(xiàn)一個(gè)Pod一直處于ContainerCreating狀態(tài),通過Describe查看,發(fā)現(xiàn)以下錯誤。

  1. Warning  FailedMount  15s        kubelet, node-2    MountVolume.WaitForAttach failed for volume "pvc-504feeb6-ae42-45ba-996b-5e8e1039b601" : rbd image kube/kubernetes-dynamic-pvc-bbfd3466-9f2f-11ea-8e91-5a4125e02b87 is still being used 

意思就是說該P(yáng)od啟動需要掛載PVC,但是這個(gè)PVC目前正被使用??梢源_定的是除了這個(gè)Deployment之外,沒有其他Deployment在使用這個(gè)PVC,那這是為什么呢?

我們先來看看如果一個(gè)Pod需要掛載卷,在創(chuàng)建Pod的過程中,卷的整個(gè)流程如下:(1)第一步是先創(chuàng)建卷 (2)第二步在節(jié)點(diǎn)上掛載卷 (3)將卷映射到Pod中

在刪除Pod的時(shí)候,卷的卸載過程和上面正好相反。所以初步懷疑是在刪除Pod的時(shí)候,原節(jié)點(diǎn)由于某些原因從節(jié)點(diǎn)上卸載卷失敗,我們來具體排查一下。

1、通過上面Pod的錯誤信息,我們可以獲取到如下有用信息

  1. rbd image kube/kubernetes-dynamic-pvc-bbfd3466-9f2f-11ea-8e91-5a4125e02b87 is still being used 

我們可以從上面的信息獲取到rbd的鏡像信息,拆分如下:

  • rbd池:kube
  • rbd鏡像:kubernetes-dynamic-pvc-bbfd3466-9f2f-11ea-8e91-5a4125e02b87

2、我們通過ceph命令可以獲取到該鏡像被哪個(gè)節(jié)點(diǎn)使用,如下:

  1. # rbd info kube/kubernetes-dynamic-pvc-bbfd3466-9f2f-11ea-8e91-5a4125e02b87 
  2. rbd image 'kubernetes-dynamic-pvc-bbfd3466-9f2f-11ea-8e91-5a4125e02b87'
  3.  size 100 GiB in 25600 objects 
  4.  order 22 (4 MiB objects) 
  5.  snapshot_count: 0 
  6.  id: fb236b8b4567 
  7.  block_name_prefix: rbd_data.fb236b8b4567 
  8.  format: 2 
  9.  features: layering 
  10.  op_features:  
  11.  flags:  
  12.  create_timestamp: Tue May 26 17:03:15 2020 
  13.  access_timestamp: Tue May 26 17:03:15 2020 
  14.  modify_timestamp: Tue May 26 17:03:15 2020 

主要關(guān)注block_name_prefix的值。

然后通過以下的命令獲取到具體的節(jié)點(diǎn):

  1. # rados listwatchers -p kube rbd_header.fb236b8b4567 
  2. watcher=192.168.100.181:0/154937577 client.194364 cookie=18446462598732840971 

其中,將從block_name_prefix獲取到的值將rbd_data修改為rbd_header,然后通過以上命令獲取即可。

從上面輸出的信息可以看到這個(gè)rbd鏡像被掛載到192.168.100.181主機(jī)上,這時(shí)候我們需要切換到該主機(jī)進(jìn)行具體的操作。

3、查看具體的文件系統(tǒng)掛載信息

  1. ls /dev/rbd/kube/kubernetes-dynamic-pvc-bbfd3466-9f2f-11ea-8e91-5a4125e02b87 -l 
  2. lrwxrwxrwx 1 root root 11 7月  27 09:04 /dev/rbd/kube/kubernetes-dynamic-pvc-bbfd3466-9f2f-11ea-8e91-5a4125e02b87 -> ../../rbd4 

可以看到這個(gè)rbd鏡像被掛載到/dev/rbd4上,我們可以直接通過rbd unmap命令卸載,如下:

  1. # rbd unmap /dev/rbd4 

不過我這里并沒有這么容易,當(dāng)我在卸載的時(shí)候報(bào)如下錯誤。

  1. # rbd unmap /dev/rbd4 
  2. rbd: sysfs write failed 
  3. rbd: unmap failed: (16) Device or resource busy 

一看到這個(gè)問題,就想到有時(shí)候在umount的時(shí)候,也會遇到Device busy,所以第一反應(yīng)是使用lsof,看是否能找到哪個(gè)進(jìn)程占用了,如下:

  1. # lsof 2>/dev/null | grep rbd4 

但是我并沒有找到任何進(jìn)程,二臉懵逼.....

最后只有瘋狂百度了,找到了兩種解決方式。(1)通過rbd unmap -o force進(jìn)行強(qiáng)制卸載 (2)通過grep 'rbd4' /proc/*/task/*/mountinfo來查找進(jìn)程PID

當(dāng)把這個(gè)rbd鏡像從原節(jié)點(diǎn)卸載過后,就可以看到Pod可以正常啟動了。

寫在最后

由于我是使用的Deployment來管理的有狀態(tài)應(yīng)用,正常使用StatefulSet不會出現(xiàn)這種問題,那使用Deployment該如何避免這種問題呢?

  • 使用ReadWriteMany訪問模式的pvc
  • 將maxSurge設(shè)置為0,避免在更新過程中產(chǎn)生多余的pod

這兩種方式都有利有弊,具體情況需要使用者去權(quán)衡。

本文轉(zhuǎn)載自微信公眾號「運(yùn)維開發(fā)故事」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系運(yùn)維開發(fā)故事公眾號。

 

責(zé)任編輯:姜華 來源: 運(yùn)維開發(fā)故事
相關(guān)推薦

2022-06-01 09:38:36

KubernetesPod容器

2024-03-18 15:44:48

K8S故障運(yùn)維

2023-07-04 07:30:03

容器Pod組件

2022-02-23 08:01:04

KubernetesK8sPod

2022-11-02 10:21:41

K8s pod運(yùn)維

2023-12-01 15:58:00

Kubernetes集群DevOps

2021-12-21 08:31:07

k8s診斷工具kubectl-deb

2023-09-18 14:34:07

Kubernetes云原生

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2023-11-06 07:16:22

WasmK8s模塊

2023-09-13 09:02:22

PVPVC存儲

2023-02-08 07:55:33

K8sHPA服務(wù)器

2020-07-17 08:40:47

K8SServicePOD

2021-07-14 18:21:38

負(fù)載均衡K8SgRPC

2024-07-15 18:20:18

2023-09-06 08:12:04

k8s云原生

2025-04-07 08:00:00

KubernetesK8Spod

2024-01-26 14:35:03

鑒權(quán)K8sNode

2019-08-12 08:36:33

K8S網(wǎng)絡(luò)Pod

2023-09-15 07:34:15

AIOps云原生項(xiàng)目
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號