【k8s】SriovNetworkNodePolicy 详解
一、基础定义
SriovNetworkNodePolicy 是 SR‑IOV‑Network‑Operator 提供的 K8s 自定义资源 (CRD),API‑Group:sriovnetwork.openshift.io/v1Red Hat。 作用:对节点上支持 SR‑IOV 的物理网卡 (PF) 下发配置,拆分出虚拟网卡 (VF)、绑定驱动、注册成 K8s 可调度硬件资源,让 Pod 可以独占高速 VF 网卡(DPDK、RDMA、高性能容器网络)。
简单一句话:它就是节点层面 SR‑IOV 网卡的配置单。
二、前置背景:SR‑IOV 基础
- PF(Physical Function):物理网卡本体
- VF(Virtual Function):PF 拆分出来的轻量级虚拟网卡,可以直通给 Pod
- Operator 依靠
SriovNetworkNodePolicy控制每块 PF 生成多少 VF、驱动类型、RDMA 开关、网卡筛选规则
三、核心字段详解
apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetworkNodePolicy
metadata:
name: intel‑25g‑policy
namespace: openshift‑sriov‑operator
spec:
# 1. 资源名称,Pod 调度时请求该硬件资源
resourceName: sriov_left
# 2. 筛选哪些网卡(PF)生效该策略
nicSelector:
vendor: "8086" # 厂商ID 8086=Intel、15b3=Mellanox(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 两种模式
netdevice:VF 作为普通内核网卡,配合 Multus‑CNI 给 Pod 分配二层网络;支持 RDMAvfio‑pci:VF 绑定 vfio 驱动,完整 PCI 直通,供 DPDK、用户态程序接管网卡,不走内核协议栈
4.resourceName
最重要字段;设备插件会把 VF 注册成 k8s 硬件资源,Pod 通过 resources: limits: sriov_left: 1 申请一张虚拟网卡。
此字段作为对外暴露的资源名称,供匹配!
sriov_left 是一个“逻辑标签”,它把 SriovNetwork(网络定义)和 SriovNetworkNodePolicy(节点 VF 配置)关联起来,告诉 Kubernetes:“我要使用名叫 sriov_left 的那组 VF 资源”。
5.nodeSelector
策略只作用于带对应标签的 worker 节点,实现多节点、多网卡分组管理。
四、完整工作流程
- 集群部署
sriov‑network‑operator ,参见 【k8s】SR‑IOV‑Network‑Operator 详解 - 编写并下发
SriovNetworkNodePolicyCR - 节点上的 sriov‑config‑daemon 检测到策略
- 对匹配的 PF 网卡创建指定数量 VF、绑定驱动、配置 eSwitch
- sriov‑device‑plugin 将所有 VF 上报为 K8s 可调度硬件资源
- Pod 声明资源 + Multus 网络注解,即可挂载专属 SR‑IOV 虚拟网卡
五、pf网卡和vf网卡示例
以 220.2 otc为例:查看pf
my-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 off
1、两条命令本质分工
ip a(ip addr show)
只查看网卡本身的 IP 地址、MAC、IPv6
- ens5f0np0 是 PF 物理网卡
- VF0/VF1/VF2/VF3 是从 PF 拆分出来的独立虚拟网卡设备
- VF 属于子设备,不会在父 PF 的 ip‑addr 输出里面展示
- 你看到的 fe80 只是 PF 自身的链路本地 IPv6
ip 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‑VLAN1050;VF1‑1002;VF3‑1003
2、spoof‑checking(伪造 MAC 检查)
- spoof checking on:VF 不能自定义修改 MAC 地址,防止 Pod 篡改 MAC,安全模式
- spoof checking off:允许容器内部修改 VF‑MAC,DPDK、部分高性能业务需要关闭
3、trust on/off
- trust‑on:信任该 VF,允许 VF 开启 VLAN 过滤、修改队列、开启多类硬件卸载;一般 DPDK 业务打开 trust
- trust‑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更多推荐
所有评论(0)