一、利用 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格式的配置方式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)