就目前的IT市场而言,DevOps领域是IT从业者薪酬和职业发展的最佳选择之一。正因为如此,我经常被问到的一个问题是:“我怎样才能成为一名DevOps工程师?”在这篇博客中,我将尝试结合自己在不同组织实践DevOps的经验来回答这个问题。现在,业内大家都习惯使用“DevOps工程师”这个词,但是一旦你理解了DevOps的概念,你就会发现对于DevOps的真正含义存在很多误解。其中一个误解是“自动化就是DevOps”。要成为一名DevOps工程师,仅仅拥有自动化相关的技能是不够的。维基百科提到:DevOps(developmentandoperationandmaintenance的缩写)是一种文化、运动或实践,强调软件开发人员和其他信息技术(IT)专业人士的协作和沟通,同时自动化软件交付和基础设施变更过程。从上面的定义可以看出,DevOps与任何工具或技术无关。这是一种理念,不同的IT团队一起工作,通过持续的反馈来提供更好更快的结果。下面是一个有趣的趋势图,显示了DevOps在过去五年中的流行程度。从工具的角度来看,对系统、自动化工具、CI工具、版本控制系统、网络和项目管理工具[1]的良好理解将为采用DevOps铺平道路。此外,团队设计的管道还应该在没有太多人为干预的情况下提供小的更新或发布。这只有在团队工作方式发生文化转变时才会发生。例如,将重复性任务自动化,将更多时间花在创新和工程上。在成为DevOps工程师之前,您必须了解DevOps并不特定于开发人员或系统工程师。它适合那些对不断发展的实践、技术充满热情并愿意在一切都自动化的协作环境中工作的人。下面,我将与大家分享如何成为一名DevOps工程师。注意:在这篇文章中,我涵盖了许多垂直领域。初学者不可能样样精通。但是,在这些领域拥有大量知识将有助于您成为DevOps工程师。1.了解DevOps文化要成为一名DevOps工程师,首先需要了解DevOps文化:不同的团队为了一个共同的目标一起工作。换句话说,不同IT团队之间不应该存在任何相互指责的文化。在采用DevOps工具集之前,IT领导者和决策者应确保整个团队都接受DevOps实践文化方面的培训,这可以避免团队中出现很多混乱。一旦每个人都明白,当项目交付出现延误或问题时,参与项目的每个人都负有同等责任,这样人们就不再隐瞒真相,也不再将任何问题归咎于他人。一旦你实践了DevOps文化,你就不会再说“CI/CD和自动化就是DevOps”。2、学习*nix系统我们生活的时代离不开Linux/Unix系统。您应该对各种组织广泛使用的Linux发行版(RHEL、Centos、Ubuntu、CoreOS等)有更好的理解和了解。根据LinuxFoundation案例研究[2],90%的公共云工作负载在Linux上运行。这是Redhat的另一项有趣研究,展示了公共云中使用的不同Linux发行版。现在有足够多的理由让您关注Linux。请注意,GUI在*nix世界中不是很流行。您可以使用虚拟机(Virtualbox)[3]或AWS/GCP/Azure来启动Linux服务器。具体可以从以下几点开始学习:了解Linux的启动过程安装配置Web服务器(Apache、Nginx、Tomcat等),了解Web服务器的工作原理。了解Linux进程的工作原理。了解SSH的工作原理。了解不同的文件系统。了解卷在Linux中的工作原理。了解系统日志、监控和故障排除。学习重要协议(SSL、TLS、TCP、UDP、FTP、SFTP、SCP、SSH)学习管理服务并尝试自己创建服务(Initd、Systemd)在Web服务器上托管静态/动态网站。设置负载均衡器和反向代理(Nginx、HA代理等)。做一些破坏,并学习排除故障。3.了解基础架构组件的工作原理任何组织的基本构建块都是其基础架构,它可以是云端或本地的数据中心。对于想要在DevOps环境中实践或工作的人来说,必须对基础设施的组件有一个全面的了解。如果您对以下内容有基本的了解,将会对您有所帮助。4.云端认证当我说“认证”时,请不要使用考试库来通过认证,因为它给您带来的价值要小得多。组织可以向客户证明他们拥有经过认证的云工程师。目前,AWS占据了公共云市场的大部分份额。这是来自美国商业资讯[4]的报道。选择任何公共云(最好是AWS)并了解其所有核心基础设施服务,亲身体验所有核心服务并了解其工作原理。观看AWSReinvention视频[5],了解其他组织如何使用AWS服务来托管他们的应用程序。相信我,您将从这些视频中学到很多东西,而且没有任何在线培训提供如此多关于如何在AWS上运行生产工作负载的信息。此外,如果您打算获得GCP认证,请观看GoogleNext视频[6]。5.学习自动化目前,自动化已经成为每个组织的重要方向之一。根据Redhat报告[7],许多组织正在投资于他们的自动化计划,如下图所示。从供应服务器、应用程序配置、部署,一切都应该自动化。您可以学习以下任何满足您需求的DevOps工具集[8]。6.容器、分布式系统和服务网格容器的使用越来越广泛,即使您的组织现在可能没有使用容器,掌握容器技术(如Docker)的实践知识也是一个好主意。这可以让您比同行更具竞争优势。一旦你掌握了Docker[9],你就可以尝试使用它的集群和编排工具,例如Kubernetes[10]、DockerSwarm等。下面是来自Datadog[11]的一个有趣的Kubernetes使用趋势。以下是Kubernetes五年来不断增长的搜索趋势。此外,许多工程师对学习Kubernetes表现出了兴趣。2021年,许多工程师将获得Kubernetes认证(CKA、CKAD和CKS)[12]。在分布式系统领域,服务网格[13]是一个高级主题。如果你是容器工具集的初学者,那么你可以在对基于微服务的架构有很好的了解之后再学习它。7.日志记录和监控日志记录和监控是基础设施的基本方面。大多数部署在基础架构中的应用程序都会生成日志和指标。基于架构和设计,日志被推送并存储在日志记录基础设施中。每家公司都会有一个日志记录和监控基础设施。常用的日志堆栈是Splunk和ELK。此外,也有少数像Loggly这样的SaaS公司提供日志基础设施。对于监控,有Prometheus[14]、Nagios等开源工具和AppDynamics、Datadog[15]、SignalFx等企业工具。开发人员、运营团队和安全团队使用日志系统来监控、故障排除和审计应用程序和基础架构。此外,对于AIOps,日志数据也起着关键作用。在每个组织中,关键任务应用程序都使用监控仪表板进行24/7全天候监控。通常,仪表板使用来自日志源或应用程序生成的指标的数据。另外,在监控系统中会配置报警规则,构建报警系统进行报警。例如,警报可以触发Slack通知、Jira票证、电子邮件警报、ServiceNow故障单或xMatters电话。警报工作流程因组织而异。作为DevOps工程师,您应该能够在非生产环境和生产环境中查看日志并进行故障排除。此外,了解正则表达式对于在任何日志记录工具中查询日志都非常重要。8.学习安全最佳实践(DevSecOps)DevSecOps是安全实践集成到DevOps每个阶段的另一个领域。维基百科中提到:DevSecOps是DevOps的扩展,允许将安全实践集成到DevOps方法中。传统的集中式安全团队模型必须采用联合模型,允许每个交付团队将正确的安全控制纳入其DevOps实践。2020年安全调查显示,不同地区存在不同类型的网络攻击。在云环境中,加密挖矿是一种常见的攻击。这通常发生在云访问密钥未正确维护时,允许黑客访问它。就DevOps而言,应用程序和基础架构组件的密钥管理应遵循标准安全实践。下图展示了Redhat发布的主要DevSecOps标准实践。图片来源:Redhat.com9.学习编码和脚本为了更好地协作,您需要尽可能多地了解开发人员世界。为此,您需要了解典型的开发过程是如何工作的。这意味着,您需要对编程、API等有很好的了解,因为它们可以帮助您更好地进行故障排除和协作。我的建议是选择一种编程语言并从头开始构建应用程序。在此过程中,您将了解应用程序开发中涉及的流程和组件。一旦你理解了这一点,你就可以有效地与开发人员和其他团队进行交互。而且,在当今世界,我们将一切都视为代码。即使有足够多的工具来自动化一切,您可能仍然需要一些工具不提供的定制。在这种情况下,编码/脚本可以很方便地实现这些功能。例如,Jenkins管道即代码(JenkinsPipelineAsCode)需要了解Groovy,Ansible自定义模块需要了解Python,编写Kubernetes操作需要Golang经验。可以学习以下常用的脚本语言:Bash/ShellPythonGolang其中Golang在DevOps领域非常流行。现在很多DevOps工具都是用Golang来完成的。事实上,像Kubernetes、Terraform这样的工具都是用Go编写的。JFrog在GopherCon期间调查了Golang的使用情况,18%的受访者表示他们将Golang用于DevOps相关的工作。10.学习Git及相关文档,了解GitOpsGit是一个很好的版本控制工具。Git上有很多教程,可以帮助你缩短学习时间。您可以从GitHub或Bitbucket作为远程存储库开始。注意:Git分支策略是任何应用程序发布过程的一个重要方面。一旦了解了Git,就该学习GitOps了。那么,GitOps到底是什么?下面是gitops.tech对GitOps的解释:GitOpsisamethodforimplementingcontinuousdeploymentforcloud-nativeapplications。在使用开发人员已经熟悉的工具(包括Git和持续部署工具)操作基础设施时,它专注于以开发人员为中心的体验。你需要记录你所做的一切,每个存储库都必须有一个README文件,以更好的方式解释你的代码。好的文档不仅能帮助你,还能帮助那些试图使用你的代码的人。11.理解端到端的应用交付生命周期说到应用交付生命周期,需要注意三个重要的概念:持续集成(ContinuousIntegration)持续交付(ContinuousDelivery)(持续部署)你需要学习使用CI/CD工具,例如Jenkins、TravisCI、GoCD等。下面是来自bmc的一个不错的CI/CD流程图。12.DevOps与SRESRE是DevOps社区中另一个日益增长的话题。SRE是Google提出的一系列实践和概念。以下是谷歌对DevOps和SRE的评价:DevOps和SRE不是软件开发和运营的两种竞争方法,而是旨在打破组织障碍以更快地交付更好软件的亲密朋友。如果想深入了解SRE,可以阅读以下官方文档:什么是SRE?SRE和DevOps的关系SRE和DevOps:竞争标准还是亲密朋友?13.不同类型的“DevOps团队”如今,每个组织都将从事基础设施/CI-CD工作的人员称为“DevOps工程师”,并使他们成为“DevOps团队”的一部分。但是,他们的职责因团队而异。对“DevOps工程师”存在一种误解,认为“他们对一切负责”。但实际上,这句话可能只适用于小团队。事实上,如果你被聘为“DevOps工程师”,你可能属于你组织中的以下任何一个团队。中央平台团队(CentralPlatformTeam):负责按需提供基础设施。他们不对应用程序负责,而是对底层平台负责。通过持续的平台支持和监控确保生产系统的24×7可用性。此外,他们将致力于开发新工具和自动化以满足未来的需求。该团队的最终用户将是开发或AppOps团队。所以这更像是一种共同的责任。DevOps团队:虽然“DevOps团队”没有任何意义,但组织用它来命名运营团队。该团队通常与开发人员密切合作,并为多个开发团队提供服务。他们负责端到端的应用程序交付。AppOps团队:该团队是特定工程团队的一部分,该团队与组织内的特定项目密切合作,对特定领域有很好的理解。例如,支付团队。该团队负责部署和管理支付应用程序。平台管理将由中台团队或DevOps团队SRE团队处理:该团队负责自动化、可用性、延迟、性能、效率、变更管理、监控、事件响应和容量规划。他们与开发人员密切合作以解决运营问题。该团队由具有开发背景的基础架构工程师组成。专门的支持团队:支持团队负责解决/处理生产支持问题,并根据严重程度将问题解决方案交给适当的团队。14.阅读,阅读,阅读没有什么比阅读更能获取知识了。要成为一名DevOps工程师,你需要至少阅读一篇与工程相关的DevOps技术博客。此外,您可以关注所有工程博客,如Netflix、Twitter、Google等,了解他们如何使用正确的工具集、他们的部署策略和最新的开源项目。您还可以在LinkedIn、Reddit、Medium、Quora等上关注志趣相投的人。资源:最佳DevOps博客和资源列表[16]15.博客您可以在博客上介绍教程、学习和经验。这是一种帮助他人并为自己创建个人品牌的方式。设置WordPress博客或Medium博客只需不到30分钟。每当你学到新东西时,你都可以把它写下来。这是您和其他人的参考。结束语DevOps涉及的工具和流程并不局限于本文提到的那些。但是,这些是您作为DevOps工程师可以开始使用的常见开源工具和技术。
