您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 系统/运维 > 正文

2020年成为DevOps工程师的必读教程

发表于:2020-12-02 作者:王欢翻译 来源:Dockone.io

协作为世界带来了一些伟大的发明。

七十年代后期,本·科恩(Ben Cohen)和杰里·格林菲尔德(Jerry Greenfield)聚在一起带给了我们一份礼物,这份礼物持续保持奉献——本和杰里的冰淇淋。他们共同努力,将冰淇淋品种的门槛提的很高,以至于有些人仍在努力追赶。

你可能想知道这和DevOps有什么关系。好吧,你可以认为DevOps文化和Ben&Jerry的事情类似(象征性地),并且DevOps文化能够促进开发和运维之间的协作——通过简化产品开发以及减少多余的流程。

我们喜欢以前的分工概念,但这就是问题——有时分工会阻碍生产率。它可能会造成延迟,形成官僚作风,并起到抑制创造力的作用。

另一方面,协作可以将人们团结在一起并加快产品发布周期。更不用说,开发团队和运营团队之间的合作可以改善终端用户的整体体验。对此还有什么不喜欢的?

实际上,DevOps文化非常致力于协作,以至于“DevOps”一词是“开发”和“运维”一词的融合。我的意思是,正如杰克·斯派洛(Jack Sparrow)所说的那样——尽管所有IT人士都是聪明的人,但在命名事物上,他们并没有很好的想象力!

尽管如此,DevOps一词仍然具有一定的吸引力,而且这种趋势不会很快消失。但是,在我们深入研究可以帮助你加入DevOps工程师领域的内容之前,让我们看一下DevOps文化实际上意味着什么。

什么是DevOps?

Tripwire Inc.的联合创始人吉恩·金(Gene Kim)表示:“目前,DevOps更像是一场哲学运动,尚未有准确地描述或实践。”

在IT领域似乎有很多这样的事情!从努力定义计算机科学到尝试确定硬件错误和软件错误——有太多无法在计算机科学中精确定义的东西。

幸运的是,这并没有阻止人们尝试。以下是Azure对DevOps的定义:

开发(Dev)和运维(Ops)的组合,DevOps是人员,流程和技术的结合,以不断为客户提供价值。DevOps对团队意味着什么?

DevOps使以前孤立的角色(开发,IT运营,质量工程和安全性)能够协调和协作以生产更好,更可靠的产品。通过采用DevOps文化以及DevOps的实践和工具,团队可以更好地响应客户需求,增强对所构建应用程序的信心,并更快地实现业务目标。

——Azure.microsoft.com

DevOps的理念是致力于创建一个以用户为中心的软件开发协作环境。这不仅有利于加快开发周期,还能够提高软件的整体质量。这可能就是为什么最好将DevOps描述为一种理念,而不是仅仅一个快速跟踪开发的工具。

DevOps怎样运作的?

还记得丹泽尔·华盛顿(Denzel Washington)如何使他的攻守团队成员在电影《记住泰坦》中一起工作吗?将DevOps视为IT工程界的丹泽尔。

从设计流程一直到生产发布和支持,DevOps致力于将运维和开发工程师的专业知识相结合。

在某些DevOps模型下,开发和运维团队的合并还包括质量保障和安全团队的紧密集成。这种高度集成的结果是消除了孤立活动(例如测试和部署)所产生的许多错误。

DevOps团队使用实践来自动化流程和工具,以帮助更快,更可靠地运营和开发应用程序。多亏了DevOps,团队的整体生产力和速度都被推到了极限。这同时带来了更大的收益方式,超越了公司的利润范围。

DevOps收益

像所有事情一样,DevOps从提出来到现在也受到一些批评。例如,批评者经常将DevOps称为一把双刃剑,它既可以使事情复杂化又可以使事情简单化。

我将列出它提供的一些好处,让你判断DevOps是有怎样价值的一种方法。

速度

速度绝对是DevOps必须垂涎的优势之一。它能让企业更快速的发展。

更快的软件发布意味着企业可以更好的利用产品功能的价值。每个人都知道,产品测试是必须的并且也非常耗时。借助DevOps,公司可以通过自动化集成和测试来加快交付和迭代的过程。

不仅如此,整个开发团队还可以密切关注产品的整个生命周期。这种持续的监控减少了团队在查找和修复错误和bug上的时间。

可靠性

竞争激烈市场的好处是,质量最终将胜过数量。这就是为什么软件质量值得称赞的原因。

质量和可靠性是DevOps可以带来的两个好处。DevOps有助于简化企业执行软件测试的方式——DevOps不是将测试作为SDLC的一部分,而是将其提升为整个SDLC中至关重要的组件。

