Python网络运维自动化
上QQ阅读APP看书,第一时间看更新

1.1 Python网络运维自动化应对新挑战

云计算时代的兴起与发展,不仅让网络行业悄然发生了一些变化,也给网络运维带来了诸多挑战。为了应对这些挑战,Python网络运维自动化逐渐兴起。因此,Python网络运维自动化并不是凭空出现的一个细分领域,它本质上是云计算技术快速发展的产物。

1.1.1 云计算时代网络行业的变迁

随着互联网的蓬勃发展,过去十多年间,云计算技术应运而生并不断发展。云计算是一种通过互联网为用户提供按需计算资源和服务的模式,可让用户在任何地点、任何时间、任何设备上访问和使用网络中的数据和应用。云计算的优势包括成本低、灵活性高、可扩展性强、安全性高和可靠性高等,因此在各行业和领域中得到广泛应用。

随着云计算时代的来临,网络运维也发生了很多变化,例如硬件性能的不断提升、网络带宽的不断提高、组网方式的灵活多变和网络协议的可扩展性逐步提高,这些改变都是为了适应云计算技术灵活、可扩展的相关特性。

网络设备的管理模式也发生了很大的变化,除了命令行接口(command line interface,CLI)、简单网络管理协议(simple network management protocol,SNMP)等传统管理方式,还出现了NETCONF、RESTCONF等新的网络管理协议。网络设备的管理方式也从单一手工管理逐步向集中统一自动化管理过渡。早期的SDN(software defined network)概念主要是想通过OpenFlow协议将数据层面的控制进行集中和统一。但是经过一段时间的实践与演进,人们逐渐认识到在更广范围的应用场景下集中和统一控制器的必要性。随之产生的是一些比较有代表性的SDN项目,例如OpenStack Neutron组件、OpenDaylight项目等。

随着云计算的不断深入发展,网络行业中的SD-WAN、IBN、NFV、网络安全等诸多概念被陆续提出。网络与云计算紧密结合,云网融合的理念应运而生,网络连接向更加智能、更加灵活的目标前进,网络也向着简洁、敏捷、开放、集约的新型网络转变。

1.1.2 云计算时代网络运维的挑战

云计算时代的网络运维面临以下4个新挑战。

挑战一,网络环境中的敏捷交付要求越来越高。从Day0业务开通、新业务上线到日常稳态监控、突发事件应急等,这些操作都对网络运维提出了高标准、严要求。同时随着DevOps、敏捷开发、CI/CD等新理念的提出,云网络下的敏捷交付已是大势所趋。

挑战二,网络运维规模越来越大,重复劳动越来越多。在大规模建设云数据中心的同时,网络规模也在不断扩大,网络运维对象越来越多,从而出现了大量的手工重复劳动,也使网络设备的配置、变更呈现指数级增加的趋势。

挑战三,网络内外部的关联性越来越强,沟通协作要求越来越多,沟通成本越来越高。网络系统与大量IT基础设施、系统存在关联性,网络运维团队与其他IT团队、组织需要高水平的沟通和协作。其中包括与应用开发团队的紧密合作,确保网络更有效地支持新业务。网络运维团队还必须与安全团队合作,确保网络安全措施有效落地。此外,网络运维团队还需要在性能优化、故障处理、突发情况应急等领域与众多IT团队进行协作。

挑战四,网络运维管理的精细化程度要求也越来越高。由于网络规模不断扩张、新协议和新技术层出不穷,网络运维管理的精细程度要求也越来越高。例如,网络运维人员要清楚所管理设备的数量、软件版本、各类型端口使用情况、基线配置是否合规等众多网络运维信息。

上述种种挑战的叠加给网络运维带来了极大难度。虽然已有的运维管理平台可以解决部分问题,但大部分平台主要聚焦计算资源(系统)的相关交付,对于网络资源交付的支持能力有限,所以很难覆盖网络运维工作的方方面面。

1.1.3 Python网络运维自动化的兴起

如何有效应对网络运维面临的挑战呢?是否有所谓的“银弹”呢?

为应对这些挑战,在不断的实践中,网络运维工程师给出了较为一致的答案——基于Python技术栈的网络运维自动化。应对网络运维挑战的关键在于依靠网络运维自动化来提升网络运维效率、提高网络管理精细化水平。但为什么是基于Python技术栈的网络运维自动化呢?

在网络运维早期,少数网络工程师将Bash Shell、VBA等脚本语言作为主要编程语言,实现与网络设备的交互、数据的收集与处理。这些编程语言并不是专门为网络运维而设计的,网络工程师需要从零开始实现很多功能,所以整体开发效率不高,且没有形成良好的生态圈。

随着开源潮流的兴起,Python、Perl、Ruby、Go等编程语言开始流行,吸引了很多网络工程师加入开源大潮。其中Python凭借其强大的功能和简单的语法脱颖而出,成为网络工程师的首选编程语言。

一些网络工程师率先结合网络自动化开发的需求,研发了许多基于Python语言的工具包。这些工具包大大提高了网络工程师自动化开发的效率,并形成了良性循环,催生了更多基于Python的优秀的网络运维自动化工具包,例如Paramiko、Netmiko、Jinja2、TextFSM、NAPALM等。业内出现了许多Python网络运维自动化“布道者”,他们从网络工程师视角分享基于Python的网络运维自动化开发技术,掀起了一股网络工程师学习Python网络运维自动化的浪潮,有些网络工程师甚至实现了跨界,主导设计网络运维自动化系统。借助于众多优秀的DevOps领域开源项目,一些开源的网络自动化运维平台也相继诞生并进入大家的视野,例如国外的NetBox、Nautobot、eNMS,国内的NetAxe。这些平台完全基于网络运维视角进行设计开发,实现了网络资源管理及相关自动化等众多功能,涵盖了网络运维的众多应用场景。

与此同时,部分网络设备制造商发布了网络运维自动化相关的认证项目。虽然这些认证项目有着不同的名称,例如思科的Cisco Certified DevNet Associate、华为的HCIP-Datacom-Network Automation Developer,但它们的核心思想高度一致:希望网络工程师能系统地学习以Python为核心的网络运维自动化技术,编写符合自身所处运维环境的脚本并开发相关工具甚至平台,以此提升运维效率。