在本文中,我将解释我实际上在做什么,以及过去三年里,作为这个领域的顾问所做的事情,而不是试图定义一个工作角色。
DevOps是一个术语,它承受了过多的含义,意味着许多不同的事情,不同的人或组织,所以我不敢轻易定义或者描述DevOps工程师是干嘛的,即使它已经被定义为一个工作角色/职位,或者是一项文化运动。
动机
写这篇文章的动机在于,在单一语境下,有时对于解释DevOps是什么,我感觉非常困难。我不是你的Java专家,前端开发,系统管理员或者其他你能碰到的常见角色。你会发现,这是一个在知识领域内严格定义的单一专业领域。
作为DevOps顾问,我主要做什么
DevOps角色之前的背景
在我为公司开始工作之前,我在IT领域有一些短期的经历,大概7个月左右。有一段经历是在一个暑期实习了4个月左右,这让我拥有完整的全栈开发经验,当时使用APS.NET 框架,Razor后端模板,以及一些kickout.js mix,使用svn作为我们的SCM。在这之后以及BsC实习期间,我接触到了虚拟化,我兼职做了3个月的初级研究员,在一个叫做Jail house的西门子项目中,发现虚拟化在RTOS中的影响,允许授予虚拟化单元访问无法在其他单元之间共享的硬件,这是我第一次接触虚拟机监控程序,它们的类型以及工作方式。我相信虚拟化概念是一个在DevOps / 基础设施角色中工作时要了解的关键概念。
我在DevOps角色上的职业经历
Fiercely - 一家咨询公司,通过改进开发流程和工作流程,基础设施自动化以及整体思维方式的变化,帮助IT公司改善组织流程。
自从来到Fiercely,我开始在工业物联网环境中工作,在这里我可以自由选择语言和框架,只要它们在架构级别和业务需求上有意义。
在那个项目中,我最终使用了python flask框架,第一次接触docker,同时必须管理网络,工业协议,arm交叉编译,RAM资源优化,以及如何通过加固软件项目以抵御物理环境挑战,例如断电(你好,被损坏的文件,这点我正在写给你),网络中断等等......同时,我使用Open ERP(被命名为ODOO)开发一个内部项目,同时用python脚本自动配置它(ODOO也是用python编写的)。
从那时起,我转向了咨询,在那里我接触到了配置管理,同时使用Vagrant与LXC (后来迁移到Docker) 以及Ansible provisioning,确保开发环境在开发人员的机器上保持相同状态。这里有个思维方式在起作用 ->在DevOps的世界里有句名言,要避免说“It works on my machine”。
配置管理
为了使上述那些一起工作,对于进行过配置管理的人来说,你需要有完整的基础设施和开发环境的背景,操作系统知识、特性、他们自己的脚本(从bash到powershell等等)。最重要的是软件架构的全面知识,软件应该如何运行,已知模式,这是对每一个DevOps角色的最大要求。(请忘记需要你具备一个一次性使用工具5年工作经验的那些角色吧,实际上这个最新的工具还可能是1年前才发布的,并且是被测试了1年),之后就只是怎么使用的问题了。
由于DevOps角色要求跨组织架构,了解如何编程,网络应如何工作,虚拟化如何实现,......等等,你必须写大量的胶水代码将你的工作流串起来。
CI/CD
使用CI / CD(持续集成/持续交付)工具,并在源代码管理下获取IAC( infrastructure as code)和应用程序代码。为了达到这个目的,我已经广泛地使用大量git工作流,同时自动化和配置Jenkins,因为 jenkins 的流水线文件要用 groovy,而一般用户又不想写 groovy,于是就用groovy 和shell 脚本做出一些工具让用户直接用 yaml 来写jenkinsfile,这是花费我大量时间的地方。DevOps是持续存在的,CI / CD工具和Pipelines是永不过时的。
安全和访问控制
最后还要使用身份验证,授权,LDAP,Keycloak(及其所有集成,SAML,Oauth等等)。即使有这么多工具,keycloark永远是最有存在感的一个。如果你需要一个比较全的关于授权,身份验证,访问管理(3A, Authorization, Authentication and Access Management)的解决方案,你必须试试 keycloak。
基础设施即代码
基础设施的代码化,除了选择 Docker 和 Vagrant,在某些情况下也可以用 Ansible 实现(IAC所涉及的部分),我最近尝试过Terraform,也简单的研究了Cloud Formation,还有在 ESXi 中的一些场景(我还没做这部分的自动化)你最终都会自动化基础设施的管理,Devops这个角色开始变得模糊,许多公司都在招聘 Terraform 专家,或者Azure DevOps Ninja 或 AWS Boss,但大部分时候,工具只是完成任务的落脚点,一个好的优秀的 DevOps 人员需要很多很多工具,但不单单是在用这些工具就结束了,否则,你需要的只是Terraform专家或者Azure 运维,最后变成另一个云服务提供者,而事实上这并不是DevOps。
负载均衡器和反向代理
好吧,如果你还没有在容器中安装或配置过Nginx、HaProxy或Traefik,那么你就做错了。虽然我还没有遇到大量的ELB配置或者他们的Azure配置,但我已经配置了Load Balancers,大多数时间都是作为反向代理使用的。
这还伴随着你将无法回避/逃离的证书管理。
应用开发
最后但同样重要的是,我现在也使用Java和Javascript开发了完整的全栈开发。我相信一个DevOps角色必须将自己置身于完整的解决方案中,这实际上使我成为一个更好的工程师和程序员,因为不用说,你构建它...你运行它,所以最终既要编写应用程序,又要支持基础设施代码,前面的LB(负载均衡),部署和QA Pipeline。
数据库
好吧......差点忘了这些.. ElasticSearch,PostgreSql,MySql等。好吧我不是DBA,但最终还是要配置这些,从他们的连接,ACL,到备份和管理,但我并非一名SQL专家,无论如何都要避免陷入一个狭窄的领域,成为数据库或plane AWS expertise。
人的思维方式
到目前为止,我已经接触过很多语言和不同的环境,大多时候,除了编码之外,我最终还是要和人沟通,我的部分工作实际上是帮助其他工程师拥有DevOps思维方式,简化事物,让他们更轻松地在整个组织内运行自己的应用程序,减少开发人员和运营团队之间的代沟。
结语
你最终使用了多种技术。因此,DevOps有时被用作一个总称:“万金油”或者“架构大师”,我不认为自己是任何领域的大师,这仍然有很长的路要走。
希望你喜欢本文,希望它能让您了解一些DevOps的实际功能。如果你已经在做类似的事情,你会发现我们的工作之间有相似之处。
感谢您阅读本文。如下是由roadmap.sh提供的优秀的DevOps路线图:
原文链接:
What do you do as a DevOps?
https://ilhicas.com/2019/08/11/What-you-as-a-Devops.html