美文网首页
Cinder RBD驱动实现代码

Cinder RBD驱动实现代码

作者: chendihao | 来源:发表于2015-11-20 14:13 被阅读853次

介绍

Cinder很早就支持RBD驱动了,可以将Ceph作为块设备服务的后端,这是通过Cinder源码中的RBD driver实现的。

源码分析

RBD驱动的源码在/cinder/volume/drivers/rbd.py,其中RBDDriver继承BaseVD,必须实现以下基本函数。

check_for_setup_error(self)

create_volume(self, volume)

delete_volume(self, volume)

ensure_export(self, context, volume)

create_export(self, context, volume, connector)

remove_export(self, context, volume)

initialize_connection(self, volume, connector, initiator_data=None)

terminate_connection(self, volume, connector, **kwargs)

由于RBDDriver也继承了TransferVD、ExtendVD、CloneableImageVD、SnapshotVD、MigrateVD,因此也必须实现以下的函数。

extend_volume(self, volume, new_size)

clone_image(self, volume, image_location, image_id, image_meta, image_service)

create_snapshot(self, snapshot)

delete_snapshot(self, snapshot)

create_volume_from_snapshot(self, volume, snapshot)

migrate_volume(self, context, volume, host)

这个驱动还实现了很多工具类,我们不逐一分析,就以最重要的create_volume和delete_volume为例子串通整个流程吧。

当用户通过命令行或API创建卷时,cinder-api接受请求,转发给cinder-scheduler,然后发给后端任意一个cinder-volume,这时根据配置文件指定的RBD后端请求/cinder/volume/drivers/rbd.py的create_volume()。

首先获取传入的volume大小参数,然后根据配置文件指定的chunk大小,计算出rbd的order。

然后是创建RADOSClient,这个客户端在初始化时会连RADOS,这是使用ceph官方的python库,通过配置文件写好的账号信息来返回一个ioctx。

有了ioctx,我们还是创建一个新的RBDProxy,这是一个标准的eventlet tpool。

最后使用ceph官方的python rbd库来调用create()。

至于delete_volume的逻辑相对复杂些,先通过rbd库获取Image对象,然后这个Image的所有backup,最后通过RBDProxy调用接口来删除。

相关文章

  • Cinder RBD驱动实现代码

    介绍 Cinder很早就支持RBD驱动了,可以将Ceph作为块设备服务的后端,这是通过Cinder源码中的RBD ...

  • cinder配额 quota 使用及代码分析

    封装抽象 quota相关功能实现在cinder\quota.py实现,包含了引擎、资源、驱动三个大类抽象封装。看起...

  • 1. 创建卷可以通过命令发送请求,例如cinder create 1 2. 由cinder-api处理,代码在/c...

  • Cinder块存储

    一、什么是Cinder块存储 Cinder是Openstack对块存储的实现 块存储服务主要是为虚拟机提供弹性的存...

  • cinder service-list 代码简要

    api获取service list: 代码逻辑: cinder\api\contrib\services.py\S...

  • openstack配置nfs作为cinder后端存储 2019-

    目标: 更改cinder后端存储为nfs: 过程:nfs服务端配置: 查看nfs驱动名称:class后面的NfsD...

  • Ceph Luminous librbd & libra

    1. librbd & librados介绍 Librbd模块实现了RBD接口,其基于Librados实现了对RB...

  • ceph rbd操作

    1、查看rbd模块:modinfo rbd2、加载rbd模块:modprobe rbd3、创建10GB块设备:rb...

  • ③ Ceph—RBD块设备介绍与创建

    一、RBD介绍 RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD...

  • openstack(八、cinder)

    一、Cinder控制节点 1、创建Cinder数据库 2、安装配置cinder yum install opens...

网友评论

      本文标题:Cinder RBD驱动实现代码

      本文链接:https://www.haomeiwen.com/subject/gtblhttx.html