支持80多个存储驱动程序的多供应商CSI插件

ember-csi的Python项目详细描述


余烬csi

Docker生成状态pyversion许可证

多供应商CSI插件驱动程序在一个插件中支持超过80个存储驱动程序,以提供blockmount存储到容器编排系统。

  • 免费软件: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_端点所有绑定服务的IP和端口[::]:50051192.168.1.22:50050csi_模式所有服务应扮演的角色:控制器、节点、所有所有控制器x\u csi\u规格版本所有要运行的CSI规范版本。支持v0.2和v1.0v0.2.00.2.0x\u csi\u存储/u nw\u ip节点用于连接到存储的节点中的IP地址从节点的fqdn解析的IP192.168.1.22x节点id节点此节点用于向控制器标识自身的ID节点的fqdncsi_test_节点x_csi_persistence_配置所有配置Cinderlib元数据持久性插件。{"storage":"crd","namespace":"default"}{"存储":"db","连接":"mysql+pymysql://root:stackdb@192.168.1.1/cinder?字符集=utf8"}x_csi_ember_config所有全局embercinderlib配置 {"project_id":"ember csi.io","user_id":"ember csi.io","root_helper":"sudo","request_multipath":false,"plugin_name":,"file_locks_path":"/var/lib/ember csi/locks","name":"io.ember csi","grpc_workers":30,"enable_probe":false}{"项目id":"k8s项目","用户id":"csi驱动程序","根助手":"sudo","插件名":"外部ceph"}x_csi_backend_配置控制器驾驶员配置{"name":"rbd","driver":"rbd","rbd_user":"cinder","rbd_pool":"volumes","rbd_ceph_conf":"/etc/ceph/ceph.conf","rbd_keyring_conf":"/etc/ceph/ceph.client.cinder.keyring"}x_csi_default_mount_fs节点发布调用中缺少默认装载文件系统ext4BTRFSx\u csi\u系统文件所有以tar、tar.gz或tar.bz2格式存档的所有必需的存储驱动程序特定文件/路径/to/etc ceph.tar.gzx\u csi\u调试模式<所有>要使用的调试模式(rpdb、pdb)。默认情况下禁用。数据库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替换blockword。

例如,这些将是用于裸金属连接的命令:

    $ 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完成的。将其设置为pdbrpdb将启用调试。插件在默认情况下禁用了此功能,但是我们的最新的主容器在默认情况下使用rpdb

一旦插件运行时启用了调试(我们可以在开始消息中看到),我们就可以使用sigusr1信号打开和关闭它,并且服务将输出带有debugging is ondebugging is off消息的更改。

打开后,插件将停止调试下一个grpc请求。如果使用pdb进入交互模式,或者如果使用rpdb打开4444端口。当使用rpdb时,我们将在插件上看到以下消息:pdb正在127.0.0.1:4444上运行

发送信号以打开/关闭调试非常容易。对于裸金属,我们可以做到:

    $ sudo pip install ember-csi
4

对于容器(假设其命名为member csi如示例中所示),我们可以做到:

    $ sudo pip install ember-csi
5

如果我们使用的是rpdb,则必须连接到端口:

    $ sudo pip install ember-csi
6

故障排除

CSC命令超时

如果后端速度慢或数据网络连接速度慢,并且正在创建装入卷,则在对卷运行node staging命令时可能会遇到"超过上下文期限"错误。

这只是一个60秒的超时,我们可以通过增加命令完成所允许的超时来轻松解决这个问题。例如,使用-t5m进行5分钟的调试,或者使用-t1h在服务器端进行手动调试时,使用-t5m进行1小时的调试。

使用iscsi在容器中转移失败

当我试图使用容器化的节点暂存卷时,我看到错误"error root volumedevicenotfound:volume device not found at."。

打开调试日志级别将显示登录错误:

    $ sudo pip install ember-csi
7

查看主机日志(运行iscsid的守护进程)可以看到kmod错误:

    $ sudo pip install ember-csi
8

这似乎是由主机和容器的iscsi模块之间的某种不兼容引起的。除了使用CentOS 7主机系统,我们目前没有其他解决方案。

支架

如有任何疑问或问题,请向ember csi项目或在irc上ping我(我的句柄是geguileo,我挂在freenode中的openstack cinder通道上)。

待办事项

在这个poc驱动程序中有很多事情需要做,这里有一个非详尽的列表:


历史记录

0.9.0(2019-06-04)

测试版,支持完整的CSI v0.2、v0.3和v1.0规范。

功能

错误

0.0.2(2018-06-19)

0.0.1(2018-05-18)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java名称为User的文件始终保存为intellij中的文本文件   java Hibernate:过时状态异常   java是否可以增加主题订阅服务器中的保持活动状态检查时间?   java Spring boot,Thymeleaf如何从网页获取语言参数   java从JSON转换为JSONLD   java Android如何配置Jenkins的多配置项目?   java是否可以使用字符串名称不完整的getIdentifier?   Ruby相当于Java Bouncy Castle AES128CBC填充   java在使用系统时获取FileNotFoundException。getProperty(“user.dir”)   java最小的合法zip/jar文件是什么?   java会降低效率吗?   enums Java如何将类型安全枚举用作switchcase语句?   使用Apache POI的Excel文件中的java计数非空行   java从Spring数据的页面映射是如何工作的?   java两个字符串不相等