如何才能成为一名优秀的 DevOps 工程师?

系统 Linux
"如何才能成为一名DevOps工程师?"在本博客中,我将尝试用自己在不同组织中实践DevOps的经验来回答这一问题。

就目前的IT市场而言,DevOps领域是IT从业者薪资和职业发展的最佳选择之一。也因此,我经常会被问到的一个问题就是:"如何才能成为一名DevOps工程师?"在本博客中,我将尝试用自己在不同组织中实践DevOps的经验来回答这一问题。

现在,业界的每个人都习惯用"DevOps工程师"这个术语,但只要你理解了DevOps的理念,就会发现关于DevOps的真正含义有很多误解。其中一个误解是"自动化就是DevOps"。要想成为DevOps工程师,仅仅掌握自动化相关的技能是不够的。

维基百科上提到:

DevOps(开发和运维的缩写)是一种文化、运动或实践,它强调软件开发人员和其他信息技术(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系统。你应该更好地理解和使用各种组织(RHEL、Centos、Ubuntu、CoreOS等)都高度使用的Linux发行版本知识。

根据Linux基金会的案例研究[2],90%的公共云工作负载运行在Linux上。

下面是来自Redhat的另一个有趣的研究,它展示了在公共云中使用的不同Linux发行版本。

现在已经有足够的理由来说明你为什么应该专注于Linux了。

需要注意的是,GUI在*nix世界中并不太受欢迎。你可以使用虚拟机(Virtualbox)[3]或AWS/GCP/Azure来启动Linux服务器。

具体来说你可以从以下几点内容开始学起:

  • 了解Linux的启动过程
  • 安装和配置Web服务器(Apache、Nginx、Tomcat等),并学习Web服务器的工作原理。
  • 学习Linux进程的工作原理。
  • 学习SSH的工作原理。
  • 学习不同的文件系统。
  • 学习卷(Volume)在Linux中的工作方式。
  • 学习有关系统日志、监控和故障排除的信息。
  • 学习重要的协议(SSL、TLS、TCP、UDP、FTP、SFTP、SCP、SSH)
  • 学习管理服务,并尝试自己创建服务(Initd、Systemd)
  • 在Web服务器上托管静态/动态网站。
  • 设置负载均衡器和反向代理(Nginx、HA代理等)
  • 搞一些破坏,并学习故障排除。

3.了解基础设施组件的工作原理

任何组织的基础构件都是其基础设施,它可以是云上也可以是内部的数据中心。

对于想要在DevOps环境中进行实践或工作的人来说,必须要全面了解基础设施的组件。如果你对以下的内容有一个基本的了解,对你来说将会有所帮助。

4.获得云上认证

当我说"获得认证"时,请不要使用考试题库来通过认证,因为它给你带来的价值要少得多。对于组织来说,向客户展示他们拥有经过认证的云工程师可能会很有用。

目前,AWS占有大部分的公共云市场份额。这是来自Businesswire的报告[4]。

选择任何一种公共云(最好是AWS),并了解其所有的核心基础设施服务,亲身体验所有的核心服务并了解它的工作原理。

观看AWS重新发明的视频[5],了解其他组织是如何使用AWS服务托管其应用程序的。相信我,你会从这些视频中学到很多东西,并且也没有哪个线上培训能提供这么多关于如何在AWS上运行生产工作负载的信息了。此外,如果你打算获得GCP认证,请观看谷歌Next视频[6]。

5.学习自动化

当前,自动化已经成为每个组织的重要方向之一。根据Redhat的一份报告[7],许多组织都在投资他们的自动化计划,以下这些数据可以证实这一点。

从配置服务器、应用程序配置、部署,一切都应该是自动化的。你可以学习以下任何满足你需要的DevOps工具集[8]。

6.容器、分布式系统及服务网格

容器的使用越来越广泛,即便你所在的组织可能现在还没有使用容器,你最好也要掌握像Docker这样的容器技术的实际操作知识。这能使你在同行中获得一些竞争优势。一旦你掌握了Docker[9],你就可以尝试使用它的集群和编排工具,如Kubernetes[10]、DockerSwarm等。

下面是来自Datadog[11]的一个有趣的Kubernetes使用趋势。

以下是Kubernetes五年来不断增长的搜索趋势。

另外,许多工程师对学习Kubernetes也表现出了兴趣。2021年将会有许多工程师获得Kubernetes(CKA、CKAD和CKS)认证[12]。

在分布式系统领域内,服务网格(ServiceMesh)[13]是一个高级主题。如果你是容器工具集的初学者,那么你可以在充分了解基于微服务的架构之后再学习它。

7.日志与监控

日志和监控是基础设施的基本方面。部署在基础设施中的大多数应用程序都将生成日志和度量指标。基于架构和设计,日志被推送并存储在日志基础设施中。

每家公司都会有一个日志和监控基础设施。常用的日志栈是Splunk和ELK。此外,也有少量的像Loggly这样提供日志基础设施的SaaS公司。对于监控,有诸如Prometheus[14]、Nagios之类的开源工具和诸如AppDynamics、Datadog[15]、SignalFx之类的企业工具。

开发人员、运维团队和安全团队使用日志系统来对应用程序和基础设施进行监控、故障排除和审计。此外,对于AIOps,日志数据也起着关键作用。

在每个组织中,使用监控仪表板对任务关键型应用程序进行24/7全天候监控。通常,仪表板使用来自日志源的数据或应用程序生成的度量指标。此外,还会在监控系统中配置报警规则以搭建报警系统来进行报警。

例如,报警可以触发Slack通知、Jira通知单、电子邮件报警、ServiceNow故障通知单或xMatters电话。报警工作流因组织而异。

作为一名DevOps工程师,你应该能够在非生产(non-prod)和生产(prod)环境中查看日志并进行故障排除。此外,了解正则表达式对于在任何日志工具中查询日志都非常重要。

8.了解安全的最佳实践(DevSecOps)

DevSecOps是在DevOps的每个阶段集成安全实践的另一个领域。

维基百科中提到:

DevSecOps是DevOps的一个扩展,允许将安全实践集成到DevOps方法中。传统的集中式安全团队模型必须采用一个联合模型,允许每个交付团队能够将正确的安全控制因素考虑到他们的DevOps实践中。

2020安全调查显示,不同地区存在不同的网络攻击。

​​

在云环境中,加密挖掘是一种常见的攻击。这种情况通常发生在云访问密钥维护不当,从而使黑客能够访问它。当谈到DevOps时,应用程序和基础设施组件的密钥管理应该遵循标准的安全实践。

下图展示了Redhat发布的主要DevSecOps标准实践。

图片来源:Redhat.com

9.学习编码和脚本

为了更好地协作,你需要尽可能地了解开发人员的世界。要想做到这一点,你需要先了解一个典型的开发流程是如何工作的。这意味着,你要对编程、API等有一个很好的理解,因为它们能帮助你更好地进行故障排除和协作。

我的建议是选择一种编程语言,从头开始构建一个应用程序。在此过程中,你将了解应用程序开发所涉及的流程和组件。一旦你了解了这一点,你就可以有效地与开发人员和其他团队进行互动了。

而且,在当今世界,我们把一切都当作代码。即使有足够的工具来自动化一切,你可能仍需要一些工具所不能提供的自定义功能。在这种情况下,编码/脚本可以方便地实现这些功能。例如,Jenkins管道即代码(JenkinsPipelineAsCode)需要理解Groovy,Ansible自定义模块需要理解Python,编写Kubernetes操作需要有Golang经验。

你可以学习以下常用的脚本语言:

  • Bash/Shell
  • Python
  • Golang

其中,Golang在DevOps领域非常流行。现在很多DevOps工具都是使用Golang完成的。事实上,像Kubernetes、Terraform这样的工具都是用Go编写的。

JFrog在GopherCon期间调查了Golang的使用情况,有18%的受访者表示他们在DevOps相关的工作中使用了Golang。

10.学习Git及相关文档,了解GitOps

Git是很好的版本控制工具,Git上有很多可用的教程,能帮助你缩短学习时间。你可以从GitHub或Bitbucket作为你的远程代码库开始。

注意:Git分支策略是任何应用程序发布过程的一个重要方面。

一旦你理解了Git,就可以学习GitOps了。

那么,GitOps到底是什么呢?这是gitops.tech给出的关于GitOps的解释:

GitOps是一种为云原生应用程序实现持续部署的方法。它通过使用开发人员已经熟悉的工具(包括Git和持续部署工具),在操作基础设施时,重点关注以开发人员为中心的体验。

你需要记录你所做的每件事,每个存储库都必须有一个README文件,该文件能够以更好的方式解释你的代码。好的文档不仅对你有帮助,而且对尝试使用你的代码的人也有帮助。

11.了解端到端应用程序交付生命周期

当谈到应用程序交付生命周期时,有三个重要的概念需要注意:

  • 持续集成(ContinuousIntegration)
  • 持续交付(ContinuousDelivery)
  • 持续部署(ContinuousDeployment)

你需要学习使用CI/CD工具,如Jenkins、TravisCI、GoCD等。

下面是来自bmc的一个很好的CI/CD流程示意图。

12.DevOps与SRE

SRE是DevOps社区中另一个不断发展的主题。

SRE是谷歌提出的一系列实践和理念。以下是谷歌对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工程师。 

 

责任编辑:庞桂玉 来源: 奇妙的Linux世界
相关推荐

2017-04-14 10:37:21

2019-03-05 09:57:08

php编程语言工程师

2012-11-29 10:05:20

2016-02-25 11:42:19

2009-02-10 15:39:59

软件评测师软考经验

2010-01-13 09:35:46

2016-10-21 15:57:10

2016-06-27 10:40:12

软件测试敏捷开发

2011-05-03 08:54:36

2017-09-21 09:44:00

编程程序员软件开发

2017-03-07 08:55:55

物联网代码数据泄露

2014-05-22 10:43:26

移动开发者优秀

2013-09-25 10:47:25

创新公司员工

2014-12-23 09:40:41

CTO

2020-06-29 14:54:19

网络技术专家讲座

2014-01-13 11:04:32

2013-01-07 09:41:48

2021-01-18 09:00:00

人工智能机器学习工程师

2016-01-28 11:18:09

卓越前端工程师

2021-05-25 09:51:42

架构运维技术
点赞
收藏

51CTO技术栈公众号