本文主要介绍如何用kubernentes挂载rbd目录。以及其中遇到的问题。有关ceph和rbd相关请自行百度。

如何创建

参照github上kubernetes/examples/rbd/ 目录下的范例,我们可以创建一个挂载rbd存储的容器。前提是:

  1. 当前网络中有一个ceph服务器

  2. slaver节点上要安装ceph client。

  3. 从ceph服务器上获取client,monitor等关键信息。

具体步骤如下:

  1. 参照github上的案例,先创建一个secret
    secret中存储的是ceph client与server之间通信需要的keyring。我们可以在ceph server 机器上的/etc/ceph/目录中找到许多keyring,这里选用 /etc/ceph/ceph.client.admin.keyring,其内容一般是:
    key: AQADW11WlqGlMBAAYnKIIExLAlde8rG1SGAYQQ==
    复制并替换ceph-secret,yaml中的相应字段(data字段下的‘key’)并保存。然后执行
    kubectl create -f ceph-secret.yaml
    并检查secret是否创建成功。

  2. 创建容器,挂载rbd volume
    创建容器时,通过json文件我们可以很清楚的看到,我们引用了一个secret(secretRef)。直接执行
    kubectl create -f *.json
    即可。

创建后我们通过kubectl get pods 就能看到容器是否创建,执行kubectl exec -it {podname} /bin/bash 进入容器,可以找到相应的挂在目录。到这里,就可以确定容器已经正常启动并挂载了一个rbd的存储块。

读写问题

我们注意到创建容器的json文件中指定了"readOnly" :false,这意味着我们在容器里面可以随意的在挂载目录中创建/删除文件。

那么,多个节点,多个容器是否可以共享一个存储呢?

假设第一步我们创建的容器ca是在节点a上运行的,并且k8s集群中只有三台slaver:a,b,c。

我们再创建一个实例数为5的replication controller,他也会挂载这个rbd块,并且也是读写模式,创建后执行kubectl get podskubectl describe pod {podname},那么因为节点a上挂载了该rbd块,k8s会youxian将新的rc中的容器逐一调度到其他机器上(b和c)。被调度到新机器上的容器,会在启动过程中提示:
FailedSync Error syncing pod, skipping: rbd: image testdevice is locked by other nodes
意思是这个rbd块已经被别的节点锁定了(就是说节点a已经锁定了该rbd块,其他节点不能再挂载它)。而rc中剩余的pod,会直接无法调度,并提示:
pod (rbdrc-cokvq) failed to fit in any node
fit failure on node (10.126.72.31): NoDiskConflict
fit failure on node (10.126.72.32): NoDiskConflict
fit failure on node (10.126.72.33): NoDiskConflict
意思是k8s找不到‘还没有分配这个rbd块’的节点。

如果我们强制将该rc指定部署到之前的a节点上呢?通过"nodeName":{nodeIP}可以指定将rc中的pod优先部署到指定的节点上,尝试之后,发现容器可以正常运行。

结论1:rbd挂载以节点为粒度,如果某节点上的某容器以读写模式挂载了rbd块,那么该rbd块就会被该节点锁定。

如果我们新建的rc不是可读写的,而是只读的呢?

rbdrc-nu32o 1/1 Running 0 5m
rbdrc-olv14 0/1 Pending 0 5m
rbdrc-qyw2u 0/1 Pending 0 5m
rbdrc-rxmdr 1/1 Running 0 5m
rbdrc-snd3x 0/1 Pending 0 5m

我们可以看到只有两个pod正常运行。我们用kubectl describe pod {podname}检查这几个pod,发现running状态的两个pod分别被调度到了b,c节点都处于NoDiskConflict状态。

结论2:如果某节点上的某容器以读写模式挂载了rbd块,那么其他节点依然可以对这个块进行只读模式的挂载。

结论3:k8s会对挂载rbd的pod进行唯一调度,就是说若某个节点挂载了rbd块A1,k8s会将后续挂载A1的pod调度到别的节点部署。(除非强制指定)

另:ceph rbd块被挂载后,写入数据是可以很快同步的(具体多久需要调查),而读取数据只能在map后同步。这就是说,如果同时又一个读写的容器a和一个只读容器b在运行,在容器a中新写入的数据,只用把容器销毁并重启,才能同步并读到新的数据