另一方面,可靠性使系统能够在其环境限制内连续运行,从而提升了企业无缝运营所需服务的整体连接性。

改善协作

问题是,这并不是说人们没有意识到,在DevOps文化兴起之前,巩固开发,运维和质量保障团队会为业务带来更多价值。

另外,以前的软件开发方式也没有在协作这个主要元素上有所丢失。DevOps所做的就是将部门之间的协作带到了最前沿,并改变了这些部门之间的交互方式。

我们都知道DevOps是对敏捷和精益软件方法论的改进,因此DevOps自然的突出显示运维相关功能也就不足为奇了。在DevOps环境中,团队并不是各自独立的,也不存在部门特定的目标。

在DevOps模式下进行协作的最大好处是焦点从团队效率转换为综合整体绩效——因为最终产品的责任制是所有人共同承担的。此外,开发,运维和质量保障团队之间不断增强的交互性还具有技术升级形式的另一个不可估量的优势。

想想看,当不同部门的成员定期合作时,他们会共享想法和专业知识。在某种程度上,他们在与专业无关的所有方面都接受了交叉培训。这就像你拥有蛋糕,然后和大家共享——这才是吃蛋糕的重点!

安全性

对于IT来说,安全性是一件大事。如果你正在处理受损的数据保护,那么这和你的产品线是否以正常的速度运行都没关系。

好消息是DevOps除了可以为公司提供所有其他优势外,它还可以帮助增强安全性。它通过将安全性作为单独的元素添加到开发和运维的组件中,因此DevOps可以转变为DevSecOps。

在DevSecOps模式下,安全责任不再是只属于一个团队,而是每个人都要负责安全与防御。DevSecOps不仅有助于降低成本,而且还可以帮助你及早发现并解决安全问题。

为什么DevOps很重要?

问DevOps为什么重要,就像问为什么多多益善一样。这就是方程式发挥作用的方式。如果我所列出的DevOps好处都没有使你信服,那么我可以再试一次。

毫无疑问,世界已经改变。软件和互联网几乎以你能想到的所有方式改变了我们的生活。软件不再是锦上添花的东西,而是每个企业不可或缺的组成部分。

公司使用软件APP和服务来吸引客户,并简化其开展业务的方式——无论是物流,运营还是通信。就软件而言,实现的可能性是无限的。

在一切都变得数字化的时代,软件开发是所有创新的关键。而且常规(good)软件开发和优秀(great)软件开发之间的差异就在于DevOps!

DevOps实践

现在,我们已经了解了DevOps的含义以及它的一些相关优点,让我们讨论一些DevOps的实践。对DevOps方法论的透彻理解将有助于清除你可能遇到的任何挥之不去的疑问。更不用说它会增加你在这方面的知识并在面试中派上用场(我们将在后面进行讨论)。

持续集成

团队孤立地工作所导致的最大问题之一是在工作完成后合并代码。这不仅具有挑战性,而且很耗时。在这方面,持续集成(CI)可以帮助你节省大量时间。

开发人员通常使用具有持续集成功能的共享存储库(使用版本控制系统,如Git)。持续集成服务可以并发的对变更的代码进行构建和运行测试,这使得识别和处理错误更加容易。从长远来看,持续集成有助于提高开发人员的生产率,更快地解决bug和错误,并能够加快迭代速度。

持续交付

  • > 进化塑造了这颗星球上一切有意识的生命,而它只用了一个工具:错误。
  • ——西部世界

罗伯特·福特(Robert Ford)可能在《西部世界》中犯了一些重大错误,但是这个人确实有一些出色的表现。他在进化上做出了很重要的一步。

谈到进化,许多人认为持续交付(CD)是CI的下一步发展,因为它推动了自动化开发生命周期的进一步发展。

CD仅涉及编译,测试和暂存环境。开发生命周期在该构建阶段之后会将变更的代码扩展到测试环境(或生产环境)从而来扩展CI。

如果使用得当,CD可以在生产阶段之前对多个维度进行全面测试来帮助开发人员微调更新。持续交付允许开发人员运行测试,例如UI测试,集成测试和负载测试等。

微服务

微服务之于软件设计就像生产线之于制造。或者,更确切地说,微服务是一种软件设计体系结构,它对整个系统产生影响。

微服务允许将多个应用程序放到一个大的代码库中。每个应用程序都包含多个微服务,并且每个服务都经过调整以在一个特定功能上表现出色。

