前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让k8s使用nbd挂载ceph的块存储 原

让k8s使用nbd挂载ceph的块存储 原

作者头像
domain0
发布2019-04-19 11:41:31
2.1K0
发布2019-04-19 11:41:31
举报
文章被收录于专栏:运维一切运维一切

细节决定一切 网上很多文档默认都是只安装ceph-common然后直接rbd来跑ceph的rbd。 其实ceph的rbd块设备本地映射有两种方式: 盗个图(http://www.zphj1987.com/2016/05/19/ceph%E7%9A%84jewel%E6%96%B0%E6%94%AF%E6%8C%81%E7%9A%84rbd-nbd/):

  • rbd内核挂载
  • nbd挂载的方式

优缺点:rbd内核更新速度跟不上nbd和librbd的更新速度,imageFormat=2的很多特性rbd内核都不支持,另外从稳定性上来说,nbd模块+librbd的方式比较老牌了,rbd.ko就有点落后了,除非有很强大的内核团队,速度上来说,概念上nbd速度多了用户态到内核态的数据传输,理论上速度差一些,但是要看具体的测试结果,为啥呢:本地缓存和科学利用。

k8s在处理rbd store的执行器上,rbd和rbd-nbd都是同时支持的,但是代码上没有这个开关,只有在里面做了一个是否安装rbd-nbd的依赖判断,look this:

代码语言:javascript
复制
// Check if rbd-nbd tools are installed.
func checkRbdNbdTools(e mount.Exec) bool {
	_, err := e.Run("modprobe", "nbd")
	if err != nil {
		klog.V(5).Infof("rbd-nbd: nbd modprobe failed with error %v", err)
		return false
	}
	if _, err := e.Run("rbd-nbd", "--version"); err != nil {
		klog.V(5).Infof("rbd-nbd: getting rbd-nbd version failed with error %v", err)
		return false
	}
	klog.V(3).Infof("rbd-nbd tools were found.")
	return true
}
......
// Evalute whether this device was mapped with rbd.
	devicePath, mapped := waitForPath(b.Pool, b.Image, 1 /*maxRetries*/, false /*useNbdDriver*/)

	// If rbd-nbd tools are found, we will fallback to it should the default krbd driver fail.
	nbdToolsFound := false

	if !mapped {
		nbdToolsFound = checkRbdNbdTools(b.exec)
		if nbdToolsFound {
			devicePath, mapped = waitForPath(b.Pool, b.Image, 1 /*maxRetries*/, true /*useNbdDriver*/)
		}
	}

其实我觉得rbd的方式依赖反而比nbd更多,rbd.ko需要同时依赖ceph.ko libceph.ko,nbd的方式nbd.ko是大多数内核默认支持的,librbd仅仅是个本地库而已。

另外rbd-nbd尽可能使用L版的,J版的rbd-nbd好像代码只实现了基本功能,很多参数不支持,这会导致k8s对nbd的一些报错。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档