Tungsten Fabric入门宝典丨开始第二天的工作

完成Tungsten Fabric的安装后,用户需要查看运行状态(例如路由表和vif状态),并在Tungsten Fabric DB中配置各种对象,例如virtual-network, logical-router, bgp-router等。

尽管Tungsten Fabric与OpenStack Neutron和Kubernetes YAML集成在一起以配置一些参数,但是在许多情况下,这些DB需要由Tungsten Fabric API或Tungsten Fabric webui直接编辑。

下面我来介绍能实现此目标的几种选择。

ist.py

由于ist.py在本文档中已经使用很多次了,这里没有更多可以说的了。

https://github.com/vcheny/contrail-introspect-cli

它可以基于各种Tungsten Fabric组件的introspect API,使用路由的操作命令来转储类似信息,包括路由表、bgp状态、组件状态等。

有一点需要补充的是,在vRouter上,还有其他几个命令会显示类似的信息,比如vif、flow、vxlan、nh、rt、......

https://github.com/Juniper/contrail-vrouter/tree/master/utils

由于ist.py将从vrouter-agent中选择信息,而那些工具从netlink中选择信息,因此(大多数)信息始终会同步。

• 不过,当vRouter吞吐量是关键时,实时信息如vif --list --rate, flow -s将是一个很好的补充。

contrail-api-cli

当需要从CLI更新Tungsten Fabric的配置时,也许使用这个工具将是最好的方法之一。

https://github.com/eonpatapon/contrail-api-cli

它也可以像Unix shell一样,以直观的方式转储和遍历Tungsten Fabric DB的内容,并在需要时执行ls、cat、edit,并检查ref和back_refs。

下面介绍一些我认为有用的命令。

安装步骤

请键入以下命令,以在Centos7上安装此工具。

如果显示某些依赖性错误,virtualenv可能会有所帮助。

完成安装后,请尝试以下命令来测试Tungsten Fabric访问(在此示例中使用了Kubernetes安装)。

ls

如果安装了此工具,我首先建议键入这个命令。

然后,它会将所有的uuid以原来的名字转储到Tungsten Fabric DB中!

结合这一点和cat命令,只需几行就可以写出一个转储DB内所有配置的命令,这对于调查配置的内容非常有用。

cat

此命令类似于Unix cat,它将json文件转储到Tungsten Fabric DB中。要查看每个元素中配置的内容,可以使用此命令。

tree

该命令有两个选项,我认为这两个选项都很有用。

这条命令基本上可以把一个元素所拥有的 refs 和 back_refs 转储出来。

举个例子,如果要查看一个virtual-network中的所有端口,就需要用到此命令。

另外一个选项是-P,它转储一个元素的父级。此选项在某些情况下也很有用。

edit

该命令的基本思想是,首先GET具有特定uuid的json文件,并将其保存在临时文件中,然后编辑(edit)该文件,再使用相同的uuid来PUT该文件以更新内容。

• 举例来说,与visudo的行为比较类似

此外,由于支持EDITOR环境变量,该命令可能会更强大。

默认情况下,EDITOR被定义为“vim”,但由于它可以是任何命令或脚本(例如python文件),因此可以说,它为Tungsten Fabric的自动化打下了良好的基础(基于REST API)。

• 不幸的是,由于目前尚无任何主要的自动化工具(如ansible、manageiq、terraform)直接支持Tungsten Fabric API,因此这可能是配置Tungsten Fabric特定选项(如virtual-networks的route-target,或端口的packet-mode)的唯一方法。

• 如果安装了neutron-plugin,你还可以通过Neutron API使用ansible、manageiq、terraform等工具

此命令的基本用法将像这样,以更新uuid指定的某些元素。

如果自动化是一个预期的用例,可以使用与此类似的命令。

因此,通过这个命令,你可以在没有深入了解 Tungsten Fabric API 的情况下,对 Tungsten Fabric json 进行编程编辑。由于许多对象都是由Neutron API等创建的,因此可能首先要使用它们,然后借助此工具,使用Tungsten Fabric特定参数(比如route-target)对其进行更新

webui

尽管目前有几种出色的CLI工具可以用,但从历史上看,大多数操作都是通过Tungsten Fabric webui完成的。

你可以在https://(controller-ip):8143找到它,默认的用户名/密码为admin / contrail123。

• 用户名/密码可以通过webui config参数更改:

https://github.com/Juniper/contrail-container-builder/blob/master/containers/controller/webui/base/entrypoint.sh#L248

左上角有四个图标,分别表示“Monitor”、“Configure”、“Inspect”、“Query”。

每个模块都具有这些功能。

