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
评论