K8S-SRIOV 及 multus CNI 安装

本文介绍了如何在Kubernetes环境中安装和配置SRIOV网络设备插件,包括MultusPlugin、SRIOV-Network-DevicePlugin和SRIOVCNI的详细步骤,以及创建和使用SRIOV网络的pod。通过这些步骤,可以实现VF的自动选取和挂载到pod中,为应用提供高性能网络连接。
摘要由CSDN通过智能技术生成

环境

k8s 版本: v1.22.3
SRIOV 网卡:E810

组件功能

  • Multus Plugin: 多网卡支持。
  • SRIOV-Network-Device Plugin:通过规则实现SR-IOV的VF自动选取。
  • SRIOV CNI:具体干活的,把VF挂载到POD里面,设置MAC,VLAN等等。

SRIOV CNI 安装

git clone https://github.com/intel/sriov-cni.git
cd sriov-cni
make
cp build/sriov /opt/cni/bin
cd /opt/cni/bin
chmod 777 sriov

每个需要创建 vf 的网卡都需要安装

SRIOV network device plugin

可以直接 pull 镜像

docker pull nfvpe/sriov-device-plugin

可以 make image

git clone https://github.com/intel/sriov-network-device-plugin.git
cd sriov-network-device-plugin
make image

同样每个节点都需要

安装

ConfigMap
vendors:devices 可以通过 lspci -nn 进行查询

apiVersion: v1
kind: ConfigMap
metadata:
  name: sriovdp-config
  namespace: kube-system
data:
  config.json: |
    {
        "resourceList": [{
                "resourceName": "intel_sriov_netdevice",
                "resourcePrefix": "intel.com",
                "selectors": {
                    "vendors": ["8086"],
                    "devices": ["1889"],
                    "drivers": ["iavf"]
                }
            }
        ]
    }

sriov-crd.yaml

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: sriov-net1
  annotations:
    k8s.v1.cni.cncf.io/resourceName: intel.com/intel_sriov_netdevice
spec:
  config: '{
  "type": "sriov",
  "cniVersion": "0.3.1",
  "name": "sriov-network",
  "ipam": {
    "type": "host-local",
    "subnet": "10.56.217.0/24",
    "routes": [{
      "dst": "0.0.0.0/0"
    }],
    "gateway": "10.56.217.1"
  }
}'

kubectl create -f sriov-network-device-plugin/deployments/k8s-v1.16/sriovdp-daemonset.yaml

pod 使用

pod-iperf-vf.yaml

apiVersion: v1
kind: Pod
metadata:
  name: iperf-vf
  namespace: default
  annotations:
    k8s.v1.cni.cncf.io/networks: sriov-net1
spec:
  containers:
  - name: iperf-vf
    image: sirot/netperf-latest
    command:
    - sleep
    - "infinity"
    resources:
      requests:
        intel.com/intel_sriov_netdevice: '1'
      limits:
        intel.com/intel_sriov_netdevice: '1'
  nodeSelector:
    kubernetes.io/hostname: master

参考

参考至同事泓宇 https://www.jianshu.com/p/ddd788d2458f

Ubuntu 安装 SRIOV(Software-Defined NVMe over Fabrics)CNI(Container Network Interface)网络通常用于利用虚拟化技术加速容器网络性能。以下是安装步骤: 1. **更新系统**: ``` sudo apt-get update sudo apt-get upgrade ``` 2. **安装依赖包**: ``` sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent lsb-release ``` 3. **添加SRIOV CNI GPG密钥**: ``` curl https://github.com/intel/cilium/blob/master/contrib/install-sriov-cni.sh | bash ``` 4. **配置仓库并安装cni-plugins-sriov**: ``` echo "deb http://apt.cilium.io $(lsb_release -cs) stable main" > /etc/apt/sources.list.d/cilium.list curl -L https://cilium.io/signing_key.asc | sudo apt-key add - sudo apt-get update sudo apt-get install -y cni-plugins-sriov cilium cilium-health ``` 5. **设置CNI配置文件**: 需要在 `/var/lib/cni/networks` 目录下创建一个 `.conf` 文件,例如 `sriov.conf`,内容如下(根据实际网卡和子网信息调整): ```yaml name: sriov type: sr-iov interface: ensX (替换为你的物理网卡名) subnet: 192.168.0.0/24 (你的子网) mtu: 1450 # 可能需要修改为适合的应用层MTU值 ``` 6. **启用SRIOV驱动**: 对于Intel网卡,可以在`/etc/modprobe.d/sriov.conf`中加入以下行(如果有此文件则添加,如果没有则创建): ``` options igb_uio num_vfs=16 ``` 7. **重启网络服务和容器运行时(如Docker)**: ``` sudo systemctl restart docker ``` 8. **验证安装**: 使用`cilium-health`检查CNI连接状态: ``` cilium-health status ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值