Create documentation for NIC bonding via REST API

Registered by Dmitry Pyzhov

We need step by step instruction for using nic bonding with fuel.

Blueprint information

Status:
Complete
Approver:
Mike Scherbakov
Priority:
High
Drafter:
None
Direction:
Approved
Assignee:
Andrey Danin
Definition:
Approved
Series goal:
Accepted for 4.0.x
Implementation:
Implemented
Milestone target:
milestone icon 4.0
Started by
Andrey Danin
Completed by
Mike Scherbakov

Related branches

Sprints

Whiteboard

* User Story

- Deployment of Mirantis OpenStack with Neutron + VLAN segmentation on 2 physical NICs in bond without separate physical network interface for fw-admin network.

* Design

Currently we use a separate physical NIC for communication between Fuel master and slave nodes and IP from fw-admin network is assigned directly to the physical interface (e.g. eth0). If we want to use bonding interface, we will need to:

- Create a separate bridge (e.g. br-core)
- Crate a bond port from 2 or more interfaces in this bridge. At least one physical interface of this bond should be in the same L2 segment where admin node is located
- Assign IP from fw-admin subnet to this bridge

To separate traffic of other Mirantis OpenStack networks (management, external, storage) we will:

- Create a separate bridge for each network
- Assign IP to each OVS bridge from the appropriate subnet
- Connect each bridge with with the bridge that has bond port using OVS patch with VLAN tag.

Since private network should pass traffic from different tenants with different VLAN tags, we will connect "br-prv" with our "br-core" using OVS patch without VLAN tag, which will serve as trunk.

Here is the link to the visualization of the provided network scheme:
 http://www.gliffy.com/go/publish/5129687

* Implementation

Basically this doesn't require major changes in Mirantis OpenStack, but just a specific network configuration, that can be done via CLI mode only at the moment.

To deploy Mirantis OpenStack 3.2 using with the specified network configuration we need:

1. Modified Puppet provider for L2_ovs_bond custom type. Here is the link to the pull request:
 https://github.com/Mirantis/fuel/pull/877
2. Disable cobbler to control /etc/ethers file.
 As workaround we can replace a body of "regen_ethers" method in "/usr/lib/python2.6/site-packages/cobbler/modules/manage_dnsmasq.py" file just with pass statement

Here is a example of "network_scheme" section in the node configuration:

.....
.....
    "network_scheme": {
        "transformations": [
            {
                "action": "add-br",
                "name": "br-ex"
            },
            {
                "action": "add-br",
                "name": "br-mgmt"
            },
            {
                "action": "add-br",
                "name": "br-storage"
            },
            {
                "action": "add-br",
                "name": "br-prv"
            },
            {
                "action": "add-br",
                "name": "br-core"
            },
            {
                "action": "add-bond",
                "interfaces": ["eth0","eth1"],
                "name": "bond0",
                "bridge": "br-core",
                "properties": []
            },
            {
                "action": "add-patch",
                "bridges": [
                    "br-core",
                    "br-storage"
                ],
                "tags": [
                    103,
                    0
                ]
            },
            {
                "action": "add-patch",
                "bridges": [
                    "br-core",
                    "br-ex"
                ],
                "tags": [
                    101,
                    0
                ]
            },
            {
                "action": "add-patch",
                "bridges": [
                    "br-core",
                    "br-mgmt"
                ],
                "tags": [
                    102,
                    0
                ]
            },
            {
                "action": "add-patch",
                "bridges": [
                    "br-core",
                    "br-prv"
                ]
            }
        ],
        "roles": {
            "management": "br-mgmt",
            "storage": "br-storage",
            "ex": "br-ex",
            "private": "br-prv",
            "fw-admin": "br-core"
        },
        "interfaces": {
            "eth0": {},
            "eth1": {}
        },
        "version": "1.0",
        "provider": "ovs",
        "endpoints": {
            "eth0": {
                "IP": "none"
            },
            "eth1": {
                "IP": "none"
            },
            "br-prv": {
                "IP": "none"
            },
            "br-storage": {
                "IP": [
                    "192.168.1.2/24"
                ]
            },
            "br-ex": {
                "IP": [
                    "172.16.0.2/24"
                ],
                "gateway": "172.16.0.1"
            },
            "br-mgmt": {
                "IP": [
                    "192.168.0.2/24"
                ]
            },
            "br-core": {
                "IP": [
                    "10.20.0.4/24"
                ]
            }
        }
    },
.....
.....

Gerrit topic: https://review.openstack.org/#q,topic:nic-bonding,n,z

Addressed by: https://review.openstack.org/62495
    Add info about NIC bonding using OVS

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.