KVM网络虚拟化及openvswitch

Posted SYWcloud

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVM网络虚拟化及openvswitch相关的知识,希望对你有一定的参考价值。

一、KVM网络虚拟化

1、传统的kvm网络流量:虚拟机--->QEMU网卡--->虚拟化层--->内核网桥--->物理网卡,通过virtio半虚拟化技术可以使虚拟机绕过QEMU网卡直接与虚拟化层进行通信(需要宿主机与虚拟机分别安装virtio驱动,就可以以virtio协议标准进行通信,不需要虚拟化层进行IO的捕获,提升效率)流量路劲为:虚拟机--->虚拟化层--->内核网桥--->物理网卡。

2、centos6之后的版本默认包含virtio的驱动,可通过内核配置文件查看是否包好virtio驱动:

[root@susu ~]# grep -i virtio /boot/config-3.10.0-693.el7.x86_64 
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO_VSOCKETS_COMMON=m
CONFIG_VIRTIO_BLK=m
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_DRM_VIRTIO_GPU=m
CONFIG_VIRTIO=m
# Virtio drivers
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_INPUT=m
# CONFIG_VIRTIO_MMIO is not set

3、配置虚拟机使用virtio有三种方法:

1)用命令行启动虚拟机时加if=virtio参数,指明网卡类型
2)在virt-manager图形界面将NIC网卡类型改为virtio
3)修改虚拟机xml文件,网卡部分内容如下:
 <interface type='direct'>
      <mac address='52:54:00:2d:4c:17'/>
      <source dev='em1' mode='bridge'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

4、全虚拟网卡与半虚拟化网卡性能比较,在centos系列系统中使用全虚拟化网卡大约有物理机50%的性能,而采用virtio半虚拟化可以达到物理网卡性能的70%-80%,windows系统比Linux系统要性能要下降不少,但是总体使用半虚拟化性能比全虚拟化提升50%左右,windows跟驱动有很大关系

二、openvswitch

1、openvswitch源码编译安装

1)到官网下载openvswitch源码包,地址http://www.openvswitch.org/download/,我下载的是openvswitch2.5.4长期支持版本
2)安装依赖包
yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config
yum -y install python-devel openssl-devel kernel-devel kernel-debug-devel libtool wget
3)创建编译目录
mkdir -p ~/rpmbuild/SOURCES
4)将安装包复制到~/rpmbuild/SOURCES目录并解压
cp openvswitch-2.5.5.tar.gz ~/rpmbuild/SOURCES
tar zxvf openvswitch-2.5.4.tar.gz
5)预处理
sed 's/openvswitch-kmod,//g' rhel/openvswitch.spec >rhel/openvswitch_no_kmod.spec
6)构建rpm包
rpmbuild -bb --nocheck openvswitch-2.5.4/rhel/openvswitch_no_kmod.spec
6)安装rpm包
yum localinstall ../RPMS/x86_64/openvswitch-2.5.4-1.x86_64.rpm
7)启动openvswitch,并设置为开机自启动
systemctl start openvswitch.service
systemctl enable openvswitch.service

2、通过git安装

1)先把ovs克隆到本地
git clone https://github.com/openvswitch/ovs.git
2)配置环境预准备
cd ovs
./boot.sh
3)准备环境
./configure
4)编译
make
5)安装
make install
6)检测模块是否装载成功
[root@suyiwen ovs]# lsmod  | grep openvswitch
openvswitch           106996  2 
nf_nat_ipv6            14131  1 openvswitch
nf_defrag_ipv6         35104  2 openvswitch,nf_conntrack_ipv6
nf_nat_ipv4            14115  2 openvswitch,iptable_nat
nf_nat                 26787  4 openvswitch,nf_nat_ipv4,nf_nat_ipv6,nf_nat_masquerade_ipv4
nf_conntrack          133387  8 openvswitch,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c              12644  4 xfs,openvswitch,nf_nat,nf_conntrack
7)配置环境变量并启动ovs
[root@suyiwen ~]#  export PATH=$PATH:/usr/local/share/openvswitch/scripts
[root@suyiwen ~]# ovs-ctl start
Starting ovsdb-server                                      [  OK  ]
system ID not configured, please use --system-id ... failed!
Configuring Open vSwitch system IDs                        [  OK  ]
Starting ovs-vswitchd                                      [  OK  ]
Enabling remote OVSDB managers                             [  OK  ]

3、初步测试ovs

创建名为br0的vswitch并查看状态
[root@suyiwen ~]# ovs-vsctl add-br br0
[root@suyiwen ~]# ovs-vsctl show
f51fc4fe-4a87-4670-a717-2ea0fa426ba2
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
    ovs_version: "2.9.90"


以上是关于KVM网络虚拟化及openvswitch的主要内容,如果未能解决你的问题,请参考以下文章

Docker多主机网络 OpenvSwitch

OpenvSwitch实现Docker容器跨宿主机互联

OpenvSwitch概念和原理

KVM虚拟机&openVSwitch杂记

openvSwitch

OVS