OpenEBS Mayastor中创建 DiskPool时使用SPDK访问 NVMe盘
本文将介绍如何使用 SPDK 直接访问 NVMe 设备并在 OpenEBS Mayastor 中创建一个 DiskPool,如果你想要直接通过SPDK 访问NVMe盘而绕过内核,那么需要进行一些额外的工作,你必须将 NVMe 设备从内核中分离出来。
步骤指南
1. 下载并配置 SPDK
1.1 首先,下载 SPDK 源码:
git clone git@github.com:spdk/spdk.git
cd spdk
1.2 配置 SPDK 并查看当前系统的 Hugepages 和 NVMe 设备状态:
sudo ./scripts/setup.sh status
输出示例如下:
Hugepages node hugesize free / total node0 1048576kB
0 / 0 node0 2048kB 566 / 1024 node1 1048576kB
0 / 0 node1 2048kB 1024 / 1024Type BDF Vendor Device NUMA Driver Device
Block devices NVMe 0000:13:00.0 15ad 07f0 0 nvme
nvme0 nvme0n1
2. 将 NVMe 设备绑定到 vfio-pci 驱动程序
使用以下命令将 NVMe 设备绑定到 vfio-pci 驱动程序:
sudo PCI_ALLOWED=0000:13:00.0 ./scripts/setup.sh
3. 创建 DiskPool
创建一个 YAML 文件(例如 disk_pool_01_spdk.yaml),其内容如下:
apiVersion: "openebs.io/v1beta1"
kind: DiskPool
metadata:
name: pool-on-node-1
namespace: mayastor
spec:
node: yangxx01
disks: ["pcie:///0000:13:00.0"]
使用以下命令应用该 YAML 文件以创建 DiskPool:
kubectl apply -f disk_pool_01_spdk.yaml
你应该会看到如下输出:
diskpool.openebs.io/pool-on-node-1 created
4. 查看 DiskPool 状态
使用以下命令查看所有命名空间中的 DiskPool 状态:
kubectl get dsp -A
输出示例如下:
NAMESPACE NAME NODE STATE POOL_STATUS CAPACITY USED AVAILABLE
mayastor pool-on-node-1 yangxx01 Created Online 107265130496 0 107265130496
总结
通过以上步骤,你可以成功配置 SPDK 以通过 PCIe 直接访问 NVMe 设备,并在 OpenEBS Mayastor 中创建一个 DiskPool。如果在执行过程中遇到任何问题,请确保按照每一步的指示操作,并参考相关文档获取更多帮助