kubernetes挂载存储相关推荐

  1. Kubernetes持久化存储Cephfs

    女主宣言 上一篇 kubernetes持久化存储Ceph RBD 介绍了Ceph RBD在kubernetes中的使用,本篇将会介绍Cephfs在kubernetes中的使用.本文最先发布于 opsd ...

  2. 干货 | 如何评估Kubernetes持久化存储方案

    在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...

  3. 如何评估Kubernetes持久化存储方案

    在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...

  4. Kubernetes 本地存储卷 pod volume emptyDir

    Volume 本节我们讨论 Kubernetes 的存储模型 Volume,学习如何将各种持久化存储映射到容器. 我们经常会说:容器和 Pod 是短暂的. 其含义是它们的生命周期可能很短,会被频繁地销 ...

  5. 为什么Kubernetes的存储如此艰难?

    随着像Kubernetes这样的容器编排工具的大火,应用程序的开发与部署方式正经历着一场巨大的变革.微服务体系结构的兴起,以及从开发人员的角度,将基础架构与应用程序逻辑间相互解耦,使得开发人员越来越关 ...

  6. Linux服务器下挂载存储

    Linux服务器下挂载存储 挂载存储背景: 针对安徽省各地市硬件配置的不同,诸如oracle的软件安装在服务器上,数据则放在存储上.这样的话,启动服务器若没有挂载存储,应用启用失败.为了能够使服务器重 ...

  7. centOS7挂载存储节点

    centOS7挂载存储节点 调试电脑IP设置为 192.168.2.200 服务器LAN1地址为192.168.2.132 万兆光纤网口地址为10.0.10.6 对应存储节点光纤网口地址为10.0.1 ...

  8. Kubernetes容器存储:请选对的

    根据2019年最新的Gartner的分析数据显示,到2022年,全球75%的企业将在生产环境中使用容器.而从2018年开始,在容器平台上运行的应用程序,已经有超过一半的是有状态应用,例如数据库等.对于 ...

  9. 主机挂载存储_备战CKA每日一题——第3天 | 对接CSI存储知识

    本活动在微信公众号[我的小碗汤]上举行,这里参与答题无效哦! 昨日考题 在Kubernetes PVC+PV体系下通过CSI实现的volume plugins动态创建pv到pv可被pod使用有哪些组件 ...

最新文章

  1. Oracle SQL Developer中进行存储过程调试
  2. window版docker安装及配置
  3. dataframe两个表合并_DAXSQLPython实现报表项目存在串行的财务报表合并
  4. 【bzoj4025】二分图 LCT
  5. SQL嵌套语句执行顺序
  6. 关于K8s技术架构的几个问题
  7. python实现自动工作_python实现串口自动触发工作的示例
  8. Android Studio下载安装及配置图文教程
  9. java word另存为_Java 网页html转为word并保存为doc文件
  10. Android小应用-----画画板
  11. 司空见惯 - 英雄扫雷鼠
  12. win7系统备份还原软件_傲梅轻松备份bug导致系统还原0x81000203错误,
  13. 关于html中的图片居中问题
  14. java 约分_java如何将分数快速约分
  15. macOS 13 如何更新?macOS Ventura抢先更新
  16. kafka的isr理解
  17. 洛谷三月月赛——P5238 整数校验器
  18. python制作闯关答题软件_闯关答题-可以用做问答互动的软件-闯关答题会议 微信 问答游戏GO互动智能现场...
  19. jsliang 2020 求职系列
  20. CNN卷积神经网络:花卉分类

热门文章

  1. 用sublime Text2来开发ruby on rails项目
  2. 用 GDI 操作 EMF 文件(转)
  3. struct device结构体(2.6.23)
  4. ES6新特性_const声明常量以及特点---JavaScript_ECMAScript_ES6-ES11新特性工作笔记005
  5. 架构部署002--城域网_骨干网
  6. 项目业务工作笔记001---发改委职责
  7. mybatis 配置文件中,collection 和 association 的对应关系
  8. bzoj 1008: [HNOI2008]越狱
  9. Unable to resolve target 'android-7'
  10. win7下看不到摄像头的解决方法