九净

V1

2022/05/26阅读:36主题:兰青

《从零开始NetDevOps》初识NetDevOps

第一章 初识NetDevOps

1.1 什么是NetDevOps?

随着IT科技的不断发展,尤其是虚拟化技术和云计算的迅速崛起,网络也从技术、架构到运维都发生了显著的变化,其中非常直观的感受就是运维体量的增大、运维管理的细化、运维响应的敏捷化。这三者的叠加,导致了网络运维遇到了前所未有的困难,网络工程师面对如山的、海量的运维对象和众多的运维需求的同时,技术也不断迭代,在这种困窘之境下还要做到迅速响应。如何破局自救,成为了很多网络运维群体面临的重大课题之一。

从组织到个人,每个人都在交着自己的答卷。

在这样一个大背景之下,2014年,在网工圈刮起了一股Netdevosp的风潮,从个人到组织,大家在同一个时间段,自下而上地分享如何用python开发、开源的自动化工具提升提高网络运维效能。愈演愈烈的NetDevOps之风从国外吹到了国内,从民间吹到了几大厂商。有野心的网络设备商也纷纷推出了自己的NetDevOps认证体系,虽然他们有着不同的名称,比如思科的Cisco Certified DevNet Associate认证、华为的HCIP-Datacom-Network Automation Developer ,抛开其中的商业部分,他们有着高度相似的内核:希望网络工程师系统地学习以Python为核心的开发技术和有益于网络运维的开源组件,能够自己编写自动化脚本,提升自己的运维效能。

网络工程师的疑问

面对这些认证的学习提纲,不知大家又有没有考虑到这三个问题:

  1. 网络工程师还需要学习开发吗?

  2. 为什么选择Python作为开发语言?

  3. 为什么还要学习一些开源的技术组件

面对这三个问题,笔者作为一名有着8年NetDevOps实战经验的原生NetDevOps工程师的视角来与大家分享下自己的拙见。

网络工程师还需要学习开发吗?

针对一个网络运维群体而言,这个组织中必须要有会开发的网络工程师,能够编写脚本处理团队内部的需求。即使每个网络运维的组织可能都有一些网络自动化的工具或者平台,可是层出不求的需求、日益敏捷的诉求、日渐提升的网络规模、日新月异的技术,这些工具都会有一些“死角”无法触碰,甚至是很多日常“频繁骚扰”我们的高频、重复的需求都处理不了,说起来好笑,有时候做不到的原因可能仅仅是这个需求太简单,以至于不像是一个需求。

想想这些场景:

  1. 把几百台设备的配置进行备份

  2. 梳理几百台接入交换机的端口

  3. 修改几十台设备的成百上千个端口描述

  4. 比对几百台设备的软件版本是否符合基线

诸如此类。很多时候,这些功能由于各种原因在很多平台中都不支持,或者需要加钱,还得等很长的一个周期,或者是格式不符合要求等等,假如恰巧领导突然让你这个周完成,通宵达旦也许也是家常便饭。

此时,如果我们能够快速的编写一个脚本,它节省的时间可能是几天,部分场景长久来看甚至是以周记、以月记,同时它也有潜在的利益——规范与可靠(当然这个前提是我们的脚本写的足够健壮可靠)。重复做相同的事情,人总是会出错的,但是如果逻辑梳理清楚,代码写好了,脚本从来不会让你失望! 对于这个网络运维的个体和组织而言,这无疑是非常有益的。

为什么选择Python作为开发语言

当大家意识到自己通过脚本开发可以提高自己运维效率的时候,紧接着又是一个难题摆在大家面前,“我该学习什么语言来做开发呢”,或者是“学习使用什么开源工具(比如ansible、chef、puppet等)”。

这个问题在2014年及以后,已经十分明朗,在网络自动化领域,针对个人而言,Python无疑是最棒的开发语言。

