
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
DatenLord是下一代云原生分布式存储平台,旨在满足微服务、无服务器、AI等下一代云原生应用对性能关键型存储的需求。一方面,它具备分布式、容错、平滑升级等云原生特性,易于使用和维护;另一方面,作为面向应用的存储系统,它针对数据库、AI机器学习、大数据等性能关键场景进行优化,为容器提供高性能存储服务,助力Kubernetes(K8S)上的有状态应用运行。其高性能得益于对NVMe、非易失性内存、异步编程及Linux原生异步IO等软硬件技术革新的应用。
DatenLord的构建基于两方面原因:
硬件架构革命驱动存储软件重构
近10年Linux内核存储功能未显著变化,而存储设备已从HDD发展到SSD、NVMe及非易失性内存。HDD延迟约1~10ms,SSD约50–150μs,NVMe约25μs,非易失性内存仅350ns。传统阻塞/同步IO效率低下,Linux内核推出原生异步IO机制io_uring提升性能。同时,现代编程语言通过异步编程、协程等在用户空间管理异步IO任务,避免阻塞IO的上下文切换开销。DatenLord充分利用这些技术,构建下一代存储系统。
解决计算存储分离架构的IO性能问题
多数分布式/云原生系统采用计算与存储分离架构,虽简化维护,但数据规模增长导致IO效率低下(如AI训练加载数据1小时,训练仅45分钟)。应用需处理数据位置、访问成本差异等问题。DatenLord通过抽象异构存储细节,使数据位置、访问成本等对应用透明;让应用假设所有数据本地可访问,由DatenLord代理访问;结合K8S调度任务至缓存数据附近,利用本地、邻居及远程缓存加速数据访问。
DatenLord的主要场景是在多云、混合云、多数据中心等环境中实现高可用性。许多在线业务对 downtime 零容忍,需通过多云、混合云、多数据中心部署避免单点故障。应用服务跨环境部署相对容易,但因数据量大,难以实时复制所有数据至各环境,导致数据不可用仍可能引发业务故障。
DatenLord通过多层缓存(本地、邻居、远程等)缓解云或数据中心故障导致的数据不可用。在线业务的热数据规模通常有限(数据局部性),DatenLord利用此特性构建大规模分布式自动缓存层,智能缓冲热数据,具有以下优势:
!DatenLord Architecture
DatenLord采用主从架构,为提升存储性能,与K8S紧密耦合部署,以利用数据局部性加速访问。架构中绿色为DatenLord组件,蓝色为K8S组件,黄色为容器化应用。主要组件包括:主节点(DatenLord)、从节点(Daten Sklavin)及K8S插件。
包含三部分:
包含四部分:
包含容器存储接口(CSI)驱动和自定义过滤器:
DatenLord已构建为Docker镜像,可通过K8S部署。
K8S部署步骤
生成部署配置文件:
sed -e 's/e2e_test/latest/g' scripts/datenlord.yaml > datenlord-deploy.yaml
应用部署配置:
kubectl apply -f datenlord-deploy.yaml
使用DatenLord存储
定义使用DatenLord存储类的PVC,然后部署使用该PVC的Pod:
yamlcat <<EOF >datenlord-demo.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-datenlord-test spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 100Mi storageClassName: csi-datenlord-sc --- apiVersion: v1 kind: Pod metadata: name: mysql-datenlord-test spec: containers: - name: mysql image: docker.xuanyuan.run/mysql env: - name: MYSQL_ROOT_PASSWORD value: "rootpasswd" volumeMounts: - mountPath: /var/lib/mysql name: data subPath: mysql volumes: - name: data persistentVolumeClaim: claimName: pvc-datenlord-test EOF kubectl apply -f datenlord-demo.yaml
自定义调度器
DatenLord提供实现K8S https://github.com/kubernetes/enhancements/blob/0e4d5df19d396511fe41ed0860b0ab9b96f46a2d/keps/sig-scheduling/1819-scheduler-extender/README.md%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E8%B0%83%E5%BA%A6%E5%99%A8%EF%BC%8C%E5%8F%AF%E5%B0%86Pod%E8%B0%83%E5%BA%A6%E8%87%B3%E8%AF%B7%E6%B1%82%E5%8D%B7%E6%89%80%E5%9C%A8%E8%8A%82%E7%82%B9%E3%80%82%E4%BD%BF%E7%94%A8%E6%97%B6%EF%BC%8C%E5%9C%A8Pod spec中添加schedulerName: datenlord-scheduler。注意:悬空Docker镜像可能导致failed to parse request错误,可在各K8S节点执行docker image prune修复。
CSI快照功能(如需)
使用K8S CSI快照功能需安装快照CRD和控制器:
bashkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
DatenLord监控指南见datenlord monitoring,提供YAML和Helm两种部署方式。
YAML部署
bashsh ./scripts/datenlord-monitor-deploy.sh
Helm部署
bashsh ./scripts/datenlord-monitor-deploy.sh helm
欢迎任何对DatenLord感兴趣的人贡献代码。
请遵循编码风格。DatenLord采用严格的clippy linting,提交PR前需修复所有clippy警告,并确保通过所有CI测试。
DatenLord使用GitHub Action实现CI,包含两个工作流:
CSI E2E测试 setup 较复杂,工作流脚本cron.yml步骤如下:
ginkgo -p并行执行,仅选择External.Storage相关CSI E2E测试用例。DatenLord包含多个相关子项目(多数开发中),按字母顺序列出:
io_uring您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务