Merge "Outline for OVSDB Beryllium documents."
[docs.git] / manuals / user-guide / src / main / asciidoc / vtn / VTN_OpenStack_Support-user.adoc
1 === VTN OpenStack Configuration
2
3 This guide describes how to set up OpenStack for integration with OpenDaylight Controller.
4
5 While OpenDaylight Controller provides several ways to integrate with OpenStack, this guide focus on the way which uses VTN features available on OpenDaylight controller.In the integration, VTN Manager work as network service provider for OpenStack.
6
7 VTN Manager features, enable OpenStack to work in pure OpenFlow environment in which all switches in data plane are OpenFlow switch.
8
9 ==== Requirements
10 To use OpenDaylight as Network Service Provider for OpenStack.
11
12 ==== Components
13 * OpenDaylight Controller.
14 * OpenStack Control Node.
15 * OpenStack Compute Node.
16 * OpenFlow Switch like mininet(Not Mandatory).
17
18 The VTN features support multiple OpenStack nodes. You can deploy multiple OpenStack Compute Nodes.
19 In management plane, OpenDaylight Controller, OpenStack nodes and OpenFlow switches should communicate with each other.
20 In data plane, Open vSwitches running in OpenStack nodes should communicate with each other through a physical or logical OpenFlow switches. The core OpenFlow switches are not mandatory. Therefore, you can directly connect to the Open vSwitch's.
21
22 .LAB Setup
23 image::vtn/vtn_devstack_setup.png["LAB Setup" ,width= 500]
24 NOTE: Ubuntu 14.04 was used in both the nodes and Vsphere was used for this howto.
25
26 ==== Configuration
27
28 *Server Preparation*
29 [horizontal]
30 - Install Ubuntu 14.04 LTS in two servers (OpenStack Control node and Compute node respectively)
31 - While installing, Ubuntu mandates creation of a User, we created the user "stack"(We will use the same user for running devstack)
32 NOTE: You can also have multiple Compute nodes.
33 TIP: Please do minimal Install to avoid any issues in devstack bringup
34
35 *User Settings*
36 - Login to both servers
37 - Disable Ubuntu Firewall
38
39
40   sudo ufw disable
41
42 - Optionally install these packages
43
44
45   sudo apt-get install net-tools
46
47 - Edit sudo vim /etc/sudoers and add an entry as follows
48
49
50   stack ALL=(ALL) NOPASSWD: ALL
51
52 *Network Settings*
53 - Checked the output of ifconfig -a, two interfaces were listed eth0 and eth1 as indicated in the image above.
54 - We had connected eth0 interface to the Network where OpenDaylight is reachable.
55 - eth1 interface in both servers were connected to a different network to act as data plane for the VM's created using the OpenStack.
56 - Manually edited the file : sudo vim /etc/network/interfaces and made entries as follows
57
58
59    stack@ubuntu-devstack:~/devstack$ cat /etc/network/interfaces
60    # This file describes the network interfaces available on your system
61    # and how to activate them. For more information, see interfaces(5).
62    # The loop-back network interface
63    auto lo
64    iface lo inet loopback
65    # The primary network interface
66    auto eth0
67    iface eth0 inet static
68         address <IP_ADDRESS_TO_REACH_ODL>
69         netmask <NET_MASK>
70         broadcast <BROADCAST_IP_ADDRESS>
71         gateway <GATEWAY_IP_ADDRESS>
72   auto eth1
73   iface eth1 inet static
74        address <IP_ADDRESS_UNIQ>
75        netmask <NETMASK>
76
77 NOTE: Please ensure that the eth0 interface is the default route and it is able to reach the ODL_IP_ADDRESS
78 NOTE: The entries for eth1 are not mandatory, If not set, we may have to manually do "ifup eth1" after the stacking is complete to activate the interface
79
80 *Finalize*
81 - reboot both nodes after the user and network settings to have the network settings applied to the network
82 - Login again and check the output of ifconfig to ensure that both interfaces are listed
83
84 ====  OpenDaylight Settings and Execution
85 =====  vtn.ini
86  * VTN uses the configuration parameters from  'vtn.ini' file for the OpenStack integration.
87  * These values will be set for the OpenvSwitch, in all the participating OpenStack nodes.
88  * A configuration file 'vtn.ini'''' needs to be created manually in the 'configuration' directory.
89  * The contents of 'vtn.ini' should be as follows:
90
91
92 bridgename=br-int
93 portname=eth1
94 protocols=OpenFlow13
95 failmode=secure
96
97  * The values of the configuration parameters must be changed based on the user environment.
98  * Especially, "portname" should be carefully configured, because if the value is wrong, OpenDaylight controller fails to forward packets.
99  * Other parameters works fine as is for general use cases.
100  ** bridgename
101  *** The name of the bridge in Open vSwitch, that will be created by OpenDaylight Controller.
102  *** It must be "br-int".
103  ** portname
104  *** The name of the port that will be created in the vbridge in Open vSwitch.
105  *** This must be the same name of the interface of OpenStack Nodes which is used for interconnecting OpenStack Nodes in data plane.(in our case:eth1)
106  *** By default, if vtn.ini is not created, VTN uses ens33 as portname.
107  ** protocols
108  *** OpenFlow protocol through which OpenFlow Switch and Controller communicate.
109  *** The values can be OpenFlow13 or OpenFlow10.
110  ** failmode
111  *** The value can be "standalone" or "secure".
112  *** Please use "secure" for general use cases.
113
114 ====  Start OpenDaylight
115
116  * Please install the feature *odl-vtn-manager-neutron* that provides the integration with Neutron interface.
117
118 feature:install odl-vtn-manager-neutron
119
120 TIP: After running OpenDaylight, please ensure OpenDaylight listens to the ports:6633,6653, 6640 and 8080
121
122 TIP: Please allow the ports in firewall for the devstack to be able to communicate with OpenDaylight.
123
124 NOTE:
125 * 6633/6653 - OpenFlow Ports
126 * 6640 - Open vSwitch Manager Port
127 * 8282 - Port for REST API
128
129 ====  Devstack Setup
130
131 ===== VTN Devstack Script
132 * The local.conf is a user-maintained settings file. This allows all custom settings for DevStack to be contained in a single file. This file is processed strictly in sequence.
133 The following datas are needed to be set in the local.conf file:
134 * Set the Host_IP as the detection is unreliable.
135 * Set FLOATING_RANGE to a range not used on the local network, i.e. 192.168.1.224/27. This configures IP addresses ending in 225-254 to be used as floating IPs.
136 * Set FLAT_INTERFACE to the Ethernet interface that connects the host to your local network. This is the interface that should be configured with the static IP address mentioned above.
137 * If the *_PASSWORD variables are not set, we will be prompted to enter values during the execution of stack.sh.
138 * Set ADMIN_PASSWORD . This password is used for the admin and demo accounts set up as OpenStack users. We can login to the OpenStack GUI with this credentials only.
139 * Set the MYSQL_PASSWORD. The default here is a random hex string which is inconvenient if you need to look at the database directly for anything.
140 * Set the RABBIT_PASSWORD. This is used by messaging services used by both the nodes.
141 * Set the service password. This is used by the OpenStack services (Nova, Glance, etc) to authenticate with Keystone.
142
143 ====== DevStack Control
144 local.conf(control)
145 [source]
146 #IP Details
147 HOST_IP=<CONTROL_NODE_MANAGEMENT_IF_IP_ADDRESS>#Please Add The Control Node IP Address in this line
148 FLAT_INTERFACE=<FLAT_INTERFACE_NAME>
149 SERVICE_HOST=$HOST_IP
150 #Instance Details
151 MULTI_HOST=1
152 #config Details
153 RECLONE=yes #Make it "no" after stacking successfully the first time
154 VERBOSE=True
155 LOG_COLOR=True
156 LOGFILE=/opt/stack/logs/stack.sh.log
157 SCREEN_LOGDIR=/opt/stack/logs
158 #OFFLINE=True #Uncomment this after stacking successfully the first time
159 #Passwords
160 ADMIN_PASSWORD=labstack
161 MYSQL_PASSWORD=supersecret
162 RABBIT_PASSWORD=supersecret
163 SERVICE_PASSWORD=supersecret
164 SERVICE_TOKEN=supersecrettoken
165 ENABLE_TENANT_TUNNELS=false
166 #Services
167 disable_service rabbit
168 enable_service qpid
169 enable_service quantum
170 enable_service n-cpu
171 enable_service n-cond
172 disable_service n-net
173 enable_service q-svc
174 enable_service q-dhcp
175 enable_service q-meta
176 enable_service horizon
177 enable_service quantum
178 enable_service tempest
179 ENABLED_SERVICES+=,n-api,n-crt,n-obj,n-cpu,n-cond,n-sch,n-novnc,n-cauth,n-cauth,nova
180 ENABLED_SERVICES+=,cinder,c-api,c-vol,c-sch,c-bak
181 #ML2 Details
182 Q_PLUGIN=ml2
183 Q_ML2_PLUGIN_MECHANISM_DRIVERS=opendaylight
184 Q_ML2_TENANT_NETWORK_TYPE=local
185 Q_ML2_PLUGIN_TYPE_DRIVERS=local
186 disable_service n-net
187 enable_service q-svc
188 enable_service q-dhcp
189 enable_service q-meta
190 enable_service neutron
191 enable_service odl-compute
192 ODL_MGR_IP=<ODL_IP_ADDRESS> #Please Add the ODL IP Address in this line
193 OVS_PHYSICAL_BRIDGE=br-int
194 Q_OVS_USE_VETH=True
195 url=http://<ODL_IP_ADDRESS>:8080/controller/nb/v2/neutron #Please Add the ODL IP Address in this line
196 username=admin
197 password=admin
198
199 ====== DevStack Compute
200 local.conf(compute)
201 [source]
202 #IP Details
203 HOST_IP=<COMPUTE_NODE_MANAGEMENT_IP_ADDRESS> #Add the Compute node Management IP Address
204 SERVICE_HOST=<CONTROLLEr_NODE_MANAGEMENT_IP_ADDRESS> #Add the cotnrol Node Management IP Address here
205 #Instance Details
206 MULTI_HOST=1
207 #config Details
208 RECLONE=yes #Make thgis "no" after stacking successfully once
209 #OFFLINE=True #Uncomment this line after stacking successfuly first time.
210 VERBOSE=True
211 LOG_COLOR=True
212 LOGFILE=/opt/stack/logs/stack.sh.log
213 SCREEN_LOGDIR=/opt/stack/logs
214 #Passwords
215 ADMIN_PASSWORD=labstack
216 MYSQL_PASSWORD=supersecret
217 RABBIT_PASSWORD=supersecret
218 SERVICE_PASSWORD=supersecret
219 SERVICE_TOKEN=supersecrettoken
220 #Services
221 ENABLED_SERVICES=n-cpu,rabbit,neutron
222 #ML2 Details
223 Q_PLUGIN=ml2
224 Q_ML2_PLUGIN_MECHANISM_DRIVERS=opendaylight
225 Q_ML2_TENANT_NETWORK_TYPE=local
226 Q_ML2_PLUGIN_TYPE_DRIVERS=local
227 enable_service odl-compute
228 ODL_MGR_IP=<ODL_IP_ADDRESS> #ADD ODL IP address here
229 OVS_PHYSICAL_BRIDGE=br-int
230 ENABLE_TENANT_TUNNELS=false
231 Q_OVS_USE_VETH=True
232 #Details of the Control node for various services
233 [[post-config|/etc/neutron/plugins/ml2/ml2_conf.ini]]
234 Q_HOST=$SERVICE_HOST
235 MYSQL_HOST=$SERVICE_HOST
236 RABBIT_HOST=$SERVICE_HOST
237 GLANCE_HOSTPORT=$SERVICE_HOST:9292
238 KEYSTONE_AUTH_HOST=$SERVICE_HOST
239 KEYSTONE_SERVICE_HOST=$SERVICE_HOST
240 NOVA_VNC_ENABLED=True
241 NOVNCPROXY_URL="http://<CONTROLLER_NODE_IP_ADDRESS>:6080/vnc_auto.html" #Add Controller Node IP address
242 VNCSERVER_LISTEN=$HOST_IP
243 VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
244
245 ====== Devstack Kilo_Liberty Control Node
246 [source]
247 #IP Details
248 HOST_IP=<CONTROL_NODE_MANAGEMENT_IF_IP_ADDRESS> #Please Add The Control Node IP Address in this line
249 SERVICE_HOST=$HOST_IP
250 LOGFILE=stack.sh.log
251 SCREEN_LOGDIR=/opt/stack/data/log
252 LOG_COLOR=False
253 disable_service n-net
254 enable_service q-svc
255 enable_service q-agt
256 enable_service q-meta
257 disable_service q-l3
258 enable_service n-cpu
259 enable_service q-dhcp
260 enable_service n-cauth
261 enable_service neutron
262 enable_service tempest
263 ADMIN_PASSWORD=labstack
264 MYSQL_PASSWORD=supersecret
265 RABBIT_PASSWORD=supersecret
266 SERVICE_PASSWORD=supersecret
267 SERVICE_TOKEN=supersecrettoken
268 ENABLE_TENANT_TUNNELS=True
269 NEUTRON_CREATE_INITIAL_NETWORKS=False
270 #enable_plugin networking-odl http://git.openstack.org/openstack/networking-odl stable/kilo # Please uncomment this line if you
271 want to use stable/kilo branch
272 #enable_plugin networking-odl http://git.openstack.org/openstack/networking-odl stable/liberty # Please uncomment this line if you
273 want to use stable/liberty branch
274 ODL_MODE=externalodl
275 ODL_MGR_IP=<ODL_IP_ADDRESS> # Please Add the ODL IP Address in this line
276 ODL_PORT=8080
277 ODL_USERNAME=admin
278 ODL_PASSWORD=admin
279 OVS_PHYSICAL_BRIDGE=br-int
280 Q_OVS_USE_VETH=True
281 Q_ML2_TENANT_NETWORK_TYPE=local
282 VNCSERVER_PROXYCLIENT_ADDRESS=$SERVICE_HOST
283 VNCSERVER_LISTEN=0.0.0.0
284 MYSQL_HOST=$SERVICE_HOST
285 RABBIT_HOST=$SERVICE_HOST
286 GLANCE_HOSTPORT=$SERVICE_HOST:9292
287 KEYSTONE_AUTH_HOST=$SERVICE_HOST
288 KEYSTONE_SERVICE_HOST=$SERVICE_HOST
289 [[post-config|/etc/neutron/plugins/ml2/ml2_conf.ini]]
290 [agent]
291 minimize_polling=True
292
293 ====== Devstack Kilo_Liberty Compute Node
294 [source]
295 #IP Details
296 HOST_IP=<COMPUTE_NODE_IP_ADDRESS>
297 SERVICE_HOST=<CONTROL_NODE_IP_ADDRESS>
298 LOGFILE=stack.sh.log
299 SCREEN_LOGDIR=/opt/stack/data/log
300 LOG_COLOR=False
301 RECLONE=yes # Make it "no" after stacking successfully the first time
302 #OFFLINE=True # Uncomment this after stacking successfully the first time
303 disable_all_services
304 enable_service n-cpu
305 NOVA_VNC_ENABLED=True
306 ADMIN_PASSWORD=labstack
307 MYSQL_PASSWORD=supersecret
308 RABBIT_PASSWORD=supersecret
309 SERVICE_PASSWORD=supersecret
310 SERVICE_TOKEN=supersecrettoken
311 ENABLE_TENANT_TUNNELS=True
312 NEUTRON_CREATE_INITIAL_NETWORKS=False
313 #enable_plugin networking-odl http://git.openstack.org/openstack/networking-odl stable/kilo # Please uncomment this line if you
314 want to use stable/kilo branch
315 #enable_plugin networking-odl http://git.openstack.org/openstack/networking-odl stable/liberty # Please uncomment this line if you
316 want to use stable/liberty branch
317 ODL_MODE=compute
318 ODL_MGR_IP=<ODL_IP_ADDRESS> # Please Add the ODL IP Address in this line
319 ODL_PORT=8080
320 ODL_USERNAME=admin
321 ODL_PASSWORD=admin
322 OVS_PHYSICAL_BRIDGE=br-int
323 VNCSERVER_PROXYCLIENT_ADDRESS=$HOST_IP
324 VNCSERVER_LISTEN=0.0.0.0
325 MYSQL_HOST=$SERVICE_HOST
326 RABBIT_HOST=$SERVICE_HOST
327 GLANCE_HOSTPORT=$SERVICE_HOST:9292
328 KEYSTONE_AUTH_HOST=$SERVICE_HOST
329 KEYSTONE_SERVICE_HOST=$SERVICE_HOST
330 [[post-config|/etc/neutron/plugins/ml2/ml2_conf.ini]]
331 [agent]
332 minimize_polling=True
333
334 NOTE:
335    We have to comment OFFLINE=TRUE in local.conf files, this will make all the installations to happen automatically.
336    RECLONE=yes only when we set up the DevStack environment from scratch.
337
338 =====  Get Devstack (All nodes)
339 * Install git application using
340 ** sudo apt-get install git
341 * Get devstack
342 ** git clone https://git.openstack.org/openstack-dev/devstack;
343 * Switch to stable/Juno Version branch
344 ** cd devstack
345 ** git checkout stable/juno
346
347 NOTE:
348    If you want to use stable/kilo Version branch, Please execute the below command in devstack folder
349    
350    
351    git checkout stable/kilo
352
353 NOTE:
354    If you want to use stable/liberty Version branch, Please execute the below command in devstack folder
355    
356    
357    git checkout stable/liberty
358
359 ===== Stack Control Node
360
361 .local.conf: <<_devstack_control,DevStack Control>>
362
363   cd devstack in the controller node
364
365 * Copy the contents of local.conf for juno (devstack control node) from <<_devstack_control,DevStack Control>>  and save it as "local.conf" in the "devstack".
366 * Copy the contents of local.conf for kilo and liberty (devstack control node) from <<_devstack_kilo_liberty_control_node,Devstack Kilo_Liberty Control Node>> and save it as "local.conf" in the "devstack".
367 * Please modify the IP Address values as required.
368 * Stack the node
369
370   ./stack.sh
371
372 ====== Verify Control Node stacking
373 * stack.sh prints out Horizon is now available at http://<CONTROL_NODE_IP_ADDRESS>:8080/
374 * Execute the command 'sudo ovs-vsctl show' in the control node terminal and verify if the bridge 'br-int'  is created.
375
376 ===== Stack Compute Node
377
378 .local.conf: <<_devstack_compute,DevStack Compute>>
379
380   cd devstack in the controller node
381
382 * Copy the contents of local.conf for juno (devstack compute node) from <<_devstack_compute,DevStack Compute>> and save it as "local.conf" in the "devstack".
383 * Copy the contents of local.conf file for kilo and liberty (devstack compute node) from <<_devstack_kilo_liberty_compute_node,Devstack Kilo_Liberty Compute Node>> and save it as "local.conf" in the "devstack".
384 * Please modify the IP Address values as required.
385 * Stack the node
386
387
388   ./stack.sh
389
390 ====== Verify Compute Node Stacking
391 * stack.sh prints out This is your host ip: <COMPUTE_NODE_IP_ADDRESS>
392 * Execute the command 'sudo ovs-vsctl show' in the control node terminal and verify if the bridge 'br-int'  is created.
393 * The output of the ovs-vsctl show will be similar to the one seen in control node.
394
395 ===== Additional Verifications
396 * Please visit the OpenDaylight DLUX GUI after stacking all the nodes, http://<ODL_IP_ADDRESS>:8181/dlux/index.html. The switches, topology and the ports that are currently read can be validated.
397
398 TIP: If the interconnected between the Open vSwitch is not seen, Please bring up the interface for the dataplane manually using the below comamnd
399
400
401   ifup <interface_name>
402
403 TIP: Some versions of Open vSwitch, drop packets when there is a table-miss, So please add the below flow to all the nodes with Open vSwitch version (>=2.1)
404
405
406   ovs-ofctl --protocols=OpenFlow13 add-flow br-int priority=0,actions=output:CONTROLLER
407
408 TIP: Please Accept Promiscuous mode in the networks involving the interconnect.
409
410 ===== Create VM from Devstack Horizon GUI
411 * Login to http://<CONTROL_NODE_IP>:8080/ to check the horizon GUI.
412
413 .Horizon GUI
414 image::vtn/OpenStackGui.png["Horizon",width= 600]
415
416 Enter the value for User Name as admin and enter the value for Password as labstack.
417
418 * We should first ensure both the hypervisors(control node and compute node) are mapped under hypervisors by clicking on Hpervisors tab.
419
420 .Hypervisors
421 image::vtn/Hypervisors.png["Hypervisors",width=512]
422
423 * Create a new Network from Horizon GUI.
424 * Click on Networks Tab.
425 * click on the Create Network button.
426
427 .Create Network
428 image::vtn/Create_Network.png["Create Network" ,width=600]
429
430 *  A popup screen will appear.
431 *  Enter network name and click Next button.
432
433 .Step 1
434 image::vtn/Creare_Network_Step_1.png["Step 1" ,width=600]
435 * Create a sub network by giving Network Address and click Next button .
436
437 .Step 2
438 image::vtn/Create_Network_Step_2.png[Step 2,width=600]
439
440 * Specify the additional details for subnetwork (please refer the image for your reference).
441
442 .Step 3
443 image::vtn/Create_Network_Step_3.png[Step 3,width=600]
444
445 * Click Create button
446 * Create VM Instance
447 * Navigate to Instances tab in the GUI.
448
449 .Instance Creation
450 image::vtn/Instance_Creation.png["Instance Creation",width=512]
451
452 * Click on Launch Instances button.
453
454 .Launch Instance
455 image::vtn/Launch_Instance.png[Launch Instance,width=600]
456
457 * Click on Details tab to enter the VM details.For this demo we are creating Ten VM's(instances).
458
459 * In the Networking tab, we must select the network,for this we need to drag and drop the Available networks to Selected Networks (i.e.,) Drag vtn1 we created from Available networks to Selected Networks and click Launch to create the instances.
460
461 .Launch Network
462 image::vtn/Launch_Instance_network.png[Launch Network,width=600]
463
464 * Ten VM's will be created.
465
466 .Load All Instances
467 image::vtn/Load_All_Instances.png[Load All Instances,width=600]
468
469 * Click on any VM displayed in the Instances tab and click the Console tab.
470
471 .Instance Console
472 image::vtn/Instance_Console.png[Instance Console,width=600]
473
474 * Login to the VM console and verify with a ping command.
475
476 .Ping
477 image::vtn/Instance_ping.png[Ping,width=600]
478
479 ===== Verification of Control and Compute Node after VM creation
480 * Every time a new VM is created, more interfaces are added to the br-int bridge in Open vSwitch.
481 * Use *sudo ovs-vsctl show* to list the number of interfaces added.
482 * Please visit the DLUX GUI to list the new nodes in every switch.
483
484 ==== Using the DLUX GUI
485 For more information see <<_using_the_opendaylight_user_interface_dlux,the chapter on DLUX>> above.
486
487 ===== References
488 * http://devstack.org/guides/multinode-lab.html
489 * https://wiki.opendaylight.org/view/File:Vtn_demo_hackfest_2014_march.pdf