kuberntes集成ceph rbd块的一次挂载失败的故障

    技术2022-07-10  135

    1)概述

    1)ceph版本:nautilus版 2)kuberntes集群环境:v1.14.2 3)集成方式:pod中的Volumes字段直接输入ceph rbd块相关的信息。相关yaml资源是来自kubernetes github的example。

    2)现象

    kubectl describe pod pod-rbd命令,发现rbd块已attach到目标节点,但是kubelet执行挂载动作的时候失败并输出报错: failed to mount unformatted volume as read only。

    3)pod的yaml资源

    将kubernetes github example中的yaml文件进行修改:将monitors字段修改成我ceph集群的monitor实例。

    4)疑惑

    远程ceph集群中的rbd块已经attach到目标节点,kubelet在执行只读mount动作的时候失败(目标rbd块是没有文件系统的),为何mount之前不会对rbd块进行文件系统格式化,这一步为何被漏掉?我想象中的流程是:kubelet调用rbd命令将rbd块映射到目标节点,执行mkfs命令对rbd块进行指定一种文件系统进行格式化,最后一步是以只读方式mount这个rbd块。

    5)kubelet执行挂载操作的源码

    6)解决方式

    将volume中的readOnly字段设置为false,此时kubelet在第一次挂载目标卷的时候会失败,于是尝试对没有文件系统的卷进行一次格式化,而后再执行一次挂载操作。

    Processed: 0.011, SQL: 9