Facebook 使用 ZTP 扩展网络配置自动化

阅读数:308 2018 年 6 月 27 日

话题:FacebookDevOps

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。

图片来源:https://code.facebook.com/posts/166812063987311/scaling-the-facebook-backbone-through-zero-touch-provisioning/

在 VM 工作流模型中,工程团队可使用一系列运行任何语言代码的标准步骤。任一步骤如果发生失败,将会重新排入到队列中,进而在将来得以重新执行。每一个步骤中可以包括一个单独二进制程序。需要注意的是,各个步骤可以使用任何编程语言编写。团队正逐步从 MOP 中迁移出来,已开发了越来越多的 VM 步骤替代 MOP。通过确定其中可独立的步骤,进而实现这些步骤的并行运行,VM 进一步加速了配置过程。

在 VM 的未来路线图中还包括 VM 任务组的编排、Facebook 全球网络中Plane的完全自动化重新构建。VM 是近期在网络中应用 DevOps 原则这一浪潮的一个实例。

查看英文原文: Scaling Network Automation at Facebook Using Zero-Touch Provisioning