1. Controller节点

1.1 安装 OVS和OVN

安装 Python3.7:

  1. yum -y groupinstall "Development tools"
  2. yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel zlib1g-dev zlib* libffi-devel
  3.  
  4. wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
  5. tar -xvJf Python-3.7.2.tar.xz
  6. mkdir /usr/local/python3
  7.  
  8. cd Python-3.7.2
  9. ./configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl
  10.  
  11. make && make install
  12.  
  13. ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
  14. ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
  15.  
  16. python3 -V
  17. pip3 -V

安装 ovs和ovn:

  1. yum install -y epel-release net-tools gcc gcc-c++ kernel-devel kernel-headers kernel.x86_64 \
  2. numactl-devel.x86_64 numactl-libs.x86_64 libpcap.x86_64 libpcap-devel.x86_64 pciutils \
  3. autoconf automake libtool
  4.  
  5. git clone https://github.com/openvswitch/ovs.git
  6. git branch -a
  7. git checkout
  8. git checkout origin/branch-2.12
  9. ./boot.sh
  10. ./configure
  11. make
  12. make install
  13.  
  14. # 配置数据库
  15. mkdir -p /usr/local/etc/openvswitch
  16. ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
  17.  
  18. # 启动 ovsdb-server
  19. mkdir -p /usr/local/var/run/openvswitch
  20. mkdir -p /usr/local/var/log/openvswitch/
  21. ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
  22. --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
  23. --private-key=db:Open_vSwitch,SSL,private_key \
  24. --certificate=db:Open_vSwitch,SSL,certificate \
  25. --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
  26. --pidfile --detach --log-file
  27.  
  28. ovs-vsctl --no-wait init
  29. ovs-vswitchd --pidfile --detach --log-file

  30. # 启动 ovn_northd
  31. /usr/local/share/openvswitch/scripts/ovn-ctl start_northd

其他:

  1. yum install -y python-networking-ovn

允许远程访问 osvdb-server:(将 0.0.0.0 替换成管理网络接口的IP,可以避免监听所有接口)

  1. ovn-nbctl set-connection ptcp:6641:0.0.0.0 -- set connection . inactivity_probe=60000
  2. ovn-sbctl set-connection ptcp:6642:0.0.0.0 -- set connection . inactivity_probe=60000

如果使用 vtep,则还需如下配置:

  1. ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640:0.0.0.0

编辑配置文件 /etc/neutron/neutron.conf,添加或修改如下内容:

  1. [DEFAULT]
  2. ...
  3. core_plugin = ml2
  4. service_plugins = ovn-router
  5.  
  6. # 其他配置

