Facebook遍布全球的网络是由广域主干网和边缘入网点(PoP,Points-of-Presence)组成的,后者用于支持面向终端用户的请求和内部流量。主干网和PoP均在快速发展中。为满足对网络配置和维护的需求,Facebook的网络工程团队构建了一种使用ZTP(零接触配置,Zero Touch Provisioning)方法的工作流框架,称为VM(Vending Machine)。VM通过运行代码执行各种类型的网络设备配置。
\\ZTP提供的机制支持无需任何人工介入,从设备的出厂默认状态开始配置交换机等网络设备。ZTP已得到了多家网络设备提供商的支持。ZTP包括在设备启动时发送请求(通常通过DHCP)、获取中央服务器的位置、从中央服务器下载并应用配置等,此外还可添加一些自动化工具,例如Chef和Puppet等。网络设备以往通常由运维人员手工使用CLI配置,现在可以通过ZTP实现自动配置。鉴于交换机设备厂商已经开始使用DHCP支持ZTP,Facebook团队正与IP路由器和光交换设备厂商一起致力于实现对类似特性的支持。Facebook团队现已完成重用基于DHCP的自动配置自动化工作。
\\Facebook过去曾经构建了一些网络自动化工具,但大部分网络配置是通过MOP(规程做法,Method of Procedure)实现的。MOP事实上就是文档化,例如runbooks等,工程人员必须遵章操作。随着部署需求的日益增加,导致企业需要雇佣更多的工程师运行MOP,事情变得更为复杂和易于出错。Facebook最初的配置系统源自于以控制台为基础的系统。但是历经数年的发展,其中已经添加了不少新的角色、路径和平台,这使得基于MOP的系统更难以使用。VM(Vending Machine)框架正是应此需求而生。据文章介绍,VM以“设备角色、定位和平台”为输入,返回“最新配置的网络设备,以及准备好交付的生产流量”为输出。
\\Facebook工程师在一次演讲中,介绍了企业构建VM的动机:
\\\\\设备响应DHCPDISCOVER消息,之后或是给出一个配置文件,或是提供一个可在网络设备上执行的配置脚本。对于后者而言,脚本如何执行,以及脚本是否适合,取决于不同的设备厂商(目前为止如此)和网络角色。设备通常会在完成自身的配置后重启。现实中,在设备发布到生产环境之前,工程人员通常会有其它事情在做。因此配置不能先于物理安装设备而生成。但是如果配置没有预先生成,那么如何使用配置文件响应DHCP请求?这一问题促使我们去开发一个工作流自动化系统,实现对ZIP机制的包裹(wrap)。
\
演讲中指出,Facebook必须改进其DHCP栈。构建VM时,Facebook的DHCP栈基于ISC的开源DHCP服务器的。VM工作流的起始点是一块特定的Python代码,该代码将通过标准ZTP方法下载到网络设备上。Python代理从VM服务器下载指令、配置、固件和补丁到网络设备,进行安装,并返回输出日志和退出状态给VM。
\\ \\ \\在VM工作流模型中,工程团队可使用一系列运行任何语言代码的标准步骤。任一步骤如果发生失败,将会重新排入到队列中,进而在将来得以重新执行。每一个步骤中可以包括一个单独二进制程序。需要注意的是,各个步骤可以使用任何编程语言编写。团队正逐步从MOP中迁移出来,已开发了越来越多的VM步骤替代MOP。通过确定其中可独立的步骤,进而实现这些步骤的并行运行,VM进一步加速了配置过程。
\\在VM的未来路线图中还包括VM任务组的编排、Facebook全球网络中Plane的完全自动化重新构建。VM是近期在网络中应用DevOps原则这一浪潮的一个实例。
\\查看英文原文: Scaling Network Automation at Facebook Using Zero-Touch Provisioning