【k8s】SriovNetworkNodePolicy 详解 一、基础定义SriovNetworkNodePolicy是SR‑IOV‑Network‑Operator提供的K8s 自定义资源 (CRD)API‑Groupsriovnetwork.openshift.io/v1Red Hat。 作用对节点上支持 SR‑IOV 的物理网卡 (PF) 下发配置拆分出虚拟网卡 (VF)、绑定驱动、注册成 K8s 可调度硬件资源让 Pod 可以独占高速 VF 网卡DPDK、RDMA、高性能容器网络。简单一句话它就是节点层面 SR‑IOV 网卡的配置单。二、前置背景SR‑IOV 基础PFPhysical Function物理网卡本体VFVirtual FunctionPF 拆分出来的轻量级虚拟网卡可以直通给 PodOperator 依靠SriovNetworkNodePolicy控制每块 PF 生成多少 VF、驱动类型、RDMA 开关、网卡筛选规则三、核心字段详解apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: intel‑25g‑policy namespace: openshift‑sriov‑operator spec: # 1. 资源名称Pod 调度时请求该硬件资源 resourceName: intel‑25g‑vf # 2. 筛选哪些网卡(PF)生效该策略 nicSelector: vendor: 8086 # 厂商ID 8086Intel、15b3Mellanox(NVIDIA) deviceID: 158b # 网卡设备ID rootDevices: [0000:3b:00.0] # PF 的PCI地址 pfNames: [ens1f0] # 网卡名 # 3. 需要创建多少个VF numVfs: 16 # 4. VF绑定驱动类型 # netdevice内核网卡vfio‑pci用户态直通(DPDK) deviceType: netdevice # 5. 匹配哪些工作节点 nodeSelector: kubernetes.io/hostname: worker‑01 # 6. RDMA开启用于IB/RoCE高速网络 isRdma: false # 7. 策略优先级数值越小优先级越高多策略匹配同一块网卡时生效 priority: 0 # 8. 网卡类型ethernet / IB(InfiniBand) linkType: ethernet # 9. 开启vhost‑net用于DPDK vhost needVhostNet: false # 10. 网卡交换模式Mellanox网卡常用 switchdev(eswitch) eSwitchMode: legacy关键字段分类网卡筛选 nicSelector通过厂商 ID、设备 ID、PCI 地址、网卡名定位节点上的物理网卡 PF支持多网卡批量匹配。VF 数量 numVfs设置该 PF 拆分多少虚拟网卡修改 VF 数量经常需要节点重启生效Mellanox 增加 VF 必重启Red Hat。deviceType 两种模式netdeviceVF 作为普通内核网卡配合 Multus‑CNI 给 Pod 分配二层网络支持 RDMAvfio‑pciVF 绑定 vfio 驱动完整 PCI 直通供 DPDK、用户态程序接管网卡不走内核协议栈4.resourceName最重要字段设备插件会把 VF 注册成 k8s 硬件资源Pod 通过resources: limits: intel‑25g‑vf: 1申请一张虚拟网卡。此字段作为对外暴露的资源名称供匹配5.nodeSelector策略只作用于带对应标签的 worker 节点实现多节点、多网卡分组管理。四、完整工作流程集群部署sriov‑network‑operator 参见 【k8s】SR‑IOV‑Network‑Operator 详解编写并下发SriovNetworkNodePolicyCR节点上的 sriov‑config‑daemon 检测到策略对匹配的 PF 网卡创建指定数量 VF、绑定驱动、配置 eSwitchsriov‑device‑plugin 将所有 VF 上报为 K8s 可调度硬件资源Pod 声明资源 Multus 网络注解即可挂载专属 SR‑IOV 虚拟网卡五、pf网卡和vf网卡示例以 220.2 otc为例查看pfmy-workload-workload-worker-0-10-225-219-20:~ # ip a show ens5f0np0 4: ens5f0np0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1800 qdisc mq state UP group default qlen 1000 link/ether 50:7c:6f:79:46:64 brd ff:ff:ff:ff:ff:ff altname enp23s0f0np0 inet6 fe80::527c:6fff:fe79:4664/64 scope link proto kernel_ll valid_lft forever preferred_lft forever my-workload-workload-worker-0-10-225-219-20:~ # ip link show ens5f0np0 4: ens5f0np0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1800 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 50:7c:6f:79:46:64 brd ff:ff:ff:ff:ff:ff vf 0 link/ether 0a:42:e5:c3:aa:dd brd ff:ff:ff:ff:ff:ff, vlan 1050, spoof checking off, link-state auto, trust on vf 1 link/ether da:b5:08:d7:5e:10 brd ff:ff:ff:ff:ff:ff, vlan 1002, spoof checking on, link-state auto, trust off vf 2 link/ether 22:0f:0d:5c:33:3c brd ff:ff:ff:ff:ff:ff, vlan 1050, spoof checking off, link-state auto, trust on vf 3 link/ether aa:7f:93:98:cc:34 brd ff:ff:ff:ff:ff:ff, vlan 1003, spoof checking on, link-state auto, trust off1、两条命令本质分工ip aip addr show只查看网卡本身的 IP 地址、MAC、IPv6ens5f0np0 是 PF 物理网卡VF0/VF1/VF2/VF3 是从 PF 拆分出来的独立虚拟网卡设备VF 属于子设备不会在父 PF 的 ip‑addr 输出里面展示你看到的 fe80 只是 PF 自身的链路本地 IPv6ip link show ens5f0np0专门展示链路层硬件属性 SR‑IOV 下属全部 VF 配置内核会把所有 VF 的 MAC、VLAN、spoof‑check、trust 挂载在父 PF 链路信息下面所以这里能看到 4 台 VF。2. 逐条解析你现在 4 个 VF 参数vf 0 link/ether 0a:42:e5:c3:aa:dd brd ff:ff:ff:ff:ff:ff, vlan 1050, spoof checking off, link-state auto, trust on vf 1 link/ether da:b5:08:d7:5e:10 brd ff:ff:ff:ff:ff:ff, vlan 1002, spoof checking on, link-state auto, trust off vf 2 link/ether 22:0f:0d:5c:33:3c brd ff:ff:ff:ff:ff:ff, vlan 1050, spoof checking off, link-state auto, trust on vf 3 link/ether aa:7f:93:98:cc:34 brd ff:ff:ff:ff:ff:ff, vlan 1003, spoof checking on, link-state auto, trust off参数释义1、vlan xxx该 VF 被打上指定 VLAN 标签是 SriovNetwork / Multus‑CNI 下发的配置。VF0、VF2‑VLAN1050VF1‑1002VF3‑10032、spoof‑checking伪造 MAC 检查spoof checkingonVF 不能自定义修改 MAC 地址防止 Pod 篡改 MAC安全模式spoof checkingoff允许容器内部修改 VF‑MACDPDK、部分高性能业务需要关闭3、trust on/offtrust‑on信任该 VF允许 VF 开启 VLAN 过滤、修改队列、开启多类硬件卸载一般 DPDK 业务打开 trusttrust‑off受限模式普通容器网络默认关闭4、link‑state auto VF 链路状态跟随上层交换机自动感应链路通断。六、快速排查命令验证 VF 状态bash# 查看当前PF开启多少VF cat /sys/class/net/ens5f0np0/device/sriov_numvfs # 列出全部VF的PCI地址 ls -l /sys/class/net/ens5f0np0/device/virtfn* # 查看VF绑定驱动确认是否为vfio‑pci lspci -k | grep -i virtual