注:其他配置正常(https://docs.openstack.org/neutron/latest/install/controller-install-rdo.html)。

编辑配置文件 /etc/neutron/plugins/ml2/ml2_conf.ini:

  1. [ml2]
  2. ...
  3. mechanism_drivers = ovn
  4. type_drivers = local,flat,vlan,geneve
  5. tenant_network_types = geneve
  6. extension_drivers = port_security
  7. overlay_ip_version = 4
  8.  
  9. [ml2_type_flat]
  10. flat_networks = PHYSICAL_NETWORK
  11.  
  12. [ml2_type_geneve]
  13. vni_ranges = 1:65536
  14. max_header_size = 38
  15.  
  16. [ml2_type_vlan]
  17. network_vlan_ranges = PHYSICAL_NETWORK:MIN_VLAN_ID:MAX_VLAN_ID
  18.  
  19. [securitygroup]
  20. enable_security_group = true
  21.  
  22. [ovn]
  23. ovn_nb_connection = tcp:IP_ADDRESS:6641
  24. ovn_sb_connection = tcp:IP_ADDRESS:6642
  25. ovn_l3_scheduler = OVN_L3_SCHEDULER

将 PHYSICAL_NETWORK 替换为物理网络名称(自己取即可),如, provider。

MIN_VXLAN_ID:MAX_VLAN_ID 定义了最小、最大可用的 vlan id,如,1001:2000。

将 IP_ADDRESS 替换为 controller 节点上运行 osvdb-server 服务的IP地址。

OVN_L3_SCHEDULER可选值:

  • leastloaded:let the scheduler to select a compute node with the least number of gateway ports.
  • chance:let the scheduler to randomly select a compute node from the available list of compute nodes.

Set ovn-cms-options with enable-chassis-as-gw in Open_vSwitch table’s external_ids column. Then if this chassis has proper bridge mappings, it will be selected for scheduling gateway routers.

  1. ovs-vsctl set open . external-ids:ovn-cms-options=enable-chassis-as-gw

重新填充数据库:(DBPASS:数据库登录密码,NEUTRON_DBPASS:neutron服务连接数据库时使用的密码)

  1. mysql -uroot -p$DBPASS <<EOF
  2. DROP DATABASE IF EXISTS neutron;
  3. CREATE DATABASE neutron;
  4.  
  5. GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '$NEUTRON_DBPASS';
  6. GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '$NEUTRON_DBPASS';
  7.  
  8. quit
  9. EOF
  10.  
  11. su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

停止 linux-bridge 等服务(因为此处将 controller 节点也用作了 network 节点),并重新启动 neutron-server:

  1. systemctl stop neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
  2. systemctl disable neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
  3.  
  4. systemctl restart neutron-server.service

2. Network节点

不再需要 DHCP 和 L3 功能。

3. Compute节点

使用 controller 节点上的 ovs 数据库:

  1. systemctl start openvswitch
  2. ovs-vsctl set open . external-ids:ovn-remote=tcp:IP_ADDRESS:6642

将 IP_ADDRESS 替换为 controller 上运行 ovsdb-server 服务的 IP地址。

  1. ovs-vsctl set open . external-ids:ovn-encap-type=geneve,vxlan
  2. ovs-vsctl set open . external-ids:ovn-encap-ip=IP_ADDRESS

Replace IP_ADDRESS with the IP address of the overlay network interface on the compute node.

4. Controller节点

启动 ovn-controller:

  1. /usr/local/share/openvswitch/scripts/ovn-ctl start_controller

5. 验证

  1. # openstack network create net1
  2. # openstack subnet create --subnet-range 172.0.0.0/24 --network net1 subnet1
  3. # openstack port create --network net1 --fixed-ip subnet=subnet1,ip-address=172.0.0.10 port1
  4.  
  5. # ovn-nbctl show
  6. switch 00d310e3-1919-4dc8-a6d4-c9baaba1b006 (neutron-4c3d437a-f161-4c3e-9a57-606e9f80ed14) (aka net1)
  7. port 40e23569-fd75-40fb-ae07-ce93053a007b (aka port1)
  8. addresses: ["fa:16:3e:98:22:c7 172.0.0.10"]

参考资料

https://docs.openstack.org/neutron/latest/install/ovn/manual_install.html

https://www.cnblogs.com/xiujin/p/11477419.html

https://www.cnblogs.com/gaozhengwei/p/7100140.html

OpenStack使用OVN的更多相关文章

  1. 【Network】OVS、VXLAN/GRE、OVN等 实现 Docker/Kubernetes 网络的多租户隔离

    多租户隔离 DragonFlow与OVN | SDNLAB | 专注网络创新技术 Neutron社区每周记(6.25~7.6)| OVS将加入Linux基金会?OVN或抛弃ovsdb? | Unite ...

  2. 我的第二本译作《精通OpenStack》上架啦:书籍介绍和译者序

    1. 书籍简介 英文书名:Mastering OpenStack Second Edition 作者:[德] 奥马尔-海德希尔(Omar Khedher)[印] 坚登-杜塔-乔杜里(Chanda Du ...

  3. 我的第二本译作《精通OpenStack》上架啦:前言、目录和样章

    1. 前言 今天,随着新功能和子项目的增加,OpenStack已成为一个不断扩展的大型开源项目.随着数以百计大型企业采用并不断为OpenStack生态系统做出贡献,OpenStack必将成为下一代私有 ...

  4. 如何借助 OVN 来提高 OVS 在云计算环境中的性能

    众所周知,OpenvSwitch 以其丰富的功能和不错的性能,已经成为 Openstack 部署中最受欢迎的虚拟交换机.由于 Openstack Neutron 的架构引入了一些性能问题,比如 neu ...

  5. ovs ovn 学习资料

    0.A Primer on OVN http://blog.spinhirne.com/2016/09/a-primer-on-ovn.html 1.Open Virtual Networking W ...

  6. (转)Openstack Cascading和Nova Cell

    Openstack是看着AWS成长起来的,这点毋庸置疑:所以AWS大规模商用已成事实的情况下,Openstack也需要从架构和产品实现上进行优化,以满足大规模商用的要求.从已有的实现来看其中两种方式值 ...

  7. 在Packstack环境手动安装OVN

    安装OpenStack(allinone)环境 ### 参考"Packstack使用"章节安装,但是不要配置外网网络 安装OVN组件 ### 控制节点 # yum install ...

  8. OVN架构翻译

    概述 ovn-controller是OVN在虚拟机上的agent,北向连接OVN的南向数据库,学习OVN的配置和状态,并使用虚拟机的状态来填充PN表以及Binding表的Chassis列:南向连接op ...

  9. OpenStack日志分析

    日志文件说明 Nova日志 OpenStack计算服务日志位于/var/log/nova目录下(此目录在Controller和Compute节点都存在),默认权限拥有者是nova用户 文件名 作用 n ...

随机推荐

  1. UWP 适配不同设备 屏幕

    1.DeviceFamily-Type文件夹 将Index.xaml拷贝到DeviceFamily-Desktop 和DeviceFamily-Mobile,删除这2个目录下的Index.xmal.c ...

  2. LightningChart解决方案:XY和3D图表(Polymer Char GPC-IR&#174;-工程案例)

    LightningChart解决方案:XY和3D图表(Polymer Char GPC-IR-工程案例) 所在行业:石化公司成立时间:1992年LightningChart解决方案:XY和3D图表 P ...

  3. Python批量创建word文档(1)- 纯文字

    Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.最后贴上自己的联系方式.代码如下: 1 ''' 2 #python根据需求新 ...

  4. 【磁盘/文件系统】第三篇:标准磁盘分区流程针对parted(一般硬盘容量大于2T(但是小于2T也可以进行分区);分区数最大是支持100多个分区)

    说明: 在 Linux 上可以采用 parted 来对磁盘进行分区 1.通过 fdisk -l 可以查看磁盘是否存在, 由于使用的是大磁盘(大于2T),fdisk 不能用来作为分区工具了,而应该使用 ...

  5. 有两张表;使用SQL查询,查询所有的客户订单日期最新的前五条订单记录。

    客户信息表(c CUSTOM)有以下字段:id.name.mobile 客户订单表(C_ORDER)有以下字段:id.custom_id.commodity.count.order _date Sel ...

  6. JAVA的一些笔记

    /*一般函数与构造函数的区别 构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化 一般函数:对象创建时,需要函数功能时才调用 构造函数:一个对象对象创建时,只调用一次 一般函数:对象创 ...

  7. Java学习日报 9.29

    package random;import java.util.*;import java.math.*;public class Com { public static void main(Stri ...

  8. Cookie和登录注册

    1. 什么是Cookie? 服务器通过 Set-Cookie 头给客户端一串字符串 客户端每次访问相同域名的网页时,必须带上这段字符串 客户端要在一段时间内保存这个Cookie Cookie 默认在用 ...

  9. HTML学习案例-仿慕课网网页制作(二)

    制作部分:网页footer部分 制作效果: 涉及知识:link部分要复习: dl- definition list dt- definition title dd - definition descr ...

  10. 加薪攻略之UI组件库实践—storybook

    目录 加薪攻略之UI组件库实践-storybook 一.业务背景 二.选用方案 三.引入分析 项目结构 项目效果 四.实现步骤 1.添加依赖 2.添加npm执行脚本 3.添加配置文件 4.添加必要的w ...