1. Monitor:在某些情况下,此模块主要基于introspect、analytics UVE和配置DB的信息,来显示每个组件的状态。(如果未安装analyticsdb,则某些功能可能无法正常运行)

2. Configure:大多数的配置任务将在此模块中完成。

3. Inspect:该模块具有三个选项卡:list-of-uuid、introspect、config editor。Introspect显示与ist.py相同的信息。List-of-uuid和config editor显示与contil-api-cli ls和contrail-api-cli cat / edit类似的信息。

4. Query:该模块将查询analyticsdb的内容。它显示了与contrail-logs、contrail-flows、contrail-sessions等命令相同的信息。

https://github.com/Juniper/contrail-controller/wiki/Contrail-utility-scripts-for-getting-logs,-stats-and-flows-from-analytics)如果未安装analyticsdb,该模块将显示为灰色。

虽然这个webui对于掌握Tungsten Fabric的现状是非常有用的,但是如果节点数量很多(如超过2000个),它的响应可能会有点慢。在这种情况下,基于CLI的方法会更有意义。

backup和restore

对于SDN配置这样的重要数据来说,backup / restore是非常重要的功能。

Tungsten Fabric支持通过db_json_exim.py脚本进行backup和restore。这个过程描述如下。

https://www.juniper.net/documentation/en_US/contrail5.1/topics/concept/backup-using-json-50.html

注意:这个repo也可能有用(restore已通过测试)

https://github.com/konono/contrail_backup

更改容器参数

在R5.0以后,Tungsten Fabric组件通过docker容器分发。由于这些容器有各种环境变量来改变行为,所以有时需要在安装后更新容器的环境变量。下面我来介绍一下如何更改它们。

容器参数列表

容器参数通常用于在/entrypoint.sh中创建conf文件,该文件会更改每个微服务的行为。要查看容器环境和相关参数,最直接的方法就是查看这个repo。

https://github.com/Juniper/contrail-container-builder/tree/master/containers

此repo包含各种容器的Dockerfile和entrypoint.sh,因此,通过该操作,你可以检查如何修改所需的参数。

例如,如果你要更改vrouter-agent的网关参数,可以检查此文件,然后直接使用VROUTER_GATEWAY替换该参数。

https://github.com/Juniper/contrail-container-builder/blob/master/containers/vrouter/agent/entrypoint.sh

因此,如果你知道所需的微服务参数,可以检查相应的容器环境变量。

请注意,在某些情况下,没有容器环境变量可以直接修改微服务参数。

在这种情况下,可以使用add_ini_params_from_env函数,该函数位于每个entrypoint.sh的最后一部分。

此时,如果你给出这个环境变量,

VROUTER_AGENT__FLOWS__thread_count=8

它可以转换为[FLOWS], thread_count=8,于是,即使没有提供方便的参数来修改它,你仍然可以使用该方法直接修改微服务的conf文件。

ansible-deployer

如果使用ansible-deployer,它将使用docker-compose创建docker容器,并且在/etc/contrail/common_xxx.env中定义环境变量(xxx是角色名)。
因此,如果要更新诸如vrouter参数之类的信息,你可以编辑(edit)/etc/contrail/common_vrouter.env,然后键入以下命令。

然后,vrouter容器会被重新创建,并应用新的参数。

kubeadm

如果使用kubeadm和kubernetes yaml安装Tungsten Fabric容器,则每个容器都将使用名为“env”的配置映射(configmap)作为环境变量的来源。因此,你可以键入此命令来编辑(edit)环境变量,并可以删除一些Tungsten Fabric的pod以重新创建容器。(由于容器被定义为DaemonMap,它将自动重新创建)。

kubectl edit configmap -n kube-system env

保持数据一致性

由于cassandra不支持事务(transaction),并且zookeeper和casssandra都具有一些数据,因此当使用config-api时,不可避免地要在应用程序级别维护数据库的一致性。

https://github.com/Juniper/contrail-controller/wiki/Database-management-tool-to-check-and-fix-inconsistencies

接下来我会总结一些故障情况和管理脚本以解决此问题。

在某些情况下,你需要进行数据维护。

1. 创建两个具有ref和back_refs的对象,但是在添加back_refs之前config-api就崩溃了。

2. Zookeeper维护一些对象的uuid和indexallocator列表,例如每个子网中的IP分配。因此,在更新zookeeper之后以及在更新cassandra之前config-api崩溃时,它将导致两个数据库之间的差异。

Config-api有一个数据维护脚本db_manage.py来解决这种情况。

https://github.com/Juniper/contrail-controller/blob/master/src/config/api-server/vnc_cfg_api_server/db_manage.py

主要的命令有三个,我们将会周期性地键入它们。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/24130.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于20-05-21
0