看看有趣的ONOS Ⅶ:流规则、应用子系统

2020-06-01  本文已影响0人  SmartSloth

流规则子系统

说明:翻译自自学https://wiki.onosproject.org/display/ONOS/Flow+Rule+Subsystem

介绍

流规则子系统负责管理系统中的流规则并将其安装在网络中的设备中。

该子系统实现了分布式权威流表的语义,其中流规则的主副本位于控制器中,并将其下推到设备中。这意味着流规则子系统永远不会尝试从网络中发现信息,也不会尝试解决设备上已经存在的流。如果ONOS根据其权威流表在设备上检测到不应存在的流,则该流将被删除。

流规则子系统实现的通用模型也适用于组子系统和度量标准子系统。

管理流程

流通过FlowRuleService API安装到流规则子系统中。系统中的流以下列状态之一存在:

流规则子系统支持批量安装相互依赖的流。这是使用FlowRuleOperations对象完成的,该对象包含FlowRuleOperation的阶段列表。语义是在流规则系统可以在后续阶段开始工作之前,必须完全完成每个阶段中的操作。此功能的一个示例用法是,当您要在头流规则之前安装路径的尾部,以防止在建立路径时产生流量黑洞。

数据平面协调

流规则提供者负责收集有关网络中安装的流的统计信息,并将这些统计信息报告给流规则子系统。流规则子系统使用这些报告来确保其对权威状态的想法仍然存在于网络上的设备上。

例如,OpenFlowRuleProvider使用OpenFlow的FLOW_STATS_REQUEST消息定期查询设备上的流。当设备以FLOW_STATS_REPLIES进行响应时,提供程序将使用FlowRuleProviderService的pushFlowMetrics()方法将此信息发送到流规则子系统。如果流规则子系统可以将这些流度量标准与其存储中的流进行匹配,它将更新这些流的统计信息。如果发现数据平面上没有多余的数据流,它将从数据平面中删除这些数据流。如果检测到数据平面中缺少流,它将尝试重新安装它。


应用子系统

说明:翻译自学自https://wiki.onosproject.org/display/ONOS/Application+Subsystem

总览

应用子系统的目的是简化集群中所有ONOS实例之间的软件交付和管理。子系统使用ONOS最终一致的映射和节点间通信机制在整个ONOS群集中完全复制应用程序清单。要将OSGi捆绑软件作为一组安装和点燃,子系统依赖于底层的Apache Karaf功能机制。

现在,ONOS提供的所有内置样本和测试应用程序都是使用此机制交付的,并且作为标准ONOS发行版的一部分已预先安装(尽管未激活)。这包括任何提供程序,例如OpenFlow提供程序。这样,所有可选软件组件都可以安装到ONOS或从ONOS撤回,而无需重建,甚至无需重新配置ONOS本身。

应用包

可以将应用程序打包到一个.oar(ONOS Application aRchive)文件中,以便将软件轻松交付给正在运行的ONOS集群。.oar文件是一个ZIP文件,其中包含所有工件,例如功能定义或OSGi捆绑包,否则它们在Maven Central上可能不可用。下面介绍.oar文件的结构:

可以很容易地使用onos-maven-plugin生成应用程序包文件。pom.xml文件需要在其构建部分中包含onos-maven-plugin,如果pom.xml定义了onos.app.name属性,或者如果模块基本目录包含app.xml文件,则插件将构建该应用程序.oar文件,此文件将在Maven安装阶段安装到M2存储库中。请参见下面的Maven示例。

应用定义

通过在捆绑软件的pom.xml文件中指定以下属性,可以轻松生成单个捆绑软件应用程序:

可以使用模块基础目录中的app.xml文件定义多捆绑应用程序,或需要引入其他工件或自定义功能依赖项的应用程序。app.xml的文件指定以下属性:

以下是应用程序app.xml文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<app name="org.onosproject.sample" origin="ON.Lab" version="${project.version}"
     featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
     features="sample-app">
    <description>${project.description}</description>
    <artifact>mvn:...</artifact>
</app>

app.xml文件可以包含Maven属性,例如{project.groupId}{project.artifactId}{project.version}{project.description},这将导致从Maven pom.xml文件。强烈建议使用它们,以减少所需的维护量。

ONOS代码库在apps源代码树下包含这两种方法的示例。

CLI命令

管理员可以使用以下控制台命令与应用程序清单进行交互:

REST API和Shell实用程序

编排系统和工具可以使用REST API直接与应用程序子系统交互,也可以使用onos-app的shell实用程序,该实用程序使用REST API并具有以下用法:

Maven的例子

以下代码段显示了所需的onos-maven-plugin配置。ONOS内置和示例应用程序模块从ONOS根pom继承此配置,但是外部应用程序需要在其POM层次结构中包括此配置,或者它们需要从ONOS根POM继承:

<plugins>
    ...
    <plugin>
        <groupId>org.onosproject</groupId>
        <artifactId>onos-maven-plugin</artifactId>
        <version>1.4-SNAPSHOT</version>
        <executions>
            <execution>
                <id>app</id>
                <phase>package</phase>
                <goals>
                    <goal>app</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    ...
</plugins>

请注意,该插件会将.oar文件标记为安装工件,从而在调用Maven 安装部署目标时将其安装或部署到Maven存储库中。

内置的样品和测试应用

下表描述了所有内置驱动程序,提供程序以及各种示例和测试应用程序的清单:

上一篇 下一篇

猜你喜欢

热点阅读