相关新闻

最新新闻

安卓恶意样本「天眼查询系统」分析与防护方案

安卓恶意样本「天眼查询系统」分析与防护方案

1. 恶意样本「天眼查询系统」的发现与特征分析 2023年第三季度,安全研究团队在例行监测中发现一个名为「天眼查询系统」的可疑安卓应用。该样本体积仅为3.99MB,却具备完整的恶意行为链。通过静态分析发现,其伪装成企业信息查询工具&#xff0…

2026/8/9 7:45:53
Python实现百度贴吧自动签到脚本开发指南

Python实现百度贴吧自动签到脚本开发指南

1. 项目背景与需求分析 贴吧自动签到是个存在多年的需求场景。作为国内最大的兴趣社区平台,百度贴吧的等级体系与连续签到机制,催生了大量"养号"需求。传统手动签到方式存在几个痛点: 账号数量多时操作繁琐(特别是批量…

2026/8/9 7:45:53
服装电商详情页性能优化实战与关键指标

服装电商详情页性能优化实战与关键指标

1. 为什么服装电商详情页需要性能优化 去年双十一大促期间,我们团队负责的某服装品牌旗舰店遭遇了严重的性能问题。当流量峰值达到每秒3000次访问时,商品详情页的平均加载时间从平时的2.1秒飙升到8.7秒,直接导致转化率下降37%。这个惨痛教训让…

2026/8/9 7:45:53
突破技术项目天花板:从“能跑”到“能赢”的工程化实践

突破技术项目天花板:从“能跑”到“能赢”的工程化实践

最近在技术社区和开发者圈子里,一个现象引发了广泛讨论:很多曾经在特定领域(比如华南地区的某个技术赛事)取得过不错成绩的团队或个人,似乎陷入了“亚军魔咒”——能稳定进入决赛圈,却总是与最高荣誉失之交…

2026/8/9 7:45:53
网络状态可视化:用动态UI提升前端应用体验与可观测性

网络状态可视化:用动态UI提升前端应用体验与可观测性

最近在逛一些技术社区和开发者论坛时,发现一个现象:很多开发者,尤其是前端和全栈方向的,对“网络协议”和“UI/UX设计”的认知是割裂的。协议是后端和网络工程师的事,配色和动效是设计师的事。这种割裂导致一个结果&am…

2026/8/9 7:45:53
ServiceStack在鸿蒙平台的Flutter集成实践

ServiceStack在鸿蒙平台的Flutter集成实践

1. 项目背景与核心价值 ServiceStack作为Flutter生态中知名的企业级服务集成框架,其Message-based架构设计在跨平台服务调用中一直保持着独特优势。近期我们在金融行业移动端项目中,成功将其适配到鸿蒙平台,实现了Flutter与HarmonyOS的无缝集…

2026/8/9 7:40:53