如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
插件驱动,通过单一插件支持超过80种存储驱动,为Kubernetes等容器编排系统提供块存储(block)和挂载存储(mount)服务。该驱动兼容最新CSI规范,包括快照等新特性,旨在简化容器环境中的存储管理,实现存储资源的动态供给与生命周期管理。
Ember CSI支持CSI规范的最新特性,包括:
驱动要求系统已安装Cinder v11.0(OSP-12/Pike),可通过以下方式安装:
通过PyPi安装ember-csi时,其他基础依赖会自动处理。
部分存储驱动需额外依赖以确保正常运行,例如:
控制器服务依赖
节点服务依赖
节点服务需根据存储访问方式安装相应依赖:
以CentOS系统为例,从RDO仓库安装Cinder:
bash$ sudo yum install -y centos-release-openstack-pike $ sudo yum install -y openstack-cinder python-pip
bash$ sudo pip install ember-csi
根据存储类型安装额外依赖,例如iSCSI后端:
bash$ 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后端需额外安装:
bash$ sudo yum install ceph-common
Ember CSI通过环境变量配置,无默认值的变量为必填项。
| 名称 | 角色 | 描述 | 默认值 | 示例 |
|---|---|---|---|---|
CSI_ENDPOINT | 所有 | 服务绑定的IP和端口 | [::]:50051 | 192.168.1.22:50050 |
CSI_MODE | 所有 | 服务角色:controller(控制器)、node(节点)、all(全部) | all | controller |
X_CSI_SPEC_VERSION | 所有 | 运行的CSI规范版本,支持v0.2和v1.0 | v0.2.0 | 0.2.0 |
X_CSI_STORAGE_NW_IP | 节点 | 节点用于连接存储的IP地址 | 从节点FQDN解析的IP | 192.168.1.22 |
X_CSI_NODE_ID | 节点 | 节点向控制器标识自身的ID | 节点的FQDN | csi_test_node |
X_CSI_PERSISTENCE_CONFIG | 所有 | cinderlib元数据持久化插件配置。 | {"storage": "crd", "namespace": "default"} | {"storage": "db", "connection": "mysql+pymysql://root:stackdb@192.168.1.1/cinder?charset=utf8"} |
X_CSI_EMBER_CONFIG | 所有 | Ember和cinderlib全局配置 | {"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, "slow_operations": true, "disabled": []} | {"project_id":"k8s project","user_id":"csi driver","root_helper":"sudo","plugin_name":"external-ceph","disabled":["snapshot","clone"]} |
X_CSI_BACKEND_CONFIG | 控制器 | 驱动配置 | {"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 | 节点 | 发布调用中缺失时的默认挂载文件系统 | ext4 | btrfs |
X_CSI_SYSTEM_FILES | 所有 | 存储驱动所需系统文件的tar/tar.gz/tar.bz2归档文件路径 | /path/to/etc-ceph.tar.gz | |
X_CSI_DEBUG_MODE | 所有 | 调试模式(rpdb、pdb),默认禁用。 | rpdb | |
X_CSI_ABORT_DUPLICATES | 所有 | 是否终止重复请求(默认排队)。 | false | true |
CSI_MODE=all,控制器和节点服务在同一进程运行),其他模式可能存在问题。X_CSI_SYSTEM_FILES需指向驱动文件系统中可访问的归档文件,内容将解压至/。需由管理员创建该归档,例如:
bash$ 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
安装依赖后,使用具有无密码sudo权限的用户运行:
bash$ ember-csi
项目examples目录提供裸金属和容器化部署的测试示例,默认服务端口为50051。
以LVM驱动为例:
bash$ 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
RBD驱动测试(需将Ceph配置和密钥文件置于/etc/ceph):
bash$ cd examples/baremetal $ ./run.sh rbd
项目提供Dockerfile用于构建容器镜像(如akrog/ember-csi)。容器需以特权模式运行以挂载卷,例如RBD示例:
bash$ cd examples/docker $ ./rbd.sh
通过https://github.com/re***/gocsi/tree/master/csc%E6%A8%A1%E6%8B%9F%E5%AE%B9%E5%99%A8%E7%BC%96%E6%8E%92%E7%B3%BB%E7%BB%9F%E6%93%8D%E4%BD%9C%EF%BC%9A
查看插件信息
bash$ csc identity plugin-info -e tcp://127.0.0.1:50051
创建卷
bash$ csc controller create-volume --cap SINGLE_NODE_WRITER,block --req-bytes 2147483648 disk -e tcp://127.0.0.1:50051
附加卷(裸金属)
bash$ touch tmp/mnt/{staging,publish} $ vol_id=`csc controller list-volumes -e tcp://127.0.0.1:50051|awk '{ print gensub("\"","","g",$1)}'` $ csc controller publish --cap SINGLE_NODE_WRITER,block --node-id `hostname -f` $vol_id -e tcp://127.0.0.1:50051 $ csc node stage --pub-info connection_info="irrelevant" --cap SINGLE_NODE_WRITER,block --staging-target-path `realpath tmp/mnt/staging` $vol_id -e tcp://127.0.0.1:50051 $ csc node publish --cap SINGLE_NODE_WRITER,block --pub-info connection_info="irrelevant" --staging-target-path `realpath tmp/mnt/staging` --target-path `realpath tmp/mnt/publish` $vol_id -e tcp://127.0.0.1:50051
分离卷
bash$ csc node unpublish --target-path `realpath tmp/mnt/publish` $vol_id -e tcp://127.0.0.1:50051 $ csc node unstage --staging-target-path `realpath tmp/mnt/staging` $vol_id -e tcp://127.0.0.1:50051 $ csc controller unpublish --node-id `hostname -f` $vol_id -e tcp://127.0.0.1:50051
删除卷
bash$ csc controller delete-volume $vol_id -e tcp://127.0.0.1:50051
目前仅支持SINGLE_NODE_WRITER访问模式,对SINGLE_NODE_READER_ONLY模式会以读写方式挂载。
通过X_CSI_EMBER_CONFIG环境变量启用日志,默认INFO级别,设置debug: true可开启DEBUG级别:
bashexport X_CSI_EMBER_CONFIG={"project_id":"io.ember-csi","user_id":"io.ember-csi","root_helper":"sudo","plugin_name": "io.ember-csi","disable_logs":false,"debug":true}
支持pdb(标准输入输出调试)和rpdb(4444端口远程调试),通过X_CSI_DEBUG_MODE启用:
bashexport X_CSI_DEBUG_MODE=rpdb
启动后通过SIGUSR1信号切换调试状态:
bash# 裸金属 $ pkill -USR1 ember-csi # 容器(假设容器名为ember-csi) $ docker kill --signal=USR1 ember-csi
调试开启后,下次GRPC请求会触发断点(rpdb会监听127.0.0.1:4444)。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务