×

Pod级绑定对于启用需要高可用性和更高吞吐量的Pod内工作负载至关重要。使用Pod级绑定,您可以从内核模式接口中的多个单根I/O虚拟化(SR-IOV)虚拟功能接口创建绑定接口。SR-IOV虚拟功能被传递到Pod并连接到内核驱动程序。

需要Pod级绑定的一个场景是从不同物理功能上的多个SR-IOV虚拟功能创建绑定接口。从主机上的两个不同物理功能创建绑定接口可用于在Pod级别实现高可用性和高吞吐量。

在执行以下文档中的任何任务之前,请确保您已安装SR-IOV网络操作符

有关创建SR-IOV网络、网络策略、网络附件定义和Pod等任务的指导,请参阅配置SR-IOV网络设备

从两个SR-IOV接口配置绑定接口

绑定允许将多个网络接口聚合到单个逻辑“绑定”接口中。绑定容器网络接口 (Bond-CNI) 将绑定功能引入容器。

可以使用单根I/O虚拟化(SR-IOV)虚拟功能创建Bond-CNI,并将它们放置在容器网络命名空间中。

OpenShift Container Platform仅支持使用SR-IOV虚拟功能的Bond-CNI。SR-IOV网络操作符提供管理虚拟功能所需的SR-IOV CNI插件。不支持其他CNI或接口类型。

先决条件
  • 必须安装和配置SR-IOV网络操作符才能在容器中获取虚拟功能。

  • 要配置SR-IOV接口,必须为每个接口创建一个SR-IOV网络和策略。

  • SR-IOV网络操作符根据定义的SR-IOV网络和策略为每个SR-IOV接口创建一个网络附件定义。

  • linkState设置为SR-IOV虚拟功能的默认值auto

创建绑定网络附件定义

现在SR-IOV虚拟功能可用后,您可以创建绑定网络附件定义。

apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: bond-net1
      namespace: demo
    spec:
      config: '{
      "type": "bond", (1)
      "cniVersion": "0.3.1",
      "name": "bond-net1",
      "mode": "active-backup", (2)
      "failOverMac": 1, (3)
      "linksInContainer": true, (4)
      "miimon": "100",
      "mtu": 1500,
      "links": [ (5)
            {"name": "net1"},
            {"name": "net2"}
        ],
      "ipam": {
            "type": "host-local",
            "subnet": "10.56.217.0/24",
            "routes": [{
            "dst": "0.0.0.0/0"
            }],
            "gateway": "10.56.217.1"
        }
      }'
1 cni-type始终设置为bond
2 mode属性指定绑定模式。

支持的绑定模式为

  • balance-rr - 0

  • active-backup - 1

  • balance-xor - 2

对于balance-rrbalance-xor模式,必须将SR-IOV虚拟功能的trust模式设置为on

3 failover属性对于active-backup模式是必需的,必须设置为1。
4 linksInContainer=true标志通知Bond CNI需要在容器内查找所需的接口。默认情况下,Bond CNI会在主机上查找这些接口,这对于与SRIOV和Multus集成不起作用。
5 links部分定义了哪些接口将用于创建绑定。默认情况下,Multus将附加的接口命名为:“net”,加上一个连续的数字,从1开始。

使用绑定接口创建Pod

  1. 通过使用YAML文件(例如名为podbonding.yaml的文件)创建Pod来测试设置,其内容类似于以下内容

    apiVersion: v1
        kind: Pod
        metadata:
          name: bondpod1
          namespace: demo
          annotations:
            k8s.v1.cni.cncf.io/networks: demo/sriovnet1, demo/sriovnet2, demo/bond-net1 (1)
        spec:
          containers:
          - name: podexample
            image: quay.io/openshift/origin-network-interface-bond-cni:4.11.0
            command: ["/bin/bash", "-c", "sleep INF"]
    1 请注意网络注解:它包含两个SR-IOV网络附件和一个绑定网络附件。绑定附件使用两个SR-IOV接口作为绑定端口接口。
  2. 通过运行以下命令应用yaml

    $ oc apply -f podbonding.yaml
  3. 使用以下命令检查Pod接口

    $ oc rsh -n demo bondpod1
    sh-4.4#
    sh-4.4# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    3: eth0@if150: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue state UP
    link/ether 62:b1:b5:c8:fb:7a brd ff:ff:ff:ff:ff:ff
    inet 10.244.1.122/24 brd 10.244.1.255 scope global eth0
    valid_lft forever preferred_lft forever
    4: net3: <BROADCAST,MULTICAST,UP,LOWER_UP400> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 9e:23:69:42:fb:8a brd ff:ff:ff:ff:ff:ff (1)
    inet 10.56.217.66/24 scope global bond0
    valid_lft forever preferred_lft forever
    43: net1: <BROADCAST,MULTICAST,UP,LOWER_UP800> mtu 1500 qdisc mq master bond0 state UP qlen 1000
    link/ether 9e:23:69:42:fb:8a brd ff:ff:ff:ff:ff:ff (2)
    44: net2: <BROADCAST,MULTICAST,UP,LOWER_UP800> mtu 1500 qdisc mq master bond0 state UP qlen 1000
    link/ether 9e:23:69:42:fb:8a brd ff:ff:ff:ff:ff:ff (3)
    1 绑定接口自动命名为net3。要设置特定接口名称,请在Pod的k8s.v1.cni.cncf.io/networks注解中添加@name后缀。
    2 net1接口基于SR-IOV虚拟功能。
    3 net2接口基于SR-IOV虚拟功能。

    如果在Pod注解中未配置接口名称,则接口名称将自动分配为net,其中1开始。

  4. 可选:如果要设置特定接口名称,例如bond0,请编辑k8s.v1.cni.cncf.io/networks注解并将bond0设置为接口名称,如下所示

    annotations:
            k8s.v1.cni.cncf.io/networks: demo/sriovnet1, demo/sriovnet2, demo/bond-net1@bond0