最近为了安装ovs,可废了老大劲了,按照网上的教程安装基本都会出现各种各样的报错,最终安装失败。最后还是官方的文档比较好,按照ovs网址上的步骤操作下来,结果还真行了,下面是我的安装步骤,以及参考的链接,希望可以给你带来一些帮助。
OVS安装过程
官网安装指导(ahttps://docs.openvswitch.org/en/latest/intro/install/general/)
参考博客(https://www.cnblogs.com/popsuper1982/p/3800431.html)
参考博客(https://www.cnblogs.com/manmanchanglu/p/11787279.html)
[1]、安装之前,执行命令apt-get install build-essential,apt-get install openssl确保这两个已经被安装,执行命令:sudo apt-get install python,sudo apt-get install python-pip,安装python和pip避免后面执行的时候报错。此外,还需要了解自己系统的内核版本,进而选择匹配的Open vSwitch版本,具体的匹配表格如下,详细参见https://docs.openvswitch.org/en/latest/faq/releases/;http://www.openvswitch.org/download/。
[2]、执行命令uname -a查看当前系统的内核版本,如下图我的内核版本为5.4.0,所以接下来我下载2.14.x版本的ovs,使用命令wget http://openvswitch.org/releases/openvswitch-2.14.0.tar.gz。
然后执行命令 tar -xzf openvswitch-2.14.0.tar.gz,进行解压,解压完成后,进入openvswitch-2.14.0目录下,cd openvswitch-2.14.0。
[3]、接下来,使用命令ls /lib/modules/查看本系统的内核源码编译目录,然后执行命令./configure --with-linux=/lib/modules/5.4.0-51-generic/build。
或者直接执行:./configure
[4]、接下来执行make && make install进行安装Open Vswitch,安装过程比较漫长,耐心等待,并且注意各种打印的错误。
[5]、如果在安装的过程中生成了修改了内核模块,那么需要重新编译内核,输入命令make modules_install。
OVS部署配置
[1]、需要载入模块,载入openvswitch的模块到内核中,输入命令:/sbin/modprobe openvswitch;/sbin/lsmod | grep openvswitch。如图所示,相当于加载入依赖的模块。
[2]、启动ovs,首先输入命令:export PATH=$PATH:/usr/local/share/openvswitch/scripts导入环境变量,然后执行命令:ovs-ctl start。执行完成后,如下图所示证明执行成功。
[3]、启动ovsdb-server服务,首先执行命令:export PATH=$PATH:/usr/local/share/openvswitch/scripts导入环境变量,然后执行命令:ovs-ctl --no-ovs-vswitchd start。执行完成后,如下图所示即代表ovsdb-server服务启动成功。
[4]、启动ovs-vswitchd服务,首先执行命令:export PATH=$PATH:/usr/local/share/openvswitch/scripts导入环境变量,然后执行命令:ovs-ctl --no-ovsdb-server start。执行完成后,如下图所示即代表ovs-vswitchd服务启动成功。
[5]、建立Open vSwitch配置文件和数据库,并根据ovsdb模板创建ovsdb数据库,用于存储虚拟交换机的配置信息。
依次执行命令:mkdir -p /usr/local/etc/openvswitch;ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema。如果如图所示,出现报错Resource temporarily unavailable,此时可以忽略。
[6]、配置ovsdb-server使用上面创建的数据库,监听Unix域套接字,首先执行命令:mkdir -p /usr/local/var/run/openvswitch,建立文件;然后启动ovsdb数据库,数据库默认支持SSL,但是如果在build openvswitch时不允许了SSL支持,则在命令中需省略—private-key,--certificate,--bootstrap-ca-cert等相关命令。执行命令:
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile –detach –log-file。
[7]、执行命令:ps -ef|grep ovsdb-server,查看OVSDB数据库是否启动成功。
[8]、执行命令:ovs-vsctl --no-wait init,初始化数据库。
[9]、执行命令:ovs-vswitchd --pidfile --detach --log-file,启动主OpenvSwitch守护进程,即启动OpenvSwitch daemon。
[10]、执行到此步,ovs的安装部署算是完成了。此时执行命令:ps -ef|grep ovs,查看当前ovs进程。
[11]、最后一步,执行命令:ovs-vsctl show,查看当前ovs的版本信息,如下图正确显示,说明ovs安装部署已经成功,接下来就是ovs的使用了。
对于一些其他安装教程的出现异常的处理(按照以上步骤,此处可忽略)
执行命令insmod ./datapath/linux/openvswitch.ko,加载Open vswitch内核模块openvswitch.ko,(DataPath的概念,OpenFlow就是控制和数据转发分离,而控制端,就叫做Controller Path,比如floodlight等;负责转发数据的数据转发端,就叫做DataPath,也就是支持OpenFlow的硬件或者软件交换机Switch)。
如上图,如果加载完成后出现的报错为insmod: ERROR: could not insert module ./datapath/linux/openvswitch.ko: Invalid module format,此时解决方案比较困难,一种方法是进入Linux内核进行内核修改,另一种是换一种Linux版本,可能安装的太新,导致内核与ovs不匹配。
如果加载模块后出现的错误为insmod: ERROR: could not insert module ./datapath/linux/openvswitch.ko:Unknown symbol in module这时可能就是因为openvswitch.ko依赖的模块没有被加载,所以此时,需要先查看需要加载什么依赖的模块,输入命令modinfo ./datapath/linux/openvswitch.ko |grep depends,如下图所示,此时的依赖模块包括nf_conntrack,nf_nat,udp_tunnel,libcrc32c,nf_defrag_ipv6。
所以接下来,对这几个依赖模块进行加载,如图所示。
加载结束后,再次执行命令insmod ./datapath/linux/openvswitch.ko