如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
该Intel DLB设备插件为Kubernetes集群提供对Intel DLB设备的支持。
DLB设备插件需要安装并启用Linux内核DLB驱动才能运行。获取DLB软件发行版,按照目录dlb/docs中DLB_Driver_User_Guide.pdf的说明构建并加载dlb2驱动模块。
成功加载模块后,可在设备文件系统中看到可用的dlb设备节点:
bash$ ls -1 /dev/dlb* /dev/dlb0 /dev/dlb1 /dev/dlb2 ...
如果需要配置SR-IOV/VF(虚拟功能),请继续以下配置。本说明使用DPDK工具检查事件设备、解绑VF设备以及将dlb2驱动绑定到VF设备。
为DPDK源代码打补丁以支持DLB:
bash$ wget -q https://fast.dpdk.org/rel/dpdk-21.11.tar.xz -O- | tar -Jx $ wget -q https://downloadmirror.intel.com/734482/dlb_linux_src_release_7.7.0_2022_06_17.txz -O- | tar -Jx $ cd ./dpdk-*/ && patch -p1 < ../dlb/dpdk/dpdk_dlb_*_diff.patch $ sed -i 's/270b,2710,2714/270b,2710,2711,2714/g' ./usertools/dpdk-devbind.py
列出事件设备:
bash$ ./usertools/dpdk-devbind.py -s | grep -A10 ^Eventdev Eventdev devices using kernel driver ==================================== 0000:6d:00.0 'Device 2710' drv=dlb2 unused= 0000:72:00.0 'Device 2710' drv=dlb2 unused= ...
启用虚拟功能:
bash$ echo 4 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/sriov_numvfs
注意: 如果失败并提示"No such file or directory",可能是因为设备已绑定到vfio-pci驱动。请将设备绑定到dlb2驱动。
检查是否出现新的dlb设备节点:
bash$ ls -1 /dev/dlb* /dev/dlb0 /dev/dlb1 /dev/dlb10 /dev/dlb11 ... /dev/dlb8 /dev/dlb9
检查是否出现新的事件设备:
bash$ ./usertools/dpdk-devbind.py -s | grep -A14 ^Eventdev Eventdev devices using kernel driver ==================================== 0000:6d:00.0 'Device 2710' drv=dlb2 unused= 0000:6d:00.1 'Device 2711' drv=dlb2 unused= 0000:6d:00.2 'Device 2711' drv=dlb2 unused= 0000:6d:00.3 'Device 2711' drv=dlb2 unused= 0000:6d:00.4 'Device 2711' drv=dlb2 unused= 0000:72:00.0 'Device 2710' drv=dlb2 unused= ...
将PF资源分配给VF:
注意: 以下过程仅针对4个资源中的第一个vf资源。对
/sys/bus/pci/devices/0000\:6d\:00.0/中的其他vfN_resources重复此过程,然后将dlb2驱动绑定到对应vfN_resources的0000:6d:00.M。
bash$ sudo ./usertools/dpdk-devbind.py --unbind 0000:6d:00.1
bash$ echo 2048 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_atomic_inflights && echo 2048 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_dir_credits && echo 64 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_dir_ports && echo 2048 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_hist_list_entries && echo 8192 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_ldb_credits && echo 64 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_ldb_ports && echo 32 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_ldb_queues && echo 32 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_sched_domains && echo 2 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_sn0_slots && echo 2 | sudo tee -a /sys/bus/pci/devices/0000\:6d\:00.0/vf0_resources/num_sn1_slots
bash$ sudo ./usertools/dpdk-devbind.py --bind dlb2 0000:6d:00.1
运行libdlb示例应用:
注意: 另一种方法是使用此https://github.com/intel/intel-device-plugins-for-kubernetes/blob/main/demo/dlb-libdlb-demo/Dockerfile%E8%BF%90%E8%A1%8C%E6%B5%8B%E8%AF%95%E3%80%82
bash$ ls dlb dpdk-21.11 $ cd ./dlb/libdlb/ && make && sudo LD_LIBRARY_PATH=$PWD ./examples/dir_traffic -n 128 -d 1 # 若要测试/dev/dlbN,将1替换为N。
运行DPDK示例应用:
注意: 另一种方法是使用此https://github.com/intel/intel-device-plugins-for-kubernetes/blob/main/demo/dlb-dpdk-demo/Dockerfile%E4%BF%AE%E8%A1%A5%E5%92%8C%E6%9E%84%E5%BB%BADPDK%E5%B9%B6%E8%BF%90%E8%A1%8C%E6%B5%8B%E8%AF%95%E3%80%82
bash$ sudo apt-get update && sudo apt-get install build-essential meson python3-pyelftools libnuma-dev python3-pip && sudo pip install ninja # 此配置基于Ubuntu/Debian发行版。对于不使用apt的其他发行版,请通过其他方式安装依赖。 $ ls dlb dpdk-21.11 $ cd ./dpdk-* && meson setup --prefix $(pwd)/installdir builddir && ninja -C builddir install
bashsudo ./builddir/app/dpdk-test-eventdev --no-huge --vdev='dlb2_event,dev_id=1' -- --test=order_queue --nb_flows 64 --nb_pkts 512 --plcores 1 --wlcores 2-7 # 若要测试/dev/dlbN,将1替换为N。
以下部分详细介绍如何获取、构建、部署和测试DLB设备插件。
示例展示了如何通过DaemonSet或按节点手动部署插件。
该组件的https://hub.docker.com/r/intel/intel-dlb-plugin%E5%8F%AF%E5%9C%A8Docker Hub获取。这些镜像会从本仓库的最新main分支自动构建并上传至hub。
组件的发布标签镜像也可在Docker Hub获取,标签格式为x.y.z,对应本仓库中的分支和版本。因此,在集群中部署插件的最简单方法是运行以下命令:
bash$ kubectl apply -k 'https://github.com/intel/intel-device-plugins-for-kubernetes/deployments/dlb_plugin?ref=<RELEASE_VERSION>' daemonset.apps/intel-dlb-plugin created
其中<RELEASE_VERSION>需要替换为所需的https://github.com/intel/intel-device-plugins-for-kubernetes/tags%E6%88%96%60main%60%E4%BB%A5%E8%8E%B7%E5%8F%96%60devel%60%E9%95%9C%E5%83%8F%E3%80%82
可通过在节点上搜索相关资源分配状态来验证插件是否已注册:
bash$ kubectl get nodes -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{range $k,$v:=.status.allocatable}}{{" "}}{{$k}}{{": "}}{{$v}}{{"\n"}}{{end}}{{end}}' | grep '^\([^ ]\)\|\( dlb\)' master dlb.intel.com/pf: 7 dlb.intel.com/vf: 4
可通过部署提供的示例测试镜像(dlb-libdlb-demo和dlb-dpdk-demo)来测试插件是否正常工作。
构建Docker镜像并创建基于本地Docker镜像运行单元测试的pod:
bash$ make dlb-libdlb-demo ... Successfully tagged intel/dlb-libdlb-demo:devel $ kubectl apply -f ${INTEL_DEVICE_PLUGINS_SRC}/demo/dlb-libdlb-demo-pod.yaml pod/dlb-libdlb-demo-pod created
bash$ make dlb-dpdk-demo ... Successfully tagged intel/dlb-dpdk-demo:devel $ kubectl apply -f ${INTEL_DEVICE_PLUGINS_SRC}/demo/dlb-dpdk-demo-pod.yaml pod/dlb-dpdk-demo-pod created
等待pod完成:
bash$ kubectl get pods | grep dlb-.*-demo NAME READY STATUS RESTARTS AGE dlb-dpdk-demo 0/2 Completed 0 79m dlb-libdlb-demo 0/2 Completed 0 18h
查看作业日志:
bash$ kubectl logs dlb-libdlb-demo <pf/vf> <日志输出>
bash$ kubectl logs dlb-dpdk-demo <pf/vf> <日志输出>
如果pod未能成功启动(可能是因为无法获取DLB资源),它将处于Pending状态:
bash$ kubectl get pods NAME READY STATUS RESTARTS AGE dlb-dpdk-demo 0/2 Pending 0 3s dlb-libdlb-demo 0/2 Pending 0 10s
可通过检查pod的事件来确认:
bash$ kubectl describe pod dlb-libdlb-demo | grep -A3 Events: Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 85s default-scheduler 0/1 nodes are available: 1 Insufficient dlb.intel.com/pf, 1 Insufficient dlb.intel.com/vf.
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务