当前位置: 首页 > ONOS > 正文

SDNHUB ONOS Tutorial

SDNHUB ONOS Tutorial

本文档由http://sdnhub.cn译自:
http://sdnhub.org/tutorials/onos/
如果你想更方便的离线阅读,请下载PDF版本:SDNHUB ONOS教程中文版,另,PDF版已经自带书签 :)。

ONOS(Open Network Operating System)是最新发布的开源SDN控制器,它服务提供商应用案例。ONOS平台使用Java语言开发,使用OSGi进行功能管理。与OpenDaylight类似,ONOS使用OSGi运行时Karaf加载独立的特性(individual features)。在我们提供的SDN Hub tutorial VM中,包含了预编译的ONOS 1.1.0。
直接从 这里(百度网盘) 下载OVA虚拟机映像文件。
可以选择我们创建的一个ONOS Docker container repository

1 架构

ONOS平台采用模块化架构,包括(1)application intents;(2)网络拓扑图,它是应用对底层硬件编程的上层抽象。意图(intents)被翻译为OpenFlow规则,这些规则通过南向(Southbound)插件在交换机上被程序化。下图是ONOS的高层(high-level)架构。在顶部的应用程序层,我们展示了一些目前包含在当前发行版中的示例应用列表。

onos-architecture

2 运行ONOS

1 为运行ONOS和Karaf设置环境变量

$ cd onos
$ source ./tools/dev/bash_profile 
$ echo $KARAF_ROOT

2 使用如下命令编译ONOS控制器

$ mvn clean install -nsu -DskipIT -DskipTests

3 运行控制器加载需要的模块。如果一切正常,可以看到ONOS的标志。此时,控制器监听的端口:8181端口提供GUI,端口【6633,6635和6635】用于OpenFlow。

$ karaf clean
Welcome to Open Network Operating System (ONOS)!
     ____  _  ______  ____   
    / __ / |/ / __ / __/    
   / /_/ /    / /_/ /        
   ____/_/|_/____/___/      

Hit '' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '' or type 'system:shutdown' or 'logout' to shutdown ONOS.

onos>

4 在虚拟机中,我们已经设置预加载一些特性(features)(包括在文件~/onos/apache-karaf-3.0.2/etc/org.apache.karaf.features.cfg文件的featuresBoot关键字中)。这将运行单实例(single-instance)ONOS核心,简单的2层转发,和Web GUI等模块。
5 在Karaf控制台运行如下命令验证模块加载情况。

onos> feature:list -i
Name                 | Version          | Installed | Repository              | Description                                       
----------------------------------------------------------------------------------------------------------------------------------
standard             | 3.0.2            | x         | standard-3.0.2          | Karaf standard feature                            
config               | 3.0.2            | x         | standard-3.0.2          | Provide OSGi ConfigAdmin support                  
region               | 3.0.2            | x         | standard-3.0.2          | Provide Region Support                            
package              | 3.0.2            | x         | standard-3.0.2          | Package commands and mbeans                       
http                 | 3.0.2            | x         | standard-3.0.2          | Implementation of the OSGI HTTP Service           
war                  | 3.0.2            | x         | standard-3.0.2          | Turn Karaf as a full WebContainer                 
kar                  | 3.0.2            | x         | standard-3.0.2          | Provide KAR (KARaf archive) support               
ssh                  | 3.0.2            | x         | standard-3.0.2          | Provide a SSHd server on Karaf                    
management           | 3.0.2            | x         | standard-3.0.2          | Provide a JMX MBeanServer and a set of MBeans in K
scr                  | 3.0.2            | x         | standard-3.0.2          | Declarative Service support                       
onos-thirdparty-base | 1.1.0-SNAPSHOT   | x         | onos-1.1.0-SNAPSHOT     | ONOS 3rd party dependencies                       
onos-thirdparty-web  | 1.1.0-SNAPSHOT   | x         | onos-1.1.0-SNAPSHOT     | ONOS 3rd party dependencies                       
onos-api             | 1.1.0-SNAPSHOT   | x         | onos-1.1.0-SNAPSHOT     | ONOS services and model API                       
onos-core-trivial    | 1.1.0-SNAPSHOT   | x         | onos-1.1.0-SNAPSHOT     | ONOS core components                              
onos-gui             | 1.1.0-SNAPSHOT   | x         | onos-1.1.0-SNAPSHOT     | ONOS GUI console components                       
onos-cli             | 1.1.0-SNAPSHOT   | x         | onos-1.1.0-SNAPSHOT     | ONOS admin command console components             
onos-openflow        | 1.1.0-SNAPSHOT   | x         | onos-1.1.0-SNAPSHOT     | ONOS OpenFlow API, Controller & Providers         
onos-app-fwd         | 1.1.0-SNAPSHOT   | x         | onos-1.1.0-SNAPSHOT     | ONOS sample forwarding application                
onos-app-mobility    | 1.1.0-SNAPSHOT   | x         | onos-1.1.0-SNAPSHOT     | ONOS sample mobility application                  
pax-jetty            | 8.1.15.v20140411 | x         | org.ops4j.pax.web-3.1.2 | Provide Jetty engine support                      
pax-http             | 3.1.2            | x         | org.ops4j.pax.web-3.1.2 | Implementation of the OSGI HTTP Service           
pax-http-whiteboard  | 3.1.2            | x         | org.ops4j.pax.web-3.1.2 | Provide HTTP Whiteboard pattern support           
pax-war              | 3.1.2            | x         | org.ops4j.pax.web-3.1.2 | Provide support of a full WebContainer    