例如,让我们看看亚马逊如何转向微服务的。曾几何时,当亚马逊还不是今天的庞然大物时,他们的API可以很好地为他们服务。但是随着亚马逊的扩大,对更好的应用程序接口的需求也越来越大。

亚马逊决定使用微服务。现在,亚马逊使用多个服务替换之前有问题的双层体系架构——比如处理订单的服务,推荐系统服务,支付服务等。所有这些服务实际上都是具有单一业务功能的微型应用程序。

基础架构即代码

由于技术创新,服务器和关键基础架构不再像十年前那样。现在,你拥有像Google这样的云提供商,它们可以在巨大的数据仓库中为成千上万的客户管理业务基础架构。

毫不奇怪,当今的工程师管理基础架构的方式与以前的方式截然不同。而且,基础设施即代码(IaC)是DevOps环境可用于处理规模变化的实践之一。

在IaC下,使用软件开发技术和代码(例如版本控制等)来管理基础架构。借助云的API驱动模型,开发人员可以通过编程方式与基础架构进行交互。这使工程师能够以处理应用程序代码的方式来处理基础架构。

这很重要,因为它允许你测试基础架构就像测试代码一样。借助IaC,你的系统管理员不必再担心网络服务器无法连接到数据库等问题。

更重要的是,如果企业有一个DevOps团队正在开发推动自动化的基础架构,那么IaC可以帮助企业实现自动配置和塑造抽象层,从而使开发人员可以继续构建服务而无需了解特定的硬件,GPU,固件等。

想象一下:奔驰,宝马和奥迪等大型汽车制造商都希望获得最新的车内体验技术,对吗?但是,如果这些公司希望提供新的服务和产品,那么他们将会为所有跑在路上具有不同硬件的车而去努力做出调整。

除非有那么美好的一天,所有硬件都统一了,否则特定设备会继续作为开发路上的拦路虎。但是,强大的DevOps团队可以在此提供帮助,因为他们可以自动设置抽象层从而自动化基础架构服务。通过解决云中的极端情况挑战,DevOps团队可以通过降低成本来帮助自动化制造商,并减轻开发人员的负担和压力。

配置管理

DevOps模型中的配置管理(CM)对于促进持续集成很重要。无论是托管在云中还是本地管理我们的系统都没有关系,正确实施配置可以确保准确性,可追溯性和一致性。

当系统管理员使用代码来自动化操作系统时,这会引导配置变更的标准化。这种标准化会让开发人员免于浪费时间手动配置系统或系统应用程序。

策略即代码

受益于云编码基础设施和配置的组织还具有额外的优势,即可以大规模监控和强制实施合规。

这种自动化类型可以让组织有效地监控资源的变更,并且可以以分布式方式实施安全措施。

监控和日志

监控指标可以帮助企业了解应用程序和基础架构性能对终端用户体验的影响。对数据和日志进行分析和分类可以更好的了解产生问题的核心原因。

来看看这种情况——如果要以24/7全天候提供服务,那么就更新频率而言,主动监控就变得尤为重要。

如果你正在做代码发布,那么你知道的,你无法做到检查所有盲点。为什么?因为并非每个问题都在用户界面中弹出。有些bug的工作方式类似于Ethan Hunt,有些bug则降低了性能,然后是浪费型的bug,它们浪费了资源。

另一方面,容器和实例的生成会使日志管理感觉就像在一大堆针头中找到一根针头一样令人不快。要遍历的原始数据量巨大,可能很难找到有意义的信息。

但是,如果你有监控系统,则可以根据监控指标来告警团队有关跨云服务或应用程序任何类型的异常情况。

此外,监控指标还可以帮助企业了解应用程序和基础架构性能对终端用户体验的影响。

日志记录可以帮助DevOps团队创建用户友好的产品或服务,或者推动持续集成/交付。一起使用——监控和日志记录不仅可以帮助企业更了解其客户,而且还可以帮助企业了解其自身的能力和规模大小。

例如,几乎所有企业在全年中都会从AWS,Azure或者Google Cloud等云提供商租用了一定数量的云空间。但是,如果公司不了解其容量可能会由于旺季或假期而波动的事实,或者如果其团队不准备通过创建置备层来应对起伏不定的情况,那么情况可能会变得很糟糕,比如网站崩溃。

沟通与协作

DevOps最重要的一点是沟通与协作。(软件交付过程的)DevOps工具和自动化专注于通过结合开发和运维的流程和效率来创建协作。

在DevOps环境中,所有团队都参与制定与信息共享有关的文化规范,并通过项目跟踪系统,聊天应用程序等促进交流。这使开发人员之间可以更快地进行交流,并有助于将组织的各个部门聚集在一起以实现既定目标和项目。

