113 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# -- Background
 | 
						|
 | 
						|
The quantum openvswitch plugin is a simple plugin that allows you to manage
 | 
						|
connectivity between VMs on hypervisors running openvswitch.
 | 
						|
 | 
						|
The quantum openvswitch plugin consists of two components:
 | 
						|
 | 
						|
1) The plugin itself:  The plugin uses a database backend (mysql for now) to
 | 
						|
   store configuration and mappings that are used by the agent.
 | 
						|
 | 
						|
2) An agent which runs on the hypervisor (dom0) and communicates with
 | 
						|
  openvswitch.  The agent gathers the configuration and mappings from the
 | 
						|
  mysql database running on the quantum host.
 | 
						|
 | 
						|
The sections below describe how to configure and run the quantum service with
 | 
						|
the openvswitch plugin.
 | 
						|
 | 
						|
# -- Nova configuration
 | 
						|
 | 
						|
- Make sure to set up nova using flat networking.  Also, make sure that the
 | 
						|
  integration bridge (see below under agent configuration) matches the
 | 
						|
  flat_network_bridge specified in your nova flag file.  Here are the relevant
 | 
						|
  entries from my nova flag file.
 | 
						|
--network_manager=nova.network.manager.FlatManager
 | 
						|
--flat_network_bridge=xapi1
 | 
						|
 | 
						|
# -- Quantum configuration
 | 
						|
 | 
						|
Make the openvswitch plugin the current quantum plugin
 | 
						|
 | 
						|
- edit ../../plugins.ini and change the provider line to be:
 | 
						|
provider = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin
 | 
						|
 | 
						|
# -- Database config.  The OVS quantum service requires access to a mysql
 | 
						|
# database in order to store configuration and mappings that will be used by
 | 
						|
# the agent.  Here is how to set up the database on the host that you will be
 | 
						|
# running the quantum service on.
 | 
						|
 | 
						|
MySQL should be installed on the host, and all plugins and clients must be
 | 
						|
configured with access to the database.
 | 
						|
 | 
						|
To prep mysql, run:
 | 
						|
 | 
						|
$ mysql -u root -p -e "create database ovs_quantum"
 | 
						|
 | 
						|
Make sure any xenserver running the ovs quantum agent will be able to
 | 
						|
communicate with the host running the quantum service:
 | 
						|
 | 
						|
//log in to mysql service
 | 
						|
$ mysql -u root -p
 | 
						|
// grant access to user-remote host combination.  Note: if you're going to use
 | 
						|
// a wildcard here it should be a management network with only trusted hosts.
 | 
						|
mysql> GRANT USAGE ON *.* to root@'yourremotehost' IDENTIFIED BY 'newpassword';
 | 
						|
//force update of authorization changes
 | 
						|
mysql> FLUSH PRIVILEGES;
 | 
						|
 | 
						|
# -- Plugin configuration.
 | 
						|
 | 
						|
- Edit the configuration file (ovs_quantum_plugin.ini).  Make sure it matches
 | 
						|
  your mysql configuration.  This file must be updated with the addresses and
 | 
						|
  credentials to access the database.  This file will be included in the agent
 | 
						|
  distribution tarball (see below) and the agent will use the credentials here
 | 
						|
  to access the database.
 | 
						|
 | 
						|
# -- XenServer Agent configuration
 | 
						|
 | 
						|
- Create the agent distribution tarball
 | 
						|
 | 
						|
$ make agent-dist
 | 
						|
- Copy the resulting tarball to your xenserver(s) (copy to dom0, not the nova
 | 
						|
  compute node)
 | 
						|
- Unpack the tarball and run xenserver_install.sh.  This will install all of the
 | 
						|
  necessary pieces into /etc/xapi.d/plugins.  It will also spit out the name
 | 
						|
  of the integration bridge that you'll need for your nova configuration.
 | 
						|
  Make sure to specify this in your nova flagfile as --flat_network_bridge.
 | 
						|
- Run the agent [on your hypervisor (dom0)]:
 | 
						|
$ /etc/xapi.d/plugins/ovs_quantum_agent.py /etc/xapi.d/plugins/ovs_quantum_plugin.ini
 | 
						|
 | 
						|
# -- KVM Agent configuration
 | 
						|
 | 
						|
- Copy ovs_quantum_agent.py and ovs_quantum_plugin.ini to the Linux host and run: 
 | 
						|
$ python ovs_quantum_agent.py ovs_quantum_plugin.ini
 | 
						|
 | 
						|
# -- Getting quantum up and running
 | 
						|
 | 
						|
- Start quantum [on the quantum service host]:
 | 
						|
~/src/quantum  $ PYTHONPATH=.:$PYTHONPATH python bin/quantum etc/quantum.conf
 | 
						|
- Run ovs_quantum_plugin.py via the quantum plugin framework cli [on the
 | 
						|
  quantum service host]
 | 
						|
~/src/quantum$ PYTHONPATH=.:$PYTHONPATH python quantum/cli.py
 | 
						|
 | 
						|
This will show help all of the available commands.
 | 
						|
 | 
						|
An example session looks like this:
 | 
						|
 | 
						|
$ export TENANT=t1
 | 
						|
$ PYTHONPATH=. python quantum/cli.py create_net $TENANT network1
 | 
						|
Created a new Virtual Network with ID:e754e7c0-a8eb-40e5-861a-b182d30c3441
 | 
						|
$ export NETWORK=e754e7c0-a8eb-40e5-861a-b182d30c3441
 | 
						|
$ PYTHONPATH=. python quantum/cli.py create_port $TENANT $NETWORK
 | 
						|
Created Virtual Port:5a1e121b-ccc8-471d-9445-24f15f9f854c on Virtual Network:e754e7c0-a8eb-40e5-861a-b182d30c3441
 | 
						|
$ export PORT=5a1e121b-ccc8-471d-9445-24f15f9f854c
 | 
						|
$ PYTHONPATH=. python quantum/cli.py plug_iface $TENANT $NETWORK $PORT ubuntu1-eth1
 | 
						|
Plugged interface "ubuntu1-eth1" to port:5a1e121b-ccc8-471d-9445-24f15f9f854c on network:e754e7c0-a8eb-40e5-861a-b182d30c3441
 | 
						|
 | 
						|
(.. repeat for more ports and interface combinations..)
 | 
						|
 | 
						|
# -- Other items
 | 
						|
 | 
						|
- To get a listing of the vif names in the format that the ovs quantum service
 | 
						|
  will expect them in, issue the following command on the hypervisor (dom0):
 | 
						|
$ for vif in `xe vif-list params=uuid --minimal | sed s/,/" "/g`; do echo $(xe vif-list params=vm-name-label uuid=${vif} --minimal)-eth$(xe vif-list params=device uuid=${vif} --minimal); done
 |