6 我们的虚拟机,在ONOS Karaf控制器启动时加载安装的如下特性:
– onos-api: 定义跨模块交互API时需要的服务接口
– onos-core-trivial: 核心层的单实例(Single-instance)版本
– onos-openflow: 使用Loxigen处理连接协议(wire-protocol handling)的OpenFlow插件/驱动程序。
– onos-cli: 实现KarafCLI命令(在下面3.1中列出)
– onos-app-fwd: Reactive-fwding 二层学习型交换机, 并且代理ARP功能以防止ARP fooding
– onos-app-mobility: 主机移动性管理程序(Host mobility handler),当主机移动时负责清理flowmods
– onos-gui: 基于Javascript的UI,使用websockets和可视化网络拓扑结构。

7 在编译时,其它所有被maven加载的的不属于git仓库的依赖或软件集(bundles), from http://repo.maven.apache.org/maven2/org/onosproject.

8 停止特性(features)使用命令feature:uninstall

9 因为在ONOS启动时,默认加载了OpenFlow特性和2层转发特性,我们可以连接1个或多个交换机到控制器。使用控制器管理交换机的数据包转发。在虚拟机中可以启动Mininet来模拟网络,命令如下:

$ sudo mn  --topo linear,2 --mac --switch ovsk,protocols=OpenFlow13 --controller remote --arp
mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=26.4 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=1.69 ms

10 在karaf控制台使用host命令,查看主机是否被可执行学习到

onos> hosts
id=00:00:00:00:00:01/-1, mac=00:00:00:00:00:01, location=of:0000000000000001/1, vlan=-1, ip(s)=[]
id=00:00:00:00:00:02/-1, mac=00:00:00:00:00:02, location=of:0000000000000002/1, vlan=-1, ip(s)=[]

11 ONOS控制器执行LLDP协议去学习网络拓扑中的连接情况,并且计算两台主机间的路径。所以,不使用onos-app-fwd特性,而使用静态的编排连通性是可能的。

12 停止onos-app-fwd特性,在主机间执行ping。ping将返回失败信息。

13 接着,为主机间的双向通信添加静态主机intents。这将被翻译成两个单向(unidirectional)的路径规则。

onos> feature:uninstall onos-app-fwd
onos> add-host-intent 00:00:00:00:00:01/-1 00:00:00:00:00:02/-1 
onos> add-host-intent 00:00:00:00:00:02/-1 00:00:00:00:00:01/-1 

14 添加上面的intent后,再次在h1和h2之间ping,可以ping通了。(Caveat: If the hosts need ARP resolution, that will not work because there is no rule to flood the ARP).

15 最后,在虚拟机上,可以打开Firefox浏览器访问GUIhttp://localhost:8181/onos/ui/index.html。打开后,使用?键获得UI的帮助信息。

3 特性(Features)和应用(Applications)

3.1 ONOS Karaf CLI 命令

在Karaf控制台可以执行一些命令进行状态检查和调试,下面列出的是1.1.0发行版中可用的命令和解释:

命令                            |  功能介绍
------------------------------------------------------------------------------------
onos:add-flows                    |  安装流规则
onos:add-host-intent              |  安装host-to-host连接intent
onos:add-multi-to-single-intent   | 安装point-to-point连接intent
onos:add-optical-intent        |  安装 optical connectivity intent
onos:add-point-intent            |  安装 point-to-point connectivity intent
onos:add-single-to-multi-intent   |  安装 connectivity intent between multiple egress
onos:address-bindings           |  列出所有已配置的地址端口绑定
onos:apps                        |  显示应用(Application)ID信息Lists application ID information
onos:balance-masters              |  Forces device mastership rebalancing
onos:cluster-devices              |  Lists devices of the specified topology cluster in t
onos:cluster-links              |  Lists links of the specified topology cluster in the
onos:clusters                    |  列出当前网络拓扑中的所有集群
onos:device-remove              |  Removes an infrastructure device
onos:device-role                  |  Sets role of the controller node for the given infra
onos:devices                    |  列出所有的infrastructure设备
onos:flows                      |  列出目前已知的所有流
onos:get-stats                  |  获取一个连接点(a connection point)的状态
onos:host-remove                  |  移除一个终端工作站主机
onos:hosts                      |  列出所有已知的主机
onos:intents                      |  Lists the inventory of intents and their states
onos:leaders                      |  Finds the leader for particular topic.
onos:links                      |  Lists all infrastructure links
onos:masters                      |  Lists device mastership information
onos:metrics                      |  Prints metrics in the system
onos:nodes                      |  Lists all controller cluster nodes
onos:paths                      |  Lists all shortest-paths paths between the specified
onos:ports                      |  Lists all ports or all ports of a device
onos:push-random-intents          |  Installs random intents to test throughput
onos:push-test-intents          |  Installs random intents to test throughput
onos:remove-intent              |  Removes the specified intent
onos:resource-allocations        |  Lists allocations by link
onos:resource-available        |  Lists available resources by link
onos:roles                      |  Lists mastership roles of nodes for each device.
onos:summary                      |  Provides summary of ONOS model
onos:tablet-leader              |  Prints the current leader of a tablet.
onos:tablet-member              |  Lists all member nodes
onos:topology                    |  Lists summary of the current topology
onos:wipe-out                    |  Wipes-out the entire network information base, i.e. devices, links, hosts, intents.

3.2 在ONOS上编写应用

ONOS中包含了一个模版应用(apps/foo),可以以此应用为起点开发自己的ONOS应用。ONOS平台提供的服务可以实现很多典型的功能:

  • IntentService: 对intents进行编程和监听其他的intents
  • FlowRuleService: OpenFlow规则,监听被编程的其他规则
  • PacketService: 执行packet_out操作
  • DeviceService: 提取交换机清单并跟踪其变化
  • TopologyService: 提取拓扑图并跟踪其变化

3.3 集群

ONOS 1.1.0支持在集群模式中运行多个控制器,这些控制器共享批次的状态信息。并且,当底层的OpenFlow交换机连接到多个控制器时,这些控制器可以决定哪个控制器作为主控制器,哪些作为备用的或辅助控制器(standby/slave)。这对于提高容错性和高可用性非常有用。

激活集群模式,需要完成下面的两个步骤:

  1. 更新apache-karaf-3.0.2/etc/hazelcast.xml文件中的subnet为对应的子网。
  2. 更新apache-karaf-3.0.2/etc/org.apache.karaf.features.cfg文件中的featuresBoot参数,用onos-core特性代替onos-core-trivial。

本文档由http://sdnhub.cn译自:
http://sdnhub.org/tutorials/onos/
如果你想更方便的离线阅读,请下载PDF版本:SDNHUB ONOS教程中文版,另,PDF版已经自带书签 :)。

本文档由http://sdnhub.cn译自:
http://sdnhub.org/tutorials/onos/
如果你想更方便的离线阅读,请下载PDF版本:SDNHUB ONOS教程中文版,另,PDF版已经自带书签 :)。

本文固定链接: http://sdnhub.cn/index.php/sdnhub-onos-tutorial/ | 软件定义网络SDN

该日志由 sdnhub 于2015年03月14日发表在 ONOS 分类下, 通告目前不可用,你可以至底部留下评论。
原创文章转载请注明: SDNHUB ONOS Tutorial | 软件定义网络SDN
关键字: , , , ,

SDNHUB ONOS Tutorial:等您坐沙发呢!

发表评论

*

快捷键:Ctrl+Enter