它有着平滑的学习曲线,易上手,无论你有没有编程基础,都可以从零开始学起,短时间掌握其基本语法,照猫画虎都可以写出脚本。这点是明显优于Java、Ruby、C,乃至当下也比较火的运维领域的另一颗明星——golang。而且当今信息爆炸的年代,众多免费开放的教程视频等,也让我们比以往时代更容易学会Python。当下火热的Python学习风潮,侧面也反映了这东西容易上手,很多其他行业也在推进Python开发与领域知识的结合,希望Python能产生更大的业务价值。

另外Python的上限也比较高,借助python我们开发出一个中小型乃至大型的网络自动化运维平台不成问题,当然这取决于多方面因素,但是Python是具备这个能力的。大家在github上搜索一些运维自动化平台的相关关键词,会发现很多基于Python的明星产品。

生态环境很好,有着一众优秀的网络运维第三方工具包(这点是其他语言所欠缺的),与网络设备交互有netmiko、paramiko、pysnmp、ncclient,解析配置的有textfsm、ntc-templates、ttp,处理表格有pandas,处理IP地址、mac地址有netaddr,模板管理的有jinja2,web开发的有django、flask、fastapi等,批量自动化框架有nornir,分布式异步框架有celery,诸如此类,等等等等。这些优秀的第三方工具包可以覆盖网络运维自动化从小到大的很多需求。

反观华为和思科认证体系,Python也是必考的内容之一。退一万步讲,作为初学入门,“随大流”地选择Python作为开发语言,一定是最优解!

为什么要学一些开源的技术组件

随着我们学习的深入,单一的脚本会逐渐无法胜任日益复杂的需求,或者是更高效的开发和更有效的组织代码也会逐渐被提上日程。这个时候我们就需要掌握一定的开源技术组件。可以非常方便的提升我们开发的效率和规范性。

比如创建代码的管理我们需要学习Git,网络设备配置的批量修改我们可能需要借助于Ansible,环境的快速搭建我们可能借助于docker,网络配置的保存我们可能借助于Elastic Search或者MongoDB或者Git,网络拓扑我们可能需要借助于图形数据库Neo4j。这些开源技术组件的掌握,可以极大提高我们开发的效率和规范性,让我们从net向dev更进一步,将领域知识(也就是场景问题解决,运维,ops)转化为高效规范的程序代码。在这个过程中也会有一部分人更加高屋建瓴,在打穿各个领域之后,向着网络自动化领域专家更进一步,为组织乃至为整个业界开发出更加优秀的网络自动化工具乃至平台。

我的NetDevOps定义

回答了这三个问题,我们再回过头来看看,“什么是NetDevOps?”

NetDevOps虽然名字上和DevOps很像,国外的很多组织机构、NetDevOps布道者也在用DevOps的体系去解构NetDevOps,甚至还想打造出网络的CI/CD Pipeline(持续集成发布部署流水线),但是结合自己多年的实践经验与认知,NetDevOps与谷歌的SRE(Site Reliability Engineer)更相似,也有人称之为NRE(Network Reliability Engineer)。

我更倾向于这种基调对NetDevOps去分享自己的定义:NetDevOps是以网络运维人员为主体,针对自身运维场景,通过开发技术并借助一定开源技术、开源工具甚至商业工具提高网络自动化运维水平,进而提高日常管理、运维效率的工作方法及过程。

在这段定义中,我们拆解开NetDevOps这个单词,它是有三部分组成的,Net、Dev、Ops。

Net代表的是以网络人员为主体聚焦网络运维领域。

Ops代表的是网络运维,其实再进一步,它是网络运维的具体场景、需求。

Dev是指研发,通过编程,借助一些外力开源工具、商业工具提供的便利功能,有机的组合,实现网络运维人员在自身工作对于自动化的需求满足。

人员、领域、技术不断融合的思路、工作方法与践行过程,我称之为NetDevOps。

分类:

后端

标签:

云计算

作者介绍

九净
V1