From 3412a645cdea8c4eb28e8406ed161e8140011d0f Mon Sep 17 00:00:00 2001 From: Thomas F Herbert Date: Thu, 30 Mar 2017 18:28:59 -0400 Subject: [PATCH] Add and update apex sdn and ovs scenarios to Danube 1.0 Include two odl_l3 scenarios and the no-sdn l2 ha scenario. Change-Id: I6a3d447b42a2d69ce3e50e007a66e22668a1383c Signed-off-by: Thomas F Herbert --- docs/release/NEWS.rst | 5 ++ docs/release/release-notes/release-notes.rst | 60 +++++++++---- docs/release/scenarios/os-nosdn-ovs-ha/index.rst | 20 +++++ docs/release/scenarios/os-nosdn-ovs-ha/ovs4nfv.png | Bin 0 -> 49053 bytes .../os-nosdn-ovs-ha/scenario.description.rst | 93 +++++++++++++++++++ .../os-nosdn-ovs-noha/scenario.description.rst | 28 ++---- .../os-nosdn-ovs/scenario.description.rst | 2 +- docs/release/scenarios/os-odl_l3-ovs-ha/index.rst | 20 +++++ .../release/scenarios/os-odl_l3-ovs-ha/ovs4nfv.png | Bin 0 -> 49053 bytes .../os-odl_l3-ovs-ha/scenario.description.rst | 98 +++++++++++++++++++++ .../release/scenarios/os-odl_l3-ovs-noha/index.rst | 20 +++++ .../scenarios/os-odl_l3-ovs-noha/ovs4nfv.png | Bin 0 -> 49053 bytes .../os-odl_l3-ovs-noha/scenario.description.rst | 97 ++++++++++++++++++++ 13 files changed, 403 insertions(+), 40 deletions(-) create mode 100644 docs/release/scenarios/os-nosdn-ovs-ha/index.rst create mode 100644 docs/release/scenarios/os-nosdn-ovs-ha/ovs4nfv.png create mode 100644 docs/release/scenarios/os-nosdn-ovs-ha/scenario.description.rst create mode 100644 docs/release/scenarios/os-odl_l3-ovs-ha/index.rst create mode 100644 docs/release/scenarios/os-odl_l3-ovs-ha/ovs4nfv.png create mode 100644 docs/release/scenarios/os-odl_l3-ovs-ha/scenario.description.rst create mode 100644 docs/release/scenarios/os-odl_l3-ovs-noha/index.rst create mode 100644 docs/release/scenarios/os-odl_l3-ovs-noha/ovs4nfv.png create mode 100644 docs/release/scenarios/os-odl_l3-ovs-noha/scenario.description.rst diff --git a/docs/release/NEWS.rst b/docs/release/NEWS.rst index ac5773f..691ffe7 100755 --- a/docs/release/NEWS.rst +++ b/docs/release/NEWS.rst @@ -12,3 +12,8 @@ September 2016 - Colorado Release of the OVSNFV RPM for Apex. +March 2017 +============ + +- Danube Release of the OVSNFV RPM for Apex. + diff --git a/docs/release/release-notes/release-notes.rst b/docs/release/release-notes/release-notes.rst index 683ce06..40e59d2 100644 --- a/docs/release/release-notes/release-notes.rst +++ b/docs/release/release-notes/release-notes.rst @@ -1,5 +1,5 @@ ============================================================= -OPNFV Release Notes for the Colorado release of OVS for OPNFV +OPNFV Release Notes for the Danube release of OVS for OPNFV ============================================================= @@ -10,7 +10,7 @@ OPNFV Release Notes for the Colorado release of OVS for OPNFV Abstract ======== -This document provides the release notes for Colorado release of +This document provides the release notes for Danube release of OVS for OPNFV. Version history @@ -25,8 +25,8 @@ Version history Summary ======= -The Colorado release of OVSNFV will provide RPMs for DPDK and OVS with DPDK. -Also for the Colorado release an RPM of an interim release of OVS and the +The Danube release of OVSNFV will provide RPMs for DPDK and OVS with DPDK. +Also for the Danube release an RPM of an interim release of OVS and the OVS kernel module with NSH patches. - Documentation is built by Jenkins @@ -39,16 +39,16 @@ Release Data | **Project** | ovsnfv | | | | +--------------------------------------+--------------------------------------+ -| **Repo/tag** | ovsnfv/colorado.1.0 | +| **Repo/tag** | ovsnfv/Danube.1.0 | | | | +--------------------------------------+--------------------------------------+ -| **Release designation** | colorado.1.0 | +| **Release designation** | Danube 1.0 | | | | +--------------------------------------+--------------------------------------+ -| **Release date** | 2016-09-14 | +| **Release date** | 2017-3-31 | | | | +--------------------------------------+--------------------------------------+ -| **Purpose of the delivery** | OPNFV Colorado release | +| **Purpose of the delivery** | OPNFV Danube release | | | | +--------------------------------------+--------------------------------------+ @@ -57,11 +57,11 @@ Version change Module version changes ~~~~~~~~~~~~~~~~~~~~~~ -This is the first tracked version of OVSNFV for the Colorado release. +This is the first tracked version of OVSNFV for the Danube release. -- Open vSwitch 2.5.90 +- Open vSwitch 2.6 -- DPDK 16.04 +- DPDK 16.11 Unsupported Experimental OVS with NSH ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -77,10 +77,10 @@ For more information see: Document version changes ~~~~~~~~~~~~~~~~~~~~~~~~ -This is the first tracked version of Colorado release of OVSNFV +This is the first tracked version of Danube release of OVSNFV The following documentation is provided with this release: -- OVSNFV Build instructions of the RPMs for the Colorado release +- OVSNFV Build instructions of the RPMs for the Danube release ver. 1.0.0 Feature additions @@ -148,6 +148,27 @@ ovsnfv/colorado directory. - ovs4opnfv-e8acab14-openvswitch-ovn-host-2.5.90-0.12032.gitc61e93d6.1.el7.centos.x86_64.rpm - ovs4opnfv-e8acab14-openvswitch-ovn-vtep-2.5.90-0.12032.gitc61e93d6.1.el7.centos.x86_64.rpm +- DPDK 16.11 + + + - ovsnfv/ovs4opnfv-e8acab14-dpdk-16.11-5.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-dpdk-debuginfo-16.11-5.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-dpdk-devel-16.11-5.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-dpdk-doc-16.11-5.el7.centos.noarch.rpm + - ovsnfv/ovs4opnfv-e8acab14-dpdk-examples-16.11-5.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-dpdk-tools-16.11-5.el7.centos.x86_64.rpm + +- OVS 2.6 + + - ovsnfv/ovs4opnfv-e8acab14-openvswitch-2.6.0-1.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-openvswitch-debuginfo-2.6.0-1.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-openvswitch-devel-2.6.0-1.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-openvswitch-ovn-central-2.6.0-1.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-openvswitch-ovn-common-2.6.0-1.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-openvswitch-ovn-docker-2.6.0-1.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-openvswitch-ovn-host-2.6.0-1.el7.centos.x86_64.rpm + - ovsnfv/ovs4opnfv-e8acab14-openvswitch-ovn-vtep-2.6.0-1.el7.centos.x86_64.rpm + EXPERIMENTAL artifacts produced by OVS for NFV ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -164,8 +185,8 @@ EXPERIMENTAL artifacts produced by OVS for NFV Documentation deliverables ~~~~~~~~~~~~~~~~~~~~~~~~~~ -- RPM build instructions for the Colorado release version 1.0.0 -- OVSNFV Release Notes for the Colorado release version 1.0.0 +- RPM build instructions for the Danube release version 1.0.0 +- OVSNFV Release Notes for the Danube release version 1.0.0 - Configuration Guide for OVSNFV - Supported Scenario Description and Documentation @@ -181,7 +202,8 @@ Known issues | **JIRA REFERENCE** | **SLOGAN** | | | | +--------------------------------------+--------------------------------------+ -| | | +| APEX-415 | br-phy dpdk interfaces are not | +| | brought up by net-config | | | | +--------------------------------------+--------------------------------------+ @@ -193,7 +215,7 @@ Workarounds Test Result =========== -The Colorado release of OVS/DPDK RPM deployed with the Apex deployment +The DAnube release of OVS/DPDK RPM deployed with the Apex deployment toolchain has undergone QA test runs with the following results: +--------------------------------------+--------------------------------------+ @@ -207,9 +229,9 @@ toolchain has undergone QA test runs with the following results: References ========== -For more information on the OPNFV Colorado release, please see: +For more information on the OPNFV Danube release, please see: -http://wiki.opnfv.org/releases/Colorado +http://wiki.opnfv.org/releases/Danube :Author: Thomas F Herbert (therbert@redhat.com) :Version: 1.0.0 diff --git a/docs/release/scenarios/os-nosdn-ovs-ha/index.rst b/docs/release/scenarios/os-nosdn-ovs-ha/index.rst new file mode 100644 index 0000000..fc8f2b7 --- /dev/null +++ b/docs/release/scenarios/os-nosdn-ovs-ha/index.rst @@ -0,0 +1,20 @@ +.. _os-nosdn-ovs-noha: + +.. OPNFV - Open Platform for Network Function Virtualization +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + + +******************************************************************************* +User Space Accelarated OVS scenario: os-nosdn-ovs-noha Overview and Description +******************************************************************************* + +Scenario: "OpenStack - ovs-nfv" (apex-os-nosdn-ovs-ha) +is a scenario developed as part of the ovsnfv +OPNFV project. + +.. toctree:: + :numbered: + :maxdepth: 2 + + scenario.description.rst diff --git a/docs/release/scenarios/os-nosdn-ovs-ha/ovs4nfv.png b/docs/release/scenarios/os-nosdn-ovs-ha/ovs4nfv.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9d543a06c9658254e6aec2c49e53d990c4d575 GIT binary patch literal 49053 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 CPMk9U literal 0 HcmV?d00001 diff --git a/docs/release/scenarios/os-nosdn-ovs-ha/scenario.description.rst b/docs/release/scenarios/os-nosdn-ovs-ha/scenario.description.rst new file mode 100644 index 0000000..874bc9c --- /dev/null +++ b/docs/release/scenarios/os-nosdn-ovs-ha/scenario.description.rst @@ -0,0 +1,93 @@ +.. OPNFV - Open Platform for Network Function Virtualization +.. This work is licensed under a Creative Commons Attribution 4.0 +.. International License. +.. http://creativecommons.org/licenses/by/4.0 + +Scenario: "OpenStack - ovs-nfv" +============================= + +Scenario: apex-os-nosdn-ovs-ha + +"apex-os-ovs-ha" is a scenario developed as part of the OVS for NFV +OPNFV project. The main components of the "apex-os-nosdn-ovs-ha" scenario +are: + + - APEX (TripleO) installer (please also see APEX installer documentation) + - Openstack (in HA configuration) + - OVS/DPDK Open vSwitch with DPDK data plane virtual forwarder for tenant networking + +Introduction +============ + +NFV and virtualized high performance applications, such as video processing, +require Open vSwitch to be accelerated with a fast data plane solution that provides both +carrier grade forwarding performance, scalability and open extensibility. + +A key component of any NFV solution is the virtual forwarder, which should consist of +soft switch that includes an accelerated data plane component. For this, any virtual +switch should make use of +hardware accelerators and optimized cache operation to be run in user space. + +The "Openstack - Open vSwitch/DPDK" scenario provides +use-cases for deployment of NFV nodes instantiated by +an Openstack orchestration system on OVS/DPDK enabled compute nodes. + +A deployment of the "apex-os-nosdn-ovs-ha" scenario consists of 3 or more +servers: + + * 1 Jumphost hosting the APEX installer - running the Undercloud + * 1 Controlhost, which runs the Overcloud and Openstack services + * 1 or more Computehosts or nodes + +.. image:: ovs4nfv.png + +Tenant networking leverages Open vSwitch accelerated with a fast user space data path such +as DPDK. +Open VSwitch (OVS) with the Linux kernel module data path is used for all other +connectivity, such as connectivity to public networking "the +Internet" (i.e. br-ex) is performed via non-accelerated OVS. + +Features of the scenario +------------------------ + +Main features of the "apex-os-ovs-nosdn-ha" scenario: + + * Automated installation using the APEX installer + * Accelerated tenant networking using OVS/DPDK as the forwarder + +Networking in this scenario using OVS with accelerated User space IO. +--------------------------------------------------------------------- + +The apex-os-nosdn-ovs-ha scenario combines components from three open +source projects: OpenStack, Open vSwitch and DPDK. To make accelerated networking +available for this scenario Open vSwitch is bound via its netdev interface +with DPDK user space accelerated capability. + +Scenario Configuration +====================== + +Simply deploy this scenario by using the os-ovs-nosdn-ha.yaml deploy +settings file. + +Validated deployment environments +================================= + +The "os-odl_l2-ovs-ha" scenario has been deployed and tested +on the following sets of hardware: + * virtual deployments + * Not yet validated on UCS hardware. + + +Limitations, Issues and Workarounds +=================================== + +* _APEX-415 br-phy dpdk interfaces are not brought up by os-net-config + +References +========== + + + * OVS for NFV OPNFV project wiki: https://wiki.opnfv.org/display/ovsnfv + * Open vSwitch: http://openvswitch.org/ + * DPDK: http://dpdk.org + * OPNFV Danube release - more information: http://www.opnfv.org/colorado diff --git a/docs/release/scenarios/os-nosdn-ovs-noha/scenario.description.rst b/docs/release/scenarios/os-nosdn-ovs-noha/scenario.description.rst index 3027a7e..91504f1 100644 --- a/docs/release/scenarios/os-nosdn-ovs-noha/scenario.description.rst +++ b/docs/release/scenarios/os-nosdn-ovs-noha/scenario.description.rst @@ -37,7 +37,7 @@ servers: * 1 Jumphost hosting the APEX installer - running the Undercloud * 1 Controlhost, which runs the Overcloud and Openstack services - * 1 or more Computehosts + * 1 or more computehosts or nodes .. image:: ovs4nfv.png @@ -45,7 +45,7 @@ Tenant networking leverages Open vSwitch accelerated with a fast user space data as DPDK. Open VSwitch (OVS) with the Linux kernel module data path is used for all other connectivity, such as connectivity to public networking "the -Internet" (i.e. br-ext) is performed via non-accelerated OVS. +Internet" (i.e. br-ex) is performed via non-accelerated OVS. Features of the scenario ------------------------ @@ -66,34 +66,22 @@ with DPDK user space accelerated capability. Scenario Configuration ====================== -To enable the "apex-os-nosdn-ovs-noha" scenario check the appropriate settings -in the APEX configuration files. Those are typically found in /etc/opnfv-apex. - -File "deploy_settings.yaml" choose false for sdn controller:: - - global_params: - ha_enabled: false - - deploy_options: - sdn_controller: false - sdn_l3: false - tacker: false - congress: false - sfc: false - vpn: false +Simply deploy this scenario by using the os-ovs-nosdn-noha.yaml deploy +settings file. Validated deployment environments ================================= The "os-odl_l2-ovs-noha" scenario has been deployed and tested on the following sets of hardware: - * TBD + * Validated on virtual deployments only. + * Not yet validated on the UCS hardware. Limitations, Issues and Workarounds =================================== -There are no known issues. +* _APEX-415 br-phy dpdk interfaces are not brought up by os-net-config References ========== @@ -102,4 +90,4 @@ References * OVS for NFV OPNFV project wiki: https://wiki.opnfv.org/display/ovsnfv * Open vSwitch: http://openvswitch.org/ * DPDK: http://dpdk.org - * OPNFV Colorado release - more information: http://www.opnfv.org/colorado + * OPNFV Danube release - more information: http://www.opnfv.org/colorado diff --git a/docs/release/scenarios/os-nosdn-ovs/scenario.description.rst b/docs/release/scenarios/os-nosdn-ovs/scenario.description.rst index 04d88a1..4525a98 100644 --- a/docs/release/scenarios/os-nosdn-ovs/scenario.description.rst +++ b/docs/release/scenarios/os-nosdn-ovs/scenario.description.rst @@ -43,6 +43,6 @@ when using this scenario. Including: References ========== -For more information on the OPNFV Colorado release, please visit +For more information on the OPNFV Danube release, please visit http://www.opnfv.org/colorado diff --git a/docs/release/scenarios/os-odl_l3-ovs-ha/index.rst b/docs/release/scenarios/os-odl_l3-ovs-ha/index.rst new file mode 100644 index 0000000..fadf8e4 --- /dev/null +++ b/docs/release/scenarios/os-odl_l3-ovs-ha/index.rst @@ -0,0 +1,20 @@ +.. _os-odl_l3-ovs-no: + +.. OPNFV - Open Platform for Network Function Virtualization +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + + +******************************************************************************* +User Space Accelarated OVS scenario: os-odl_l3-ovs-no Overview and Description +******************************************************************************* + +Scenario: "OpenStack - ovs-nfv" (apex-os-odl_l3-ovs-no) +is a scenario developed as part of the ovsnfv +OPNFV project. + +.. toctree:: + :numbered: + :maxdepth: 2 + + scenario.description.rst diff --git a/docs/release/scenarios/os-odl_l3-ovs-ha/ovs4nfv.png b/docs/release/scenarios/os-odl_l3-ovs-ha/ovs4nfv.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9d543a06c9658254e6aec2c49e53d990c4d575 GIT binary patch literal 49053 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 CPMk9U literal 0 HcmV?d00001 diff --git a/docs/release/scenarios/os-odl_l3-ovs-ha/scenario.description.rst b/docs/release/scenarios/os-odl_l3-ovs-ha/scenario.description.rst new file mode 100644 index 0000000..080d83a --- /dev/null +++ b/docs/release/scenarios/os-odl_l3-ovs-ha/scenario.description.rst @@ -0,0 +1,98 @@ +.. OPNFV - Open Platform for Network Function Virtualization +.. This work is licensed under a Creative Commons Attribution 4.0 +.. International License. +.. http://creativecommons.org/licenses/by/4.0 + +Scenario: "OpenStack - ovs-nfv" +============================= + +Scenario: apex-os-odl_l3-ovs-ha + +"apex-os-odl_l3-ovs-ha" is a scenario developed as part of the OVS for NFV +OPNFV project. The main components of the "apex-os-odl_l3-ovs-ha" scenario +are: + + - APEX (TripleO) installer (please also see APEX installer documentation) + - Openstack (in HA configuration) + - OVS/DPDK Open vSwitch with DPDK data plane virtual forwarder for tenant networking + - ODL Open Daylight service running on a single controller + - One or more compute hosts or nodes + +Introduction +============ + +NFV and virtualized high performance applications, such as video processing, +require Open vSwitch to be accelerated with a fast data plane solution that provides both +carrier grade forwarding performance, scalability and open extensibility. + +A key component of any NFV solution is the virtual forwarder, which should consist of +soft switch that includes an accelerated data plane component. For this, any virtual +switch should make use of +hardware accelerators and optimized cache operation to be run in user space. + +The apex-os-odl_l3-ovs-ha scenario provides +use-cases for deployment of NFV nodes instantiated by +an Openstack orchestration system on OVS/DPDK enabled compute nodes +with Open Daylight controller service. + +A deployment of the "apex-os-odl_l3-ovs-ha" scenario consists of 3 or more +servers: + + * 1 Jumphost hosting the APEX installer - running the Undercloud + * 1 Controlhost, which runs the Overcloud, Openstack services, + and Open Daylight service. + * 1 or more Computehosts or nodes + +.. image:: ovs4nfv.png + +Tenant networking leverages Open vSwitch accelerated with a fast user space data path such +as DPDK. +Open VSwitch (OVS) with the Linux kernel module data path is used for all other +connectivity, such as connectivity to public networking "the +Internet" (i.e. br-ex) is performed via non-accelerated OVS with Linux kernel data path. + +Features of the scenario +------------------------ + +Main features of the "apex-os-ovs-nosdn-ha" scenario: + + * Automated installation using the APEX installer + * Accelerated tenant networking using OVS/DPDK as the forwarder + * VXLAN l3 tenant network support with accelerated DPDK ports. + +Networking in this scenario using OVS with accelerated User space IO. +--------------------------------------------------------------------- + +The apex-os-odl_l3-ovs-ha scenario combines components from three open +source projects: OpenStack, Open vSwitch and DPDK. To make accelerated networking +available for this scenario Open vSwitch is bound via its netdev interface +with DPDK user space accelerated capability. + +Scenario Configuration +====================== + +Simply deploy this scenario by using the os-odl_l3-ovs-ha.yaml deploy +settings file. + +Validated deployment environments +================================= + +The "os-odl_l3-ovs-ha" scenario has been deployed and tested +on the following sets of hardware: + * virtual deployments only + * Not yet validated on UCS hardware + + +Limitations, Issues and Workarounds +=================================== + +* _APEX-415 br-phy dpdk interfaces are not brought up by os-net-config + +References +========== + + + * OVS for NFV OPNFV project wiki: https://wiki.opnfv.org/display/ovsnfv + * Open vSwitch: http://openvswitch.org/ + * DPDK: http://dpdk.org + * OPNFV Danube release - more information: http://www.opnfv.org/colorado diff --git a/docs/release/scenarios/os-odl_l3-ovs-noha/index.rst b/docs/release/scenarios/os-odl_l3-ovs-noha/index.rst new file mode 100644 index 0000000..8d60d40 --- /dev/null +++ b/docs/release/scenarios/os-odl_l3-ovs-noha/index.rst @@ -0,0 +1,20 @@ +.. _os-odl_l3-ovs-noha: + +.. OPNFV - Open Platform for Network Function Virtualization +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + + +******************************************************************************* +User Space Accelarated OVS scenario: os-odl_l3-ovs-noha Overview and Description +******************************************************************************* + +Scenario: "OpenStack - ovs-nfv" (apex-os-odl_l3-ovs-noha) +is a scenario developed as part of the ovsnfv +OPNFV project. + +.. toctree:: + :numbered: + :maxdepth: 2 + + scenario.description.rst diff --git a/docs/release/scenarios/os-odl_l3-ovs-noha/ovs4nfv.png b/docs/release/scenarios/os-odl_l3-ovs-noha/ovs4nfv.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9d543a06c9658254e6aec2c49e53d990c4d575 GIT binary patch literal 49053 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 CPMk9U literal 0 HcmV?d00001 diff --git a/docs/release/scenarios/os-odl_l3-ovs-noha/scenario.description.rst b/docs/release/scenarios/os-odl_l3-ovs-noha/scenario.description.rst new file mode 100644 index 0000000..bb14e1a --- /dev/null +++ b/docs/release/scenarios/os-odl_l3-ovs-noha/scenario.description.rst @@ -0,0 +1,97 @@ +.. OPNFV - Open Platform for Network Function Virtualization +.. This work is licensed under a Creative Commons Attribution 4.0 +.. International License. +.. http://creativecommons.org/licenses/by/4.0 + +Scenario: "OpenStack - ovs-nfv" +============================= + +Scenario: apex-os-odl_l3-ovs-noha + +"apex-os-odl_l3-ovs-noha" is a scenario developed as part of the OVS for NFV +OPNFV project. The main components of the "apex-os-odl_l3-ovs-noha" scenario +are: + + - APEX (TripleO) installer (please also see APEX installer documentation) + - Openstack (in non-HA configuration) + - OVS/DPDK Open vSwitch with DPDK data plane virtual forwarder for tenant networking + - ODL Open Daylight service running on a single controller + +Introduction +============ + +NFV and virtualized high performance applications, such as video processing, +require Open vSwitch to be accelerated with a fast data plane solution that provides both +carrier grade forwarding performance, scalability and open extensibility. + +A key component of any NFV solution is the virtual forwarder, which should consist of +soft switch that includes an accelerated data plane component. For this, any virtual +switch should make use of +hardware accelerators and optimized cache operation to be run in user space. + +The apex-os-odl_l3-ovs-noha scenario provides +use-cases for deployment of NFV nodes instantiated by +an Openstack orchestration system on OVS/DPDK enabled compute nodes +with Open Daylight controller service. + +A deployment of the "apex-os-odl_l3-ovs-noha" scenario consists of 3 or more +servers: + + * 1 Jumphost hosting the APEX installer - running the Undercloud + * 1 Controlhost, which runs the Overcloud, Openstack services and + Open Daylight service + * 1 or more Computehosts or nodes + +.. image:: ovs4nfv.png + +Tenant networking leverages Open vSwitch accelerated with a fast user space data path such +as DPDK. +Open VSwitch (OVS) with the Linux kernel module data path is used for all other +connectivity, such as connectivity to public networking "the +Internet" (i.e. br-ex) is performed via non-accelerated OVS. + +Features of the scenario +------------------------ + +Main features of the "apex-os-ovs-nosdn-noha" scenario: + + * Automated installation using the APEX installer + * Accelerated tenant networking using OVS/DPDK as the forwarder + * VXLAN l3 tenant network support with accelerated DPDK ports. + +Networking in this scenario using OVS with accelerated User space IO. +--------------------------------------------------------------------- + +The apex-os-odl_l3-ovs-noha scenario combines components from three open +source projects: OpenStack, Open vSwitch and DPDK. To make accelerated networking +available for this scenario Open vSwitch is bound via its netdev interface +with DPDK user space accelerated capability. + +Scenario Configuration +====================== + +Simply deploy this scenario by using the os-odl_l3-ovs-noha.yaml deploy +settings file. + +Validated deployment environments +================================= + +The "os-odl_l3-ovs-noha" scenario has been deployed and tested +on the following sets of hardware: + * virtual deployment only + * Not yet validated on UCS hardware. + + +Limitations, Issues and Workarounds +=================================== + +* _APEX-415 br-phy dpdk interfaces are not brought up by os-net-config + +References +========== + + + * OVS for NFV OPNFV project wiki: https://wiki.opnfv.org/display/ovsnfv + * Open vSwitch: http://openvswitch.org/ + * DPDK: http://dpdk.org + * OPNFV Danube release - more information: http://www.opnfv.org/colorado -- 2.16.6