第 6 章 使用 Ceph 块设备 Python 模块
rbd python 模块提供对 Ceph 块设备镜像的类文件访问。要使用此内置工具,请导入 rbd 和 rados Python 模块。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 节点的根级别访问权限。
流程
连接到 RADOS 并打开 IO 上下文:
cluster = rados.Rados(conffile='my_ceph.conf') cluster.connect() ioctx = cluster.open_ioctx('mypool')cluster = rados.Rados(conffile='my_ceph.conf') cluster.connect() ioctx = cluster.open_ioctx('mypool')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 实例化一个
:class:rbd.RBD对象,用于创建镜像:rbd_inst = rbd.RBD() size = 4 * 1024**3 # 4 GiB rbd_inst.create(ioctx, 'myimage', size)
rbd_inst = rbd.RBD() size = 4 * 1024**3 # 4 GiB rbd_inst.create(ioctx, 'myimage', size)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在镜像上执行 I/O,请实例化一个
:class:rbd.Image对象:image = rbd.Image(ioctx, 'myimage') data = 'foo' * 200 image.write(data, 0)
image = rbd.Image(ioctx, 'myimage') data = 'foo' * 200 image.write(data, 0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将"foo"写入镜像的前 600 字节。请注意,数据不能是
:type:unicode-librbd不知道如何处理比:c:type:char更宽的字符。关闭镜像、IO 上下文和与 RADOS 的连接:
image.close() ioctx.close() cluster.shutdown()
image.close() ioctx.close() cluster.shutdown()Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为了安全起见,每个调用都必须位于单独的
:finally中 :Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这可能会有问题,Rados、Ioctx 和 Image 类可以用作自动关闭或关闭的上下文管理器。使用它们作为上下文管理器时,上述示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow