最近在做一个sdn(Software Defined Network)相关的项目,需要用到一个开源的SDN软件opendaylight。越做越发现网上的文档真的更新得很慢。所以这里简单记录以下搭建的过程,也方便有需要的小伙伴参考

1. 基本环境

  • 虚拟机软件:VirtualBox 5.1.26 r117224
  • 虚拟机系统:ubuntu-16.04.2-server-amd64
  • JDK版本: Oracle 8u144
  • ODL版本: Opendaylight Boron SR3

2. 虚拟机配置

虚拟机软件可以任意选,其实我一开始是在mac OS下使用Parallel Desktop来安装的。但是考虑到尽量和团队的环境保持一致,以避免因环境差异带来的Bug,所以使用VirtualBox这款Oracle的开源软件。它可以在windows、linux、mac OS下运行。

虚拟机系统选择Linux的,因为要做网络相关的开发。我这里选择自己比较熟悉的ubuntu。至于为什么选择server版本而不是desktop版本,是因为我并不需要desktop版本的很多功能(例如桌面等等),这样当我开多个虚拟机的时候可以比较节省资源(不用看着虚拟机界面一卡一卡的)。另一方面是为了锻炼自己linux的实操经验,毕竟真实生产环境下,多数也是用的server版本而不是桌面版本。

安装系统的过程不再赘述。这里提一下设置主机到虚拟机的端口转发。

2.1 虚拟机ssh端口转发

使用ssh的原因是有时候我们可以直接远程登陆到虚拟机操作,以及方便使用scp复制一些东西到server版本的虚拟机上面去。另外,由于没有图形界面,貌似VirualBox的剪切板并不能使用。使用ssh的话能比较方便地从本地的terminal去复制粘贴文本。
我这里的odl虚拟机设置了两个虚拟网卡,分别对应两种连接方式
NAt ip:10.0.2.15
用于访问外网
HOST-ONLYip:192.168.56.103
用于主机和虚拟机间的通信
如果我们使用NAT方式作为虚拟机连接网络的方式,那么虚拟机相当于我们内网的一台机器,我们想要连接到这台内网的机器,就需要通过映射的端口来访问。
设置--网络--高级--端口转发

虚拟机网络配置端口转发
然后添加端口映射,22是虚拟机的ssh端口
虚拟机网络配置端口转发
这样我就可以使用putty访问本地的2222端口来ssh到虚拟机的上面了
putty登陆

2.2 配置Java环境

可以使用apt-get安装。由于下载速度比较慢,我这里采用的时候自己下载好jdk安装包之后放在了/opt目录下面

ubuntu@odl:/opt$ ll
total 181188
drwxr-xr-x  3 root   root        4096 Aug  5 17:37 ./
drwxr-xr-x 23 root   root        4096 Aug  6 20:06 ../
drwxr-xr-x  8 uucp      143      4096 Jul 12 19:41 jdk1.8.0_141/

解压缩

ubuntu@odl:/opt$ tar -zxvf jdk1.8.0_141/

配置JDK以及JRE环境,编辑/etc/profile

ubuntu@odl:/opt$ sudo vim /etc/profile

追加内容

export JAVA_HOME=/opt/jdk1.8.0_141
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib

检测是否配置成功

ubuntu@odl:/opt$ source /etc/profile
ubuntu@odl:/opt$ java

3. 下载安装Opendaylight

3.1 下载源码

opendaylight downloads-and-documentation,你可以找到Opendaylight的各个版本的下载地址以及对用的文档相关连接。

选择PreBuild Tar或者Zip下载即可。由于项目需要,我选择的是Boron-SR3版本的。
下载速度过慢的话,可考虑科学上网或者先wget到国外的vps后,再下回到本地。

3.2 安装及启动服务

解压下载出来的源码

ubuntu@odl:~$ tar -zxvf distribution-karaf-0.5.3-Boron-SR3/

启动服务

ubuntu@odl:~$ cd distribution-karaf-0.5.3-Boron-SR3/bin/
ubuntu@odl:~/distribution-karaf-0.5.3-Boron-SR3/bin$ ./karaf

稍等一会,如果启动成功,我们可以看到这么一个界面

3.3 ODL与karaf

Opendaylight是基于karaf开发的。如果想要在ODL上进行开发的话,可以了解一下karaf、maven、OSGI等名词,这些能帮助你理解ODL的开发架构。当然刚接触的时候可以暂时略过。

3.4 安装features

在这个交互界面的任何位置,可以通过按tab来查看提示,通过--help来查看帮助。
例如

feature:install --help

你就可以看到安装features的语法。
更加具体的安装过程,可以在对应版本的Installation Guide里面找到

opendaylight-docs
各个features的描述也可以在Installation Guide里面找到。
oepndaylight-karaf-features
我们可以先看看默认情况下安装了哪些feature

opendaylight-user@root>feature:list -i

odl-feature-init
features有很多,这里我们可以使用grep查找我们需要的feautre,例如我们需要查找ovsdb相关的feature

opendaylight-user@root>feature:list |grep ovsdb

网上有很多教程都是给你列出了一大堆feature让你去安装。刚开始学习的话可以这么做。但我个人来说的话并不是很喜欢这种做法,因为很多我并不知道哪些feature是做什么用的。(尽管这能避免一些缺少feature而造成的Bug)。而且当安装了很多feature之后,启动和关闭karaf服务都变得奇慢无比。
个人的建议是,参考Installation Guide中feature的功能描述,来安装自己需要的。
作为简单尝试,我们可以先安装一些组件
opendaylight的feature都是以odl开头的
l2switch这个feature用于2层网络流量的转发
dlux这个feature主要提供了Opendaylight的图形界面

Feature Name Feature Description Karaf feature name Compatibility
DLUX Provides an intuitive graphical user interface for OpenDaylight odl-dluxapps-applications all
L2 Switch Provides L2 (Ethernet) forwarding across connected OpenFlow switches and support for host tracking odl-l2switch-switch-ui self+all
opendaylight-user@root>feature:install odl-l2switch-all odl-dlux-all

安装完成之后,可以在浏览器中访问

http://<opendaylight-ip>:8181/index.html

查看opendaylight的用户界面。
这里注意将opendaylight-ip换成你自己的opendaylight虚拟机的ip,例如我这就是

http://192.168.56.103:8181/index.html

初始登陆账户和密码都是admin

odl-login

登陆成功后的界面:

odl-user-interface

3.5 删除feature

opendaylight-user@root> feature:uninstall feature-name

以下这句话来自karaf文档

Normally Karaf remembers the features and bundles you installed and started. To reset Karaf into a clean state, just delete the data directory when Karaf is not running.

通常情况下Karaf会记得你安装和启用的的features和bundles。想要设置karaf到干净的状态,只需要在Karaf没有运行的状态下,删除data目录。
如果你安装了很多很多feature,如果要全部删除的话,一个个打feature名称会很麻烦。这时候你可以删除odl目录下的data文件夹,然后在执行karaf时加上clean选项。

ubuntu@odl:~/distribution-karaf-0.5.3-Boron-SR3$ rm -r data/
ubuntu@odl:~/distribution-karaf-0.5.3-Boron-SR3$ cd bin/
ubuntu@odl:~/distribution-karaf-0.5.3-Boron-SR3/bin$ ./karaf clean

4. 参考连接

  1. opendaylights downloads-and-documentation
  2. opendaylight docs:Installing OpenDaylight
  3. opendaylight docs:karaf_features
  4. CSDN:在windows下安装OpenDaylight的Helium(氦)版本
  5. CSDN:OpenDayLight基本环境搭建

除另有声明外,本博客文章均采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。