如何准备DevOps面试

到目前为止,我们已经详细介绍了DevOps及其优势和实践。现在是时候深入了解找一份DevOps工作所需要的信息了。

DevOps工程师需要对SDLC有透彻的了解。仅凭表面的理解是不够的,你需要了解为什么组织必须转向新的模式。因为俗话说,你只有知道自己的目标,才知道要去怎么做。

另外,如果你打算迁移到DevOps世界,那么你可以享受CI/CD管线提供的各种好处。我们会谈论规划,构建,测试,部署和监控,换句话说,就是整个流程。

公司一直在寻找与集体效率有关的DevOps工程师,他们致力于简化代码以及充分利用自动化基础架构,例如节省云成本,减少程序瓶颈和运行时间。

请记住,在DevOps环境中,每个人都应对所有事情负责——成为所有行业的佼佼者并不是一件容易的事。

考虑到软件开发周期,大多数人应该已经弄清楚了DevOps职业路线图的第一步。如果你还没有,那也没关系,因为马上我们就会谈论它。

DevOps职业路线图的步骤

为什么职业路线图很重要?我们可以换句话说——如果你想要了解职业发展在组织中如何取得成功,那么你就需要做一些认真的规划。

此外,我们大多数人都有我们要为之努力的目标,如果你打算朝着DevOps梦想的工作迈进,那么你需要关注职业发展。

谈到技能以及职业道路的制定,编程语言对DevOps而言就像牛奶对奶昔一样。我的意思是DevOps工程师也会做开发以及为自动化软件做编码工作。唯一的区别是,DevOps工程师的工作水平要高于老式学校的系统管理员或来自90年代的Windows构建工程师。

这就是为什么你需要掌握多种编程语言才能成为DevOps工程师的原因。Python,JavaScript和Ruby是与DevOps工具(如Git和Docker)结合使用的3种最流行的语言。

我并不是说你必须要掌握所有这三种语言,但是至少要精通一种。此外,尝试使用DevOps工具也不会有坏处。

DevOps工程师还应该对Linux命令接口有基本的了解。必备的Linux技能包括Linux命令(find,grep,awk,sed),Linux shell(bash或ksh),同时不要忘了还有网络命令(nslookup和netstat)。尽管Unix和Windows都一样好,但是如果你正在运行开源技术堆栈,则更有可能是在Linux上运行。

当然,就成为一名DevOps工程师而言,编程语言只是该过程的第一步。如果你想对整个过程进行全面逐步的了解,请单击此处。另外,如果你对自己的Python技巧有些生疏,那么你可以查看这里。

DevOps面试准备

在继续之前,我们假设每个人都知道成为一名DevOps工程师所需的要求(单击链接),让我们继续介绍如何为DevOps面试做准备。

我讨厌听到坏消息,但是为DevOps面试做准备就像在准备IT世界中任何其他类型的面试一样。你需要根据自己的技能能力进行复习。同时你需要记住一点——你正努力成为推崇自动化文化的一部分,但这并不意味着你应该像机器一样工作。

面试官不会期待你了解所有内容,另外为了避免面试中过度紧张,请慢慢进行。分解重要部分,并逐个讲解各个主题。就像罗马不是一天建成的一样,你不能指望你的技能在几个小时内从零增加到一百。

谈到重要主题,你应该着重关注以下主题:

  • 数据结构和算法(永远无法逃脱)
  • 系统设计
  • Linux基础知识
  • DevOps工具
  • 语法分析(Parsing)

一旦掌握了这些主题,就可以开始为问答环节做准备。

任何公司的面试团队都经过培训,可以分辨不同人的工作能力。没错,他们将竭尽所能吸引最适合他们的申请人。

因此,在进行其他准备之前,请先戴上Sherlock帽,然后进行一些调查,当然,不是什么太极端的,只需访问该公司的网站并查找有关它们的更多信息。尝试发现公司的目标和计划,他们的工作文化以及任何其他有趣的花絮,以便可以帮助你弄清楚遇到的问题。

相信我,稍微深入一点的挖掘就可以让后面的路走的更远点。你收集的信息可能会对你在面试中遇到的问题提供一些见解。

但是,根据统计信息,有50%的机会运气会撞向你,也就是你从调查活动中不会得到任何有用信息。

不过问题不大,下面我为你准备了DevOps面试中可能会遇到的全面的问题清单

全面的问题清单

