时下,有越来越多的公司开始招聘DevOps人员了。在笔者撰写本文时候从LinkedIn上搜索DevOps职位,结果有49,000多。大量的工作虚位以待。
根据devopsdotcom做的"2017年DevOps使用情况和趋势"的报告,DevOps的使用在过去几年一直持续增长,尤其是2016年以来。唯一的问题是小团队发现开始启用devops颇有难度。
本文中虫虫带领大家一起对DevOps的工作探个究竟。
Code编程技能
你不需要要有开发的背景,尽管会开发会增加成功的砝码,毕竟这个社会是"No BB,show me the code"的时代,不会代码连评论的权利都没有。对一个没有开发背景的人来说,你必须先得适应阅读代码,要让看代码变成一种享受,理解每一个精灵似的代码符号并且有足够的自信去改变它,而且最重要的是要学会造轮子。
虽然很多时候不需要你造一个轮子来完成任务,但是你必须得会写脚本实现自动化部署和运行其他特定的任务。
所以,你没有必要去了解设计模式,OO,函数式编程或很多种编程语言。但是你要学会开发的逻辑,你要以开发人员的思维方式,解决问题。重复的使用代码而不是重复吭哧吭哧地猛干,如果能养成长期用代码偷懒的工作范,那,ok,你有做Devops的潜质(兄弟你是个人才哪)。
Coding技能很重要,你可以通过学习一种编程语言来挖潜你的coding潜力。笔者建议(但不限于)你学习Go,Python,Ruby,Perl,Bash,php或微软的PowerShell。推荐他们的原因很多。但基本上这些都是常用的语言。例如,如果你想使用Puppet、Chef、gitlab你的会点Ruby呀。你要实现自动执行,要用好Ansiable和Saltstack你得会Python;要用webmine和Rex你要懂perl;用docker容器你还不得懂点golang。同样的道理,拥有开发背景会使你更容易适应DevOps的团队。
特定于域的语言(DSL)也非常重要,具体取决于你要用的工具。有些使用JSON。其他人则可能使用YAML。这些都是表现格式,用来支配工具如何交互的。比如,你要使用AWS的 CloudFormation或Terraform等工具定义你的基础架构时,就要用YAML格式来定义。就像是在编程,大多数是以数据结构或程式的方式。
VCS版本控制
开发人员可能会比较熟悉版本控制(实际上很多人也用的很垃圾)。如果你是运维背景,对版本控制可能知之甚少。至少,在没有看《基础设施即代码》之前,应该了解的不多
时下最先进最流行的版本控制系统是Git,如果你要做Devops最好知道它是什么东东以及熟练的使用这个东东:创建分支,push,pull(或merge)请求,当然最重要的是要学会解决冲突。你必须坚秉"如果它不在版本控制中,我就不相信它"的思想。
练习版本控制的一个好方法是使用GitHub。搜索一下有很多教程和课程也可以回复文章,笔者给你推荐你哥git群。人家作家都用github写书了,你还好意思说我不知道github么?
IaaS基础架构
你需要了解基础架构。当然这里笔者并不是要你去,了解如何配置Cisco路由器(尽管这很有价值)。了解网络,安全,存储和管理服务器非常重要。你还要熟悉一些关键词,一些重要概念,比如高可用性,冗余,自我修复和弹性体系结构。不光是背概念,你要能知道在实际中运用。
如果在初创企业工作,你肯定要用共有云。所以,必须要了解云脚骨。目前最流行的是AWS,Azure,Gooogle和国内的阿里云、腾讯云,美团云等等。选择一个用用,获得必须的经验。如果你闲的蛋疼的话,也可以去考个如云认证。云认证有助于获得工作和增长工资的机会。笔者这里强烈推荐一下AWS,有支持国外支付的信用卡,可以以1刀的价格搞一台EC2玩玩,对你熟悉真正的云大有裨益。
你可能正在使用本地,公有云,两者兼有的服务器。有些公司可能有计划将所有内容迁移到云,迁移到容器。因此,了解云很重要,每天都有企业加入到云怀抱。有一点是肯定的:即使现在你工作中用不到用,并不意外这你就不能用DevOps原则,尤其是当你有了私下的这方面实践经验的话(移到的云VPS)。
要在DevOps中工作,你还要了解持续集成(CI),持续交付(CD),作为代码的基础架构,配置管理(CM),日志管理和不可变架构。当我们讨论不可变的基础设施时,我们不可避免的要说到容器。容器在时下的基础架构、基础设施中扮演着重要的角色,尤其是Docker。即使你离开使用容器的公司,你也可能会发现自己还是想要使用容器(就是想么)。如果没有启用容器的计划,容器原理,比如如何打包,单一责任原理和不可变基础设施也可以用用。
Tool合宜的工具
业内人士会宣称工具无关论,或者告诉你不必专注于工具。但实际上,熟悉一些工具是必要的。选择一套好的工具,然后开始做一些事,做任何事情,然后你就知道那些是要用的,那些不是。尽管DevOps不仅仅是工具,但是工具很重要,重要,真的很重要,重要的话不说一两遍。
很多职位的JD中会要求你了解Jenkins,Chef,Puppet,itop,rex,Ansible,openstack,ELK,AWS CloudFormation,Docker和Terraform等工具。这些是通常都会用得到的。你需要知道每个工具解决什么问题。有些人可以独当一面,有些必须要合众抗衡。其当你开始使用这些工具时,你会发现会写代码有多重要。
Soft skill软技能
DevOps毕竟是关于人的。作为DevOps工程师,你需要花费大量时间与开发人员以及其他团队合作。
你需要了解应用DevOps的一些重要原则。比如知道如何推销新点子,新思想,并为之提供靠谱的理论证据。刚开始的时候,指导团队很重要,特别是公司刚开始使用DevOps。人们总是会安于现状,排斥改变。但是如果你给出了合理的和有建设性的方案,他们也没有理由反对。因此,需要有良好的沟通技巧,坚定信心并且设身处地的考虑问题。
开发人员还需要了解事情的工作原理以及为什么某些事情要比其他的重要。比如构建一次,特征标记和持续集成等这些事情。他们帮助你使得部署更加可靠、更可预测性。最终目标应该是以高质量和确定性的方式快速、频繁地迭代(XP)。
Challenge 接受挑战
在本文中,笔者没有深入探讨挖掘话题。上面做为一个DevOps工程师必须要知道的DevOps一些事项。你现在知道(goten)他们了?好。继续去学习这些技能把。
如果你没有这个清单上的技能,那就花些时间去学习和练习。你可能会被所有你还不知道的东西搞蒙逼了,不过放送,不要紧张。挑一个开始入手。工具需要撸来撸去才能精通,但是越学越用越活。
接受挑战你作为DevOps工程师的的唯一使命,随着时间推移,挑战会越来越多,越来越难,你也会跟着成长,跟着强大。