DevOps趋势下,传统运维怎样做才能不被\"杀死\"?
前言
之前提到,DevOps时代,运维还是一个必不可少的角色,但是并不是缺少传统运维,而是缺少新型DevOps运维。看了一下反响,基本上是两种看法,一半认同,一半反对。反对的观点认为运维必定被淘汰,我认为这种观点少了一个前提,那就是故步自封,待在舒适区不肯走出,就像历史上的闭关锁国,淘汰是必然的。但是,我认为,新型运维人才,未来的缺口还是很大的,概念一直在变,从传统运维到自动化运维再到智能化运维,但是需求没变,就是缺少新型运维人才。本文我们来简单的聊一下,传统运维转型为"新型"运维人才,需要学习哪些内容。
编程语言
编程语言可以让运维人员在日常工作中事半功倍,同时在编程过程中可以进一步加强逻辑化思维,保持头脑的灵活性,并且可以在过程中能够站在开发的角度思考问题,快速定位问题,提出合理解决方案,提高效率。
作为运维人员,必须要懂开发,并且至少了解一两种编程语言,虽然并不一定要求有多少项目经验,但最起码排错技能要具备。传统运维阶段,我们可以只要求会shell,平时写个脚本,备份下数据,完全足够了。但是现在这个时代,只会脚本、只会部署是完全不够的,shell是绝对写不出一套运维系统的。
2019年编程语言排行榜
上图为IEEE 2019编程语言排行榜,IEEE Spectrum编程语言排行榜一年发布一次,这个排行榜已经连续发布了六年。每个开发者都需要相对流行的网站统计数据,与其他的语言排行榜不同,IEEE Spectrum可以让开发者自己选择参数组合时的权重,得到多样的排序结果,所以,这个排行榜还是有一些参考意义的,Python已经连续三年位居榜首。
结合运维行业目前的趋势来看,通用的语言包括shell,Python以及目前比较火的GO等,但是语言并不是固定的,具体到运维的某一个具体领域,需求也会不太一样,对于平台运维或者开发运维,Python基本是是必须的,目前也已经有越来越多的公司要求会GO,这也是一个学习方向;对于专注Nginx的运维,Lua的深入研究是必不可少的,对于偏DBA类型的运维,SQL语言要求也是很高的。
总之,选择什么语言并不重要,首先还是需要讲究实用,能快速优雅的解决问题,语言是相通的,精通一门语言,学习其他语言也是非常快的,个人建议运维同胞在会shell的同时,学习至少一门其他语言,个人比较建议Python或者GO!
工具
DevOps工具盒
工具是实现DevOps必要条件,但是没有一种工具是可以在DevOps中每个阶段都扮演重要角色的,工具如何选择,取决于团队需求,一个几人的小团队,选用一个及其臃肿复杂的工具链,虽然不是不可以,但是绝对不是最优的,而且还可能因为工具的问题导致前期效率低下,从而影响整个DevOps的推动。适合自己的,才是最好的!
本文认为,针对目前的运维行业来看,以下几种工具是必会的:
GIT
Git 是很流行的DevOps工具之一,在软件界使用广泛。Git让用户可以跟踪自己开发工作的进度。用户可以保存自己源码的不同版本,并且在需要的时候切回之前的版本。目前,两大优秀在线的Git repo托管服务是 GitHub和Bitbucket,也有许多公司有自己的私有仓库,比如说GitLab。
Jenkins
Jenkins是很多软件开发团队在走向DevOps时会用的自动化工具。它是开源的CI/CD服务,帮助用户自动化交付流水线的不同阶段。Jenkins之所以流行的主要原因是其巨大的插件生态系统。目前,它提供1000多个插件因此它可以和几乎所有DevOps工具(从Docker到Puppet)集成。Jenkins+Pipeline+Docker+K8S,目前基本是很流行的架构了。
Docker
Docker在2013年发布之后已经逐渐成为了容器平台的老大哥,并且一直在更新。它是最重要的DevOps工具之一。它可以将应用程序隔离成单独容器,并且在多环境中保持一致,使得迁移扩展变得非常容易,使用者无需担心依赖管理,可以将所有依赖打包进应用程序的容器,并将所有的东西当做独立的单元交付。然后,用户可以很轻松地在任意机器或者平台上运行这个应用程序。
Kubernetes
Kubernetes2015年才推出第一个版本,是由一些Google的工程师创建,虽然才短短几年,已经成为了目前主流的容器编排工具。使用Kubernetes,无需将容器化的应用程序绑定到某个单独的机器里。相反,可以将应用程序部署到一个机器集群里,Kubernetes会自动化分发并在整个集群里调度容器。
Ansible
Ansible是一个配置管理工具,和Puppet,Chef类似。使用者可以用它配置自己的基础架构并且自动化部署。相对于其他配置管理工具,Ansible不需要安装agent,简洁易用,使用YAML语法,可以在YAML里定义各种任务,并且提供各种模块来使用。
Prometheus
Prometheus支持多维度的指标数据模型,服务端通过HTTP协议定时拉取数据后,通过灵活的查询语言,实现监控的目的,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如Docker。目前是一种主流的监控Docker和Kubernetes的监控工具。
运维软实力
DevOps无处不在
运维是一个类似守门员的职业,做的好,没人记得你,做的不好,立马就出来"背锅"。并且经常会有一些突发事件,加班,重复劳动,工作零碎,这都是常态,很难有开发或者产品的那种成就感。但是,运维其实也是一个非常有挑战性的职业,一夫当关万夫莫开,千军万马中取人首级。未来趋势运维可以让开发人员通过工具、自动化和流程实现自助服务,并且尽可能少的干预应用的部署及运行,把时间用在更有意义的事情上。
针对不同的运维岗位,总体可以分为两个方向:一个是通用广度方向,就是通才,另一个是专业深度方向,就是专才,如何选择,完全看自己兴趣。
除去技术能力,本文认为,运维至少需要提升以下几种软实力:
1、沟通协调能力:沟通协调是一门艺术,会沟通,可能会达到事半功倍效果
2、抗压能力:沉着冷静分析处理问题,当一堆人站在你后面指望你能成为英雄的时候,手不能抖
3、主动执行能力:自己不要成为某个环节的终结者,要有主动意识
4、分享能力:自己学会了,并不一定真的会了,能把技术方案讲清楚,或许能看到不一样的自己,收益可能会超乎自己想象
5、学习能力:应对一些新领域新技术的时候能够通过快速的学习能够让任务进行下去
6、信息检索能力:善用搜索引擎,会用搜索引擎
7、英文能力:大部分开源技术都是歪果仁开源出来的,官方文档必然也是英文居多,英文好,学习起来可以不用那么吃力
8、好心态:不要害怕背锅,有时候,背锅也是一种成长,经过总结和分析,终会给自己和领导、同事一个科学的说法,并且,会很大程度帮助自己进步,什么时候系统出问题,别人第一时间想到的是代码出问题了,而不是环境出问题,那么,距离巅峰就又进了一步