根据一段时间的调查研究,可以把以下一些问题作为速查表。这些问题听起来有些笼统,但是它们和你实际在面试中预期的非常接近。

  • 准备提出令人深思且让面试官影响深刻的作答了吗?
  • 安全在你的DevOps流程中有多重要?你过去做了什么来增加更高的安全意识?

如果你一直关注安全方面,那你会知道安全性在DevOps中有多么重要。由于DevOps自动化工作的步伐非常快,因此如果你够不小心,它可能会产生一些严重的安全错误。作为一名DevOps工程师,确保应用程序的安全是你的工作职责。

  • 未来你想接触哪些技术?为什么?你是否已采取任何积极措施来参与这些技术?
  • 未来你想接触哪些技术?为什么?你是否已采取任何积极措施来参与这些技术?

实话实说,如果你不希望在DevOps面试中遇到这样的问题,那么你差不多就和这份工作无缘了。创新本身就是DevOps的事情之一,新兴技术也是如此。

这就是为什么你最好加入一个技术社区(例如Reddit或GitHub)并成为开源项目的一部分原因。可以这么说,紧紧抓住变化的脉搏。

告诉我们有关你如何为生产系统实现高效监控解决方案的信息

监控需要时间和耐心,而且很难。优秀的DevOps候选人应该知道这一点。在这类回答中你可以从很多方面说明,例如如何在遵守SLA,睡眠(sleep)和发布周期中不花太多时间之间保持良好平衡。通过谷歌搜索SRE监控策略并阅读有关该主题的内容,开始为此类问题做准备。

你认为DevOps角色最具挑战性的方面是什么?

这是一个自述问题。这类询问自己看法的问题主要是让你有机会公开的谈论你面临和克服的挑战。

公司喜欢寻找那些积极面对挑战的候选人。另外,你也可以谈论与业务相关的挑战或技术难点。

你是如何描述持续集成以及如何实现它?

是的,这是一个非常简单的问题。尝试从两个方面回答——解释持续集成的实践内容,然后解释与该软件有关的部署过程。

你是如何定义DevOps?

这个问题太开放了,没有唯一的正确答案。这个问题的初衷是想了解你对DevOps文化的看法。答案实际上取决于你对DevOps的关注点——是有关协作,自动化还是速度?

但是,无论是微服务还是其他服务,都请确保从你的角度来看在DevOps中包含你期望的一些最新趋势。另外(这是一个提示)DevOps在很大程度上是关于协作的,但是它的主要目标是简化开发周期,因此DevOps主要是关于时间效率方面的。

你是如何看待“基础架构即代码”,以及IaC的思想如何与DevOps文化融合?

还记得我们在讨论IaC的时候说过,它允许工程师像测试代码那样测试基础架构吗?IaC是改善公司整体自动化策略的关键——这座桥梁可以在最少的人工干预下管理基础架构。另外,根据职位描述和组织,你可以多回答一些基础架构自动化工具和容器技术。

如何评判自己和DevOps团队的成功

DevOps文化是关于整体改进的。团队中的每个人都在努力使生产和部署过程更安全,高效以及自动化。

这意味着,没有事情是完美的——总有可以改进的地方。作为一名DevOps工程师,你的工作是推动自己和团队不断做得更好。而且,这就是为什么你需要可评估或可衡量的目标来衡量成功的原因。否则,你将不知道如何衡量你的成功。

为什么我们需要DevOps?

这很简单——公司面临着从用户不断增长到以交付更好,更快的应用程序的需求转变。而且,DevOps强调自动化和协作,这可以帮助企业以经济高效的方式迅速满足需求。

DevOps工程师在敏捷开发方面的职责是什么?

DevOps工程师需要与敏捷开发团队紧密合作,以促进必要的环境来支持诸如持续集成,持续交付和自动化测试之类的实践。DevOps工程师必须与开发人员合作,以使整个DevOps机器无缝运行。

结束语

我们提供了完整的DevOps面试问题清单,以及承诺的有关DevOps文化的大量信息。

冒着这篇文章变成与托尔斯泰的《战争与和平》相提并论的风险,我只想在结束之前提及一个小细节。

就像我经常告诉人们的那样,当你走进面试室时,重要的是要在面试结束时向面试官提出一系列问题。

利用此次机会获得有关工作和公司的有价值的信息。你能想象自己在这样的地方工作吗?如果不能,那么整个过程将毫无意义。

你的职业生涯取决于你在某个特定领域的表现和贡献。选择符合你的兴趣和目标的工作是成功的一半。选择一个你真正感兴趣并感到兴奋的工作,然后让这种热情驱动你向前。

原文标题:How to Become an DevOps Engineer in 2020