支持80多个存储驱动程序的多供应商CSI插件
ember-csi的Python项目详细描述
余烬csi
多供应商CSI插件驱动程序在一个插件中支持超过80个存储驱动程序,以提供block
和mount
存储到容器编排系统。
- 免费软件:apache软件许可证2.0
- 文档:待定
功能
此CSI驱动程序是最新的CSI规范,包括最近推出的新快照功能。
当前支持的功能有:
- 创建块卷
- 创建快照
- 从快照创建块卷
- 删除块卷
- 删除快照
- 列出分页的卷
- 列出带有分页的快照
- 附加卷
- 分离卷
- 报告存储容量
- 探测节点
- 检索插件信息
运行时依赖项
此驱动程序要求系统中已安装Cinder v11.0(osp-12/pike),如何完成此操作由安装程序决定,因为有多种方法可以完成此操作:
- 来自OSP存储库
- 从RDO存储库
- 来自Github
- 来自其他存储库
从pypi安装时,ember-csi
已经处理了任何其他基本需求。
除了基本的依赖关系外,还有一些驱动程序必须满足其他要求,才能正确操作驱动程序和/或附件/分离操作,就像在煤渣中一样。
控制器服务程序的一些python依赖项是:
- drbd:dbus和drbdmanage
- hpe 3par:python-3parclient
- 卡米纳里奥:克雷斯特
- 纯:纯存储
- Dell EMC VMax、IBM DS8K:pyopenssl
- hpe lefthad:python-lefthandclient
- 富士通eternus dx:pywbem
- IBM XIV:pyxcli
- rbd:rados和rbd
- EMC VNX:storops
- 小提琴:vmemclient
- infinidat:infinisdk,容量,infy.dtypes.wwn,infi.dtypes.iqn
其他后端也可能需要其他包,例如centos/rhel上的lvm需要targetcli
包,因此请与硬件供应商联系。
除了控制器需求外,通常还需要节点服务器来处理基于连接u的卷到节点的连接和分离。sed访问存储。例如:
- iscsi:iscsi发起程序工具和设备映射程序多路径
- RBD/CEPH:CEPH通用包
安装
首先,我们需要安装Cinder Python包,例如在CentOS上从RDO安装:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
然后我们只需要安装ember csi
包:
$ sudo pip install ember-csi
现在我们应该安装后端所需的任何附加软件包。
对于iscsi后端,我们希望安装:
$ sudo yum install iscsi-initiator-utils
$ sudo yum install device-mapper-multipath
$ sudo mpathconf --enable --with_multipathd y --user_friendly_names n --find_multipaths y
对于RBD,我们还需要一个特定的包:
$ sudo yum install ceph-common
配置
CSI驱动程序是通过环境变量配置的,任何没有默认值的值都是必需的值。
<表><广告>csi_端点
csi_模式
x\u csi\u规格版本
x\u csi\u存储/u nw\u ip
x节点id
x_csi_persistence_配置
Cinderlib
元数据持久性插件。x_csi_ember_config
ember
和cinderlib
配置
x_csi_backend_配置
x_csi_default_mount_fs
x\u csi\u系统文件
x\u csi\u调试模式
x\u csi\u abort\u个重复项
目前测试过的唯一角色是默认角色,其中控制器和节点服务器在同一个服务中执行(csi_mode=all
),其他模式预计在此时会有问题。
x_csi_system_file s变量应指向可以在ember csi驱动程序的文件系统中访问的tar/tar.gz/tar.bz2文件。存档的内容将被提取到"/"中。具有特权访问权限的受信任用户(如操作员/管理员)必须在启动驱动程序之前创建存档。
$ tar cvf ceph-files.tar /etc/ceph/ceph.conf /etc/ceph/ceph.client.cinder.keyring
tar: Removing leading `/' from member names
/etc/ceph/ceph.conf
/etc/ceph/ceph.client.cinder.keyring
$ export X_CSI_SYSTEM_FILES=`pwd`/ceph-files.tar
启动插件
一旦我们安装了ember csi
和所需的依赖项(对于后端和连接类型),我们只需与一个可以执行无密码sudo的用户一起运行ember csi
服务:
$ ember-csi
测试插件
在examples
目录中有几个运行ember csi插件的示例,这些示例既适用于裸机部署,也适用于容器化版本的驱动程序。
在所有情况下,我们必须先运行插件,然后才能对其进行测试,为此,我们必须在启动插件之前检查作为测试提供的配置。默认情况下,所有示例都在端口50051上运行服务。
裸金属
例如,要在我们的开发环境中使用lvm驱动程序进行测试,我们可以从ember csi
项目的根目录运行以下命令:
注意:iscsi ip地址是在lvm文件中自动分配的。如果需要,您可以更改这些IP地址:
$ cd tmp
$ sudo dd if=/dev/zero of=ember-volumes bs=1048576 seek=22527 count=1
$ lodevice=`sudo losetup --show -f ./ember-volumes`
$ sudo pvcreate $lodevice
$ sudo vgcreate ember-volumes $lodevice
$ sudo vgscan --cache
$ cd ../examples/baremetal
$ ./run.sh lvm
py27 develop-inst-nodeps: /home/geguileo/code/ember-csi
py27 installed: ...
___ summary ___
py27: skipped tests
congratulations :)
Starting Ember CSI v0.0.2 (cinderlib: v0.2.1, cinder: v11.1.2.dev5, CSI spec: v0.2.0)
Supported filesystems are: fat, ext4dev, vfat, ext3, ext2, msdos, ext4, hfsplus, cramfs, xfs, ntfs, minix, btrfs
Running backend LVMVolumeDriver v3.0.0
Debugging is OFF
Now serving on [::]:50051...
还有一个使用名为"cinder"的用户和"volumes"池测试ceph集群的示例。对于ceph/rbd后端,由于煤渣的限制,我们需要同时具备/etc/ceph
中的凭据和配置才能使其工作:
$ cd examples/baremetal
$ ./run.sh rbd
Starting Ember CSI v0.0.2 (cinderlib: v0.2.1, cinder: v11.1.2.dev5, CSI spec: v0.2.0)
Supported filesystems are: fat, ext4dev, vfat, ext3, ext2, msdos, ext4, hfsplus, cramfs, xfs, ntfs, minix, btrfs
Running backend LVMVolumeDriver v3.0.0
Debugging is OFF
Now serving on [::]:50051...
还有一个xtremio示例,它只需要iscsi连接包。
集装箱运输
项目中包含一个示例dockerfile
用于创建docker hub中可用的akrog/ember csi
容器。
有两个bash脚本,每个示例一个,将在容器上运行csi驱动程序,请注意,容器需要以特权运行才能装载卷。
对于RBD示例,我们需要复制我们的"ceph.conf"和"ceph.client.cinder.keyring"文件,假设我们正在使用"cinder"用户替换现有用户到example/docker目录中:
$ cd examples/docker
$ ./rbd.sh
Starting Ember CSI v0.0.2 (cinderlib: v0.2.1, cinder: v11.1.0, CSI spec: v0.2.0)
Supported filesystems are: cramfs, minix, ext3, ext2, ext4, xfs, btrfs
Running backend LVMVolumeDriver v3.0.0
Debugging is ON with rpdb
Now serving on [::]:50051...
CSC
现在我们已经运行了服务,我们可以使用csc工具来运行模拟容器编排系统的命令。
由于CSI规范中最近的更改,尚未提供所有命令,因此您将无法测试快照命令。
检查插件信息:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
0
检查节点ID:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
1
正在检查当前后端容量:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
2
创建卷:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
3
列出卷:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
4
存储以下所有呼叫的卷标识:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
5
将卷作为块设备附加到裸机上的tmp/mnt/publish
:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
6
将卷作为块设备附加到容器上的tmp/mnt/publish
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
7
卸下裸金属上的音量:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
8
分离容器上的卷:
$ sudo yum install -y centos-release-openstack-pike
$ sudo yum install -y openstack-cinder python-pip
9
删除卷:
$ sudo pip install ember-csi
0
如果我们想使用mount接口而不是block接口,我们也可以这样做,确保我们创建目录而不是文件,如果我们想要一个ext4
文件系统,我们可以用mount,ext4
替换block
word。
例如,这些将是用于裸金属连接的命令:
$ sudo pip install ember-csi
1
功能操作模式
CSI规范定义了一组CSI驱动程序可以支持的访问模式,如单写程序、单读程序、多写程序、单写程序和多读程序。
此CSI驱动程序当前仅支持单模式读卡器,但它也将在单模式读卡器模式下成功,并将其装载为读/写模式。
调试
调试的第一个工具是显示ember csi使用的驱动程序代码的详细信息的日志。我们可以使用环境变量
要启用日志,默认为信息级别,我们必须将禁用日志
键设置为假
。如果我们希望它们处于调试级别,还需要将debug
设置为true
对于baremail,启用调试日志级别可以如下所示:
$ sudo pip install ember-csi
2
对于容器,我们可以将环境变量添加到文件中,然后使用--env file
导入到运行中,或者使用-e
将其添加到命令行中。
在这两种情况下,都不应使用export
命令:
$ sudo pip install ember-csi
3
除了这个基本的调试级别之外,ember csi插件还支持在裸机中运行和作为容器运行时的实时调试。
有两种机制可用于调试驱动程序:使用pdb
,使用rpdb
。
它们之间的区别在于pdb
与stdin和stdout一起工作,而rpdb
打开端口4444以接受远程连接进行调试。
调试ember csi插件需要在启动插件之前对其启用调试,然后在其运行时我们必须将其打开。
启用调试是使用环境变量x_csi_debug_mode
完成的。将其设置为pdb
或rpdb
将启用调试。插件在默认情况下禁用了此功能,但是我们的最新的和主容器在默认情况下使用rpdb
一旦插件运行时启用了调试(我们可以在开始消息中看到),我们就可以使用sigusr1
信号打开和关闭它,并且服务将输出带有debugging is on或debugging is off消息的更改。
打开后,插件将停止调试下一个grpc请求。如果使用 发送信号以打开/关闭调试非常容易。对于裸金属,我们可以做到: 对于容器(假设其命名为member csi如示例中所示),我们可以做到: 如果我们使用的是rpdb,则必须连接到端口: 如果后端速度慢或数据网络连接速度慢,并且正在创建装入卷,则在对卷运行node staging命令时可能会遇到"超过上下文期限"错误。 这只是一个60秒的超时,我们可以通过增加命令完成所允许的超时来轻松解决这个问题。例如,使用 当我试图使用容器化的节点暂存卷时,我看到错误"error root volumedevicenotfound:volume device not found at."。 打开调试日志级别将显示登录错误: 查看主机日志(运行iscsid的守护进程)可以看到 这似乎是由主机和容器的iscsi模块之间的某种不兼容引起的。除了使用CentOS 7主机系统,我们目前没有其他解决方案。 如有任何疑问或问题,请向ember csi项目或在irc上ping我(我的句柄是geguileo,我挂在freenode中的openstack cinder通道上)。 在这个poc驱动程序中有很多事情需要做,这里有一个非详尽的列表: 测试版,支持完整的CSI v0.2、v0.3和v1.0规范。pdb
进入交互模式,或者如果使用rpdb
打开4444端口。当使用rpdb
时,我们将在插件上看到以下消息:pdb正在127.0.0.1:4444上运行
4
$ sudo pip install ember-csi
5
$ sudo pip install ember-csi
6
$ sudo pip install ember-csi
故障排除
CSC命令超时
-t5m
进行5分钟的调试,或者使用-t1h
在服务器端进行手动调试时,使用-t5m
进行1小时的调试。
使用iscsi在容器中转移失败
7
$ sudo pip install ember-csi
kmod
错误:
8
$ sudo pip install ember-csi
支架
待办事项
历史记录
0.9.0(2019-06-04)
功能
错误
0.0.2(2018-06-19)
0.0.1(2018-05-18)
推荐PyPI第三方库