创建基于SRIOV的KVM虚拟机

创建基于SRIOV的KVM虚拟机,第1张

本文来自微信公众号“ICT大融合”。

一、利用 iso 创建虚机

1.       安装环境:

适用于centos/redhat.

2.       安装准备:

yum -y install kvm

yum -y install qemu-kvmpython-virtinst libvirt libvirt-python virt-manager libguestfs-toolsbridge-utils virt-install

systemctl startlibvirtd.service

systemctl enablelibvirtd.service

3.       构建虚拟网络:

brctl addbr br0

brctl addif br0 ens6np0

注:ens6np0是netreonome CX-25G智能网卡,

[root@test4 vms]# ethtool -i ens6np0

driver: nfp

version: rev-2020.01.13.0820.a3cf8e9 (o-

firmware-version: 0.0.3.5 0.30 sriov-2.1.16.1nic

expansion-rom-version:

bus-info: 0000:02:00.0

4.       安装虚拟机

mkdir  -p /home/vms/

virt-install --virt-type=kvm --name=centos88 --vcpus=2--memory=4096 --location=/home/CentOS-7-x86_64-DVD-1908.iso --diskpath=/home/vms/centos88.qcow2,size=40,format=qcow2 --network bridge=br0--graphics none --extra-args='console=ttyS0' –force

注:

安装镜像iso一定放在/home/或其他可访问目录,否则提示没有 *** 作权限。

然后一路按照提示,设置相应参数,直到虚拟机构建完成。

安装完成之后,用virshlish查看虚拟机状态。

[root@test4 vms]# virsh list

 Id   Name                          State

----------------------------------------------------

 2     centos88                      running

以上是虚拟机的网卡是基于virtio并接入主机的bridge,用ps可以看到相应进程。

[root@test4 ~]# ps -e |grep kvm

15484 ?       00:00:38 qemu-kvm

15491 ?       00:00:00 kvm-pit/15484

18406 ?       00:00:14 qemu-kvm

18413 ?       00:00:00 kvm-pit/18406

[root@test4 ~]# ps -e |grep vhost

15486 ?       00:00:00 vhost-15484

18408 ?       00:00:00 vhost-18406

二、用通过镜像创建基于 SRIOV 虚拟机。

1.       创建vf :

echo 2 >/sys/class/net/ens6np0/device/sriov_numvfs

可以用如下命令查看,

lspci -kd 19ee:

lspci | grep -i ethernet

注意:19ee是netreonome的PCI vendor ID号。

2.       创建虚拟机镜像文件:

cp centos88.qcow2 centos7.200.qcow2

chown qemu:qemu centos7.200.qcow2

cp centos88.xml centos7.200.xml

3.       修改配置文件

vi centos7.200.xml

其中,uuid采用uuidgen 命令生成。

选项Interface进行修改,Mac地址随便改一个,不重复就行。关键是修改vf的PCI地址,用lspci获取。

virsh define centos7.200.xml

4.       创建磁盘:

qemu-img create /home/vms/centos200.img 40G

5.       启动虚机:

virsh start centos200

三、常见命令

virsh基本命令:

virsh list                 # 查看在运行的虚拟机

virsh dumpxml vm-name      # 查看kvm虚拟机配置文件

virsh start vm-name        # 启动kvm虚拟机

virsh shutdown vm-name     # 正常关机

virsh destroy vm-name      # 非正常关机,强制关闭虚拟机(相当于物理机直接拔掉电源)

virsh undefine vm-name     # 删除vm的配置文件

ls /etc/libvirt/qemu

# 查看删除结果,Centos-6.6的配置文件被删除,但磁盘文件不会被删除

virsh define file-name.xml # 根据配置文件定义虚拟机

virsh suspend vm-name      # 挂起,终止

virsh resumed vm-name      # 恢复被挂起的虚拟机

virsh autostart vm-name    # 开机自启动vm

virsh console <虚拟机名称>   # 连接虚拟机

virt-install参数:

–name指定虚拟机名称

–memory分配内存大小。

–vcpus分配CPU核心数,最大与实体机CPU核心数相同

–disk指定虚拟机镜像,size指定分配大小单位为G。

–network网络类型,此处用的是默认,一般用的应该是bridge桥接。

–accelerate加速

–cdrom指定安装镜像iso

–vnc启用VNC远程管理,一般安装系统都要启用。

–vncport指定VNC监控端口,默认端口为5900,端口不能重复。

–vnclisten指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。

–os-type=linux,windows

–os-variant=rhel6

--name 指定虚拟机名称

--ram 虚拟机内存大小,以 MB 为单位

--vcpus 分配CPU核心数,最大与实体机CPU核心数相同

–-vnc 启用VNC远程管理,一般安装系统都要启用。

–-vncport 指定VNC监控端口,默认端口为5900,端口不能重复。

–-vnclisten 指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。

--network 虚拟机网络配置

  #其中子选项,bridge=br0 指定桥接网卡的名称。

–os-type=linux,windows

–os-variant=rhel7.2

--disk 指定虚拟机的磁盘存储位置

  #size,初始磁盘大小,以 GB 为单位。

--location 指定安装介质路径,如光盘镜像的文件路径。

--graphics 图形化显示配置

  #全新安装虚拟机过程中可能会有很多交互 *** 作,比如设置语言,初始化 root 密码等等。

--extra-args 根据不同的安装方式设置不同的额外选项

kubernetes 1.16+ 这里一定注意版本。只可更高,不可小于该版本。

安装好flannel网络插件。multus CNI安装的必须要求,除了SRIOV CNI之外,仍需装上其他的CNI。

开启iommu,bios开启vx-d之类

其余查看网卡的 *** 作参考链接1

这里需要创建好VF!!!

注意CNI需要放在所有可以运行SRIOV的work节点上。如果master节点也跑pod的话也需要执行下面的 *** 作

这里可能遇到境内环境无法make的情况。找台墙外主机编译好将sriov拷贝进来即可。注意安装go环境

ls /opt/cni/bin 可以看到sriov权限可执行

build镜像 与pull镜像 二选一。(每个节点上都要这么做)

If you want to build the docker image locally then follow the following steps:

On a successful build, a docker image with tag nfvpe/sriov-device-plugin:latest will be created. You will need to build this image on each node. Alternatively, you could use a local docker registry to host this image.

可以看到有image

可以看到有image

resourceName和resourcePrefix 遵循命名规范即可,同时记住这两个参数,后面要用到。

selectors里面的信息来自下图:

https://github.com/intel/multus-cni/blob/master/doc/quickstart.md

至此所有配置完成,我们可以简单检查下环境是否OK。

目的是为了检查work节点是否可以提供sriov能力

正常情况下,圈中数字应与该节点VF数量一致。若为0说明不可用。

不可用原因:上述的configMap.yaml配置有问题,或者该节点sriov有问题,没有创建VF。具体原因可通过下一章节的内容,进入该节点sriov device plugin 的pod 查看日志。

目的是为了查看sriov device plugin 是否工作正常。

查看work节点的sriov device plugin容器日志,检查下是否有下述类似正确以及健康的内容出现.

修改第6行,信息来自sriov-crd.yaml

修改16行,信息来自configMap.yaml

修改18行,信息来自configMap.yaml

可以看到pod内部网卡分配的IP为sriov-crd.yaml设置的网段。可以多建几个pod。可以互ping。

同时如果此时进入到work节点,通过ip a命令会发现work节点上少了vf,因为此时部分vf已经被转入对应容器的namespace之下,所以在宿主节点上无法看到。

参考文档

https://community.mellanox.com/s/article/howto-configure-sr-iov-for-connect-ib-connectx-4-with-kvm--infiniband-x

里面intel_iommu=on iommu=pt都是on的状态,说明已经开启了

看到virt_enabled 2,说明已经开启了

找到ConnectX-6硬件的MST(Mellanox Software Tools)编号,在下面输出里,对应的是/dev/mst/mt4123_pciconf0

检查SRIOV配置,看到还没有使能

配置EN和NUM

在ConnectX-6以前,这里重启PCI设备就可以生效了

但是在当前19.3.24,对于ConnectX-6 HCA,需要重启服务器才能进行后面的步骤

重新开机后检查配置

检查、配置vf数量,因为还没配置,所以是0

这里我测试把OFED驱动中的vf数量配置成1

在PCI总线上,用lspci可以看到ConnectX-6对应的设备出现了多次,其中Function 1是刚才配置好的Virtual Function

在ibdev2netdev输出中也可以看到,和04:00.1这个Virtual Function,对应的ib2和mlnx5_4设备

ibstat检查这个Virtual Function,看到这个设备还没有Node GUID和Port GUID

为VF配置GUID。这里我把Physical Function的GUID加1,作为第一个Virtual Fucntion的GUID。

重新绑定PCI Function到MLNX OFED驱动,让上面的配置生效。

之后virt-dumpxml可以看到xml格式的配置方式。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/8116113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存