0

我了解,SR-IOV 使物理 NIC 能够被“视为”为多个设备并单独使用。(请参阅此处。)虽然以下示例来自Charmed Kubernetes,但它代表了在 pod 中使用 SR-IOV 的一般机制。

我的问题如下。如果有另一个pod定义(类似于下面的定义),我可以让那个 pod 专门使用特定的“设备”吗?相反,其他pod定义会与之前定义的共享“设备”pod吗?或者,SR-IOV 是否仅适用于多宿主吊舱?

apiVersion: v1
kind: Pod
metadata:
  name: ubuntu
  namespace: default
  annotations:
    k8s.v1.cni.cncf.io/networks: sriov
spec:
  containers:
  - name: ubuntu
    image: ubuntu:20.04
    command: ['sleep', '3600']
    resources:
      requests:
        intel.com/intel_sriov_netdevice: '1'
      limits:
        intel.com/intel_sriov_netdevice: '1'
4

1 回答 1

0

请参阅SR-IOV CNI 页面,尤其是。参数运行时配置部分。

CNI 插件通常需要为其管理的 pod 接口处理 MAC 和 IP 地址分配。对于SR-IOV CNI来说,Pod接口的MAC地址,即发出的包中的源MAC地址,就是Pod接口绑定的网卡中PCI VF的MAC地址。因此,SR-IOV CNI 允许通过以下两种方式之一分配 MAC 地址:

  • 在 SR-IOV CNI 的配置文件中,集群管理员可以根据其 PCI 总线设备功能地址为特定 VF 指定 MAC 地址。请参阅参数
  • 在 pod 元数据中,K8s API 用户可以指定网络和 MAC 地址作为注解。请参阅运行时配置。如果它是有效 MAC,SR-IOV CNI 将使用此 MAC 配置所选 VF。

我可以让那个吊舱专门使用特定的“设备”吗?

定义术语“设备”。您可以在 pod 元数据中选择一个 MAC,该 MAC 将应用于选择的任何 VF。我不认为你可以选择 VF,因为这违反了让编排器(Kubernetes)管理集群中的资源的原则。

相反,其他 pod 定义是否会与之前定义的 pod 共享“设备”?

如果“设备”表示一个 VF,则它不能在多个 pod 之间共享。它作为 PCI 设备传递到特定 pod 中的特定容器。该 VF 的所有 PCI 交互——内存映射 IO(用于寄存器读/写)、DMA 和中断——一次只能映射到一个用户空间域(在此上下文中为容器)。

或者,SR-IOV 是否仅适用于多宿主吊舱?

多宿主 Pod 是指 Pod 具有多个接口。任何使用 SR-IOV 的 pod 都必须是多宿主的,因为您将首先使用 Multus CNI 创建多个接口,主接口位于您的默认 CNI 上,另一个接口位于 SR-IOV CNI 上。

于 2021-09-28T16:21:55.700 回答