从零到 DevOps 工程师 - 针对您特定背景的 DevOps 路线图🔥
什么是 DevOps?
DevOps 技能组合是什么?
你的起点是什么?🤔
从系统管理员做起
从软件开发人员开始
从测试自动化工程师做起👨🏼💻
从网络工程师做起🧑🏻💻
DevOps Bootcamp 考虑了这些不同的背景💡
从没有或很少有 IT 背景的人开始
摘要 - DevOps 路线图
作为一名 DevOps 专业人士,我有时会忘记从初学者的角度如何入门 DevOps。因此,我想写这篇文章,概述一下如果重新从零开始,我会选择哪条路径。0️⃣ 并且凭借我目前掌握的知识,我该如何选择最高效的路径来实现目标。
所以基本上成为一名 DevOps 工程师的步骤是什么,你需要学习什么以及按照什么顺序学习。✅
我已经制作了一个关于 DevOps 路线图的视频,解释了 DevOps 的概念和工具,但在这个视频中,我想从不同的角度来阐述它,并展示如果你从零开始,如何成为一名 DevOps 工程师。
我希望它能为那些拥有最常见 DevOps 背景的人提供更个性化的信息,根据大家在LinkedIn上的回复,我挑选了 5 种最常见的背景:
- 系统管理员
- 软件开发人员
- 测试自动化工程师
- 网络工程师和
- IT 知识为零或极少的人。
如果你有这些背景,这篇博文对你来说会非常有用,它能帮你找到属于你自己的 DevOps 之路。那就让我们开始吧!🙌
这是我的新 YouTube 视频的书面版本✍️
什么是 DevOps?
如果你不知道 DevOps 是什么。你可以先看看这个视频:
👉🎬什么是 DevOps?
DevOps 技能组合是什么?
现在,首先,为了了解如何成为一名 DevOps 专业人士,让我们明确定义你需要哪些技能。🤔
1 - 软件开发基础
当您与开发团队密切合作以改进和自动化他们的任务时,您需要了解以下概念:
- 开发人员如何工作以及
- 他们使用什么工作流程,
- 他们如何合作开发功能,
- 敏捷和 Scrum 等现代流程,
- 他们使用什么 Git 工作流程
- 大致了解软件开发生命周期涵盖的内容,从构思到代码一直到发布给最终用户。
这里需要强调的是,你不需要成为一名软件开发人员,也不需要亲自实施敏捷和 Scrum 流程。你只需要从概念上理解这些流程在高层次上的运作方式。
2 - 软件部署
下一个是软件部署。功能开发完成后,需要发布给最终用户,这意味着你需要一个环境,让你的应用程序能够运行并供最终用户使用。
2.1 - 操作系统和 Linux 基础知识
作为一名 DevOps 工程师,你需要知道如何
- 提供并准备这些环境,
- 如何维护它们。
为此,您需要具备一般服务器管理的知识,例如创建虚拟机(主要使用 Linux 操作系统)、安装软件、打补丁、在本地和云端配置网络。
2.2 - 使用 Docker 的容器
作为更现代的基础设施概念的一部分,您需要了解如何使用容器和最流行的容器技术,即 Docker。
👉🏼🎬免费 Docker 课程
2.3 - 使用 Kubernetes 进行容器编排
对于具有数十或数百个 Docker 容器的项目,您需要了解如何使用 Kubernetes 等容器编排平台,它是当今最流行的平台。
再次强调,所有这些工具都可以在本地或云端使用。
2.4 - 云 - 了解最受欢迎的云提供商之一
如果您在 AWS 等云上工作(这是目前最流行和使用最多的云平台),您还需要了解 AWS 特定的服务以及如何管理 AWS 上的整个部署基础设施。
3. CI/CD——持续集成和持续部署
将所有这些部分连接在一起并成为 DevOps 流程的核心的是 CI CD 管道。
如何将软件开发和部署联系起来?换句话说,当软件正在开发时,如何部署那些开发出来的功能?
这不仅仅是将代码部署到部署环境,我们不会把它随便扔在那里。为什么?因为人会犯错,要么是因为缺乏某些领域的知识,要么就是无意之失。因此,我们在部署之前添加了多个“门卫”,部署的代码需要经过各种“门卫”检查才能被允许部署到最终环境中,而这正是DevOps CI/CD 流水线的用途:
- 测试代码,
- 包装它并
- 一直部署到最终环境并交付给最终用户。
那么,这些“守门人”究竟是什么呢?嗯,就是测试代码质量、测试代码逻辑、测试代码是否破坏了任何现有代码、检查是否存在安全问题、测试代码是否按预期运行等等。因此,拥有一套能够用于实现整个 CI/CD 流水线的工具,并配备所有这些“守门人”,是一项极其重要的技能。
因此,了解任何 CI/CD 工具,例如 Jenkins、Gitlab CI/CD、GitHub Actions、Circle CI 等等,以及最重要的是,如何将这些工具与其他技术集成以进行测试、部署代码等等,这一点至关重要。
4 - 监控和可观察性
现在我们又是人,我们可以假设,即使采取最谨慎的措施和进行大量广泛的测试,我们也无法始终 100% 测试部署的每个方面,并且生产中可能会出现一些问题。🤷🏻♂️ 这就是为什么我们在生产中存在错误的原因,只要我们有计划在生产中出现错误或问题时进行处理,那就没问题。
所以,DevOps 技能组合的一部分是创建一个流程来处理生产中发现的问题,而不是陷入恐慌状态。那么,这套技能组合包括什么呢?嗯,它叫做“监控和可观察性”。
因此,在持续部署(CD)的最后阶段,部署完代码更改后,我们不会只是说:“嘿,我们完成了,部署完成了,现在让我们继续下一个任务”,而是会密切观察和监控发生的情况。如果某个用户遇到错误,或者某些程序崩溃或无法正常工作,我们就知道需要主动修复。因此,在部署后的几个小时或几天内,我们可能会积极地查找和观察生产环境中是否出现了某种问题。
5 - 自动化
最后,真正征服 DevOps 的最后一块缺失部分是实现所有这些的自动化。👏 因此,基本上,您可以自动化自己和其他工程师的大部分工作,尤其是在需要重复相同任务的领域实现自动化。
对于每个新发布的代码,让我给你举一些例子:
- 你总是需要测试你的应用程序,
- 你总是需要检查安全性,
- 你总是需要打包和
- 部署应用程序变更。
这些任务应该自动发生,因此请确保执行开发人员或测试工程师编写的自动化测试,进行自动化安全检查、质量检查,并拥有将该代码部署到最终环境的脚本或自动化代码:
因此,您不需要从自己的机器本地部署应用程序,而是由 CI/CD 管道自动部署它。
另一个是监控。显然,你肯定不想坐在电脑前观察和等待应用程序是否出现问题,而是希望部署一些工具来监控应用程序,并在出现问题或发生其他情况时通知你:
因此,监控和可观察性工具也属于您的 DevOps 工具带。
5.1 - 基础设施即代码
但是在 DevOps 中我们并不止于自动化,我们还会自动化那些在每次代码更改部署时不会重复但仍然被证明非常高效的操作。
例如,配置基础设施或搭建 Kubernetes 集群虽然不常见,但我们仍然在 DevOps 中将其自动化。为什么?因为我们希望能够在部署环境损坏或需要多个预发布环境(例如 DEV、TEST 和 PRODUCTION)时轻松复制它们:
通常,将所有内容都放在代码中,而不是由团队中的某个人执行一些手动脚本,而没有人知道,这样做有很多好处:
- 首先,鼓励团队在基础设施配置方面进行协作
- 记录基础设施的变化
- 基础设施状况的透明度和
- 这些信息可以在一个集中的地方访问,而不是以某些脚本的形式分散在人们的本地机器上。
这是一个基础设施即代码概念,是整个自动化所有工作流程以提高其效率的运动的一部分。
该领域最流行的一些工具是用于基础设施配置的 Terraform 和用于配置管理的 Ansible。
👉🏼 🎬 什么是基础设施即代码?
👉🏼 🎬 Terraform 详解
👉🏼 🎬 Ansible 详解
5.2 脚本技能
虽然您不需要以 DevOps 工程师的身份实际编写应用程序(本文后面会详细介绍),但您需要一些脚本或基本编程技能来自动化各种 DevOps 流程。
这可以是简单的 Shell 脚本,或者更好的是像 Python 这样的成熟编程语言。但是,您不需要像软件开发人员那样能够使用 Python 开发 Web 应用程序。能够用 Python 编写自动化脚本就足够了,而且实际上更容易学习。
一些示例是编写一个 shell 脚本来执行 CI/CD 管道中 Jenkins 作业中的任务,或者编写一个小型实用程序脚本来刷新缓存、启动构建和部署、连接不同的工具等。
编程语言有很多,但我建议从 Python 开始。Python 应用广泛,易于学习,并且适用于许多不同的用例,尤其是在 DevOps 领域。而且,Python 的优点在于,编程概念是固定不变的,所以当你掌握了一门语言后,你就能很快学会新的语言。
👉🏼🎬免费 Python 课程
6 - 使用 Git 进行版本控制
您将上述所有自动化逻辑都编写为代码。
就像开发人员使用 Git 等版本控制工具管理应用程序代码一样,您也需要使用版本控制工具来管理这些自动化代码和配置文件。
这些是 DevOps 的基本流程和相应的工具。您可能遇到的任何其他 DevOps 工具(数量多达数百种)都只是在优化或改进此工作流程的不同部分。
你的起点是什么?🤔
因此,掌握 DevOps 技能是最终目标,你们是从零开始的,但你们中的许多人正在向 DevOps 过渡,或者在开启 DevOps 之旅时,拥有不同的背景。所以,每个人的起点都不一样,正如我在一开始提到的,你们可能是系统管理员、软件工程师、QA 工程师等等,也可能根本没有 IT 背景,但想要过渡到 DevOps:
所以现在我想向你展示如何过渡到 DevOps,并从你的特定背景开始学习我刚才提到的所有这些工具。✅
从系统管理员做起
如果您是系统管理员,您知道如何管理服务器和其他系统。因此,您已经掌握了以下技能:
- 建立基础设施
- 配置并准备部署
- 因此可以使用操作系统、安装和运行软件
- 安全性、网络配置等您已经熟悉了。
作为系统管理员,您执行的其他一些任务包括监控系统、运行状况、备份和灾难恢复、安装和修补服务器等。
在较小的项目中,您可能还需要进行数据库管理、网络管理或安全管理。
如果你想成为一名 DevOps 工程师,这些都是非常有用的技能。👍 所以,你已经掌握了很多可以在 DevOps 部署和运维方面运用的技能:
这包括第 0 天的活动,例如基础设施的初始设置,也包括第 1 天的任务,例如维护和操作该基础设施。
许多系统管理员也懂脚本,这在 DevOps 的自动化部分会很有帮助。所以,作为一名系统管理员,你已经具备了进入 DevOps 的良好基础,然而,在 DevOps 的起步阶段,最大的缺失就是学习软件开发基础知识:
- 理解 git 工作流程
- 开发人员如何工作等等
现在需要特别注意的是,尽管一些 DevOps 工程师确实知道如何编程,但这并不是 DevOps 的必备技能,因为作为 DevOps 工程师,你的主要任务不是开发和编程应用程序,而是创建自动化流程,以便高效地将开发的软件交付给最终用户,并尽可能减少错误和问题:
但是为了能够交付应用程序更改,当然您需要了解该应用程序是如何构建、开发和工作的。
从软件开发人员开始
如果您是一名软件开发人员,那么您拥有相当不错的背景,因为您已经了解 DevOps 的一个重要部分,即软件开发流程及其工作原理。
但您很可能缺乏服务器管理技能。因此,您需要首先了解以下内容:
- 虚拟机
- 创建和配置服务器
- 配置基础设施安全、网络等
由于大多数现代应用程序都在云上运行,因此您还需要学习如何在云基础架构上完成所有这些操作。
因此,这将是您作为软件开发人员学习 DevOps 的起点。
一旦掌握了这些基础,您就可以在此基础上学习容器如何在虚拟机上工作、如何在容器中运行应用程序以及如何在 Kubernetes 等平台上运行容器。
当然,您的编程技能将为应用程序开发和部署过程的各个部分编写自动化脚本提供很大帮助。👍
从测试自动化工程师做起👨🏼💻
另一个常见的过渡到 DevOps 的背景是测试自动化工程师。与开发人员或系统管理员相比,你可能需要学习更多技能,但你绝对可以在 DevOps 中复用很多技能。
作为一名测试工程师,你很可能了解软件开发人员的工作方式,例如敏捷流程、Jira 工作流等等。作为测试自动化知识的一部分,你了解不同的测试范围,例如
- 代码级别测试
- 在更抽象的层面上测试整个应用程序
- 测试应用程序如何与其他服务集成等。
您还了解如何测试应用程序的不同方面,这些知识对于设置自动化 CI/CD 管道非常有帮助,因为为了自动化管道并简化将应用程序更改一直传递到生产环境的过程,您需要进行广泛的自动化测试:
而且,既然你已经掌握了用各种编程语言编写自动化测试的技能,那么你对各种测试框架的掌握,对于编写 DevOps 流程中某些自动化部分的脚本和代码来说,绝对会很有帮助。或者说,这对你来说并非完全陌生。👍
从网络工程师做起🧑🏻💻
最后一个值得一提的 DevOps 背景是网络工程。与我刚才提到的其他三个背景相比,这可能是与 DevOps 最不相关的,但作为一名网络工程师,你仍然可以将一些技能运用到 DevOps 中。
作为一名网络工程师,您知道如何配置设备以及设备之间的网络连接。因此,您在本地基础设施网络配置方面拥有宝贵的知识。
向云网络工程师转型
但随着大多数公司将其基础设施迁移到云端,许多网络工程师也向云网络工程转型:
所以他们在云平台上完成所有这些工作。他们不是在本地基础设施上配置路由、交换机和网络,而是在云基础设施上配置虚拟路由、虚拟交换机和虚拟网络。
拥有网络和虚拟网络知识,您将更容易理解虚拟机和容器中的网络,这是现代应用程序运行方式的重要组成部分。因此,您将更容易理解 Docker 和 Kubernetes 网络,而当您配置和维护包含 Kubernetes 和容器的部署环境时,这些通常是非常难以管理、故障排除或保护的部分。
所以你绝对可以在这方面运用你的知识和专业技能。有些网络工程师甚至懂用 Bash 或 Python 编写脚本,这对于 DevOps 的自动化部分来说也是一项很有帮助的技能。
DevOps Bootcamp 考虑了这些不同的背景💡
现在,我们在创建DevOps 训练营课程时实际上考虑了所有这些背景。
因此,我们添加了 Linux 基础模块,您可以在其中学习有关操作系统、Linux、网络、Bash 脚本等的所有知识。一切从零开始:
因此,如果您是软件开发人员或测试自动化工程师,这将为您提供学习配置部署服务器、配置服务器和准备部署等内容的先决知识和基础,以及如何管理一些 DevOps 工具,如 Jenkins 和 Kubernetes 集群等。
显然,作为系统管理员,你会跳过这部分,而是需要学习 Git 以及如何使用 Git 工作流程,例如,使用它来编写基础设施即代码 (IaaS)。你还需要学习构建和打包工具,以便打包用各种语言编写的应用程序。
因此,如您所见,DevOps 需要满足一些先决条件,不同的背景会带来不同的先决条件,我们也为缺少这些先决条件的人提供了这些先决条件。但在满足这些先决条件之后,每个人的路径看起来都差不多,因为 Kubernetes、Terraform、EKS 甚至 Docker 等工具对许多专业人士来说都很新,而且之前没有一个职业是专门从事这些工具的。所以,无论 IT 背景如何,每个人都需要学习这些工具:
从没有或很少有 IT 背景的人开始
最后,我们也收到了很多关于如何在几乎没有 IT 背景的情况下开始 DevOps 训练营的问题。这意味着,阅读本文的你们中,可能有很多人正在考虑进入 DevOps,但之前并没有太多的 IT 知识,并且想知道 DevOps 的路径是什么。
现在这是一个非常棘手的问题,因为DevOps 并不是真正的入门级职业。它不是你进入 IT 领域时首先要学的东西。
为什么呢?🤷🏻♂️ 因为 DevOps 是关于
自动化人们长期以来手动完成的流程和软件开发和部署。
这意味着,在自动化手动完成的流程和任务之前,你首先需要了解这些流程和任务是什么。如果你不了解这些,你就不知道自己在自动化什么,甚至不知道为什么需要 DevOps。
1 - 了解完整的软件开发生命周期
因此,如果您是 IT 新手,并且已经确定自己最终想成为一名 DevOps 工程师,那么您应该首先了解完整的软件开发生命周期。好消息是,这比听起来容易得多。您无需为此花费数月时间学习软件开发,也绝对不需要成为管理基础设施和配置服务器的专家。
如果你学习正确的东西,你实际上可以在相对较短的时间内做到这一点:
去找一些示例项目,在其中创建一个超级简单的应用程序并学习如何部署到虚拟服务器,从而学习开发、打包、甚至自动测试然后在云平台上的 Linux 服务器上部署示例应用程序的步骤。
这实际上是学习 DevOps 的一个很好的基础知识。在这个过程中
- 你将学习创建应用程序的基础知识,
- 您将学习如何在一些易于使用的云平台上创建带有 Linux 服务器的虚拟机并在那里托管您的应用程序。
然后再次重复整个过程,模拟对应用程序进行更新,这将教您软件开发过程每个部分的基本技能,但最重要的是,它将使您了解其中涉及的完整工作流程。👀
你不需要任何花哨的工具,不需要 Jenkins,不需要复杂的编程框架,甚至不需要 Git。再次强调,这些只是帮助你理解基本概念,然后你就可以开始学习那些 DevOps 工具,比如 Jenkins、Docker、Kubernetes 等等。因为这个阶段的重点不是学习工具,而是理解概念和完整的工作流程。
2 - 软件开发团队如何协作
之后继续观看一些有关敏捷和 scrum 方法以及软件开发团队如何在软件开发项目中协作和工作的教程。
3 - DevOps 先决条件和 4 - DevOps 技能
这些技能实际上足以开始我们的 DevOps 训练营,因为 Linux、Git 和所有这些基本工具实际上是在训练营中从头开始学习的。🚀 但同样,您需要首先了解这些工作流程,才能理解我们为什么使用 Git,为什么需要 Jenkins,为什么学习 Linux 和脚本等等。
由于 IT 初学者对我们的训练营有很多需求 🙈,我们实际上还决定创建一个完整的训练营先修课程。所以,如果你对此感兴趣,可以立即注册,以便在课程发布时收到通知 🔔:IT 初学者课程
因此,正如我所说,您当然可以按照这些步骤自行学习,并自行制定学习路径,或者您可以使用我们推出的先修课程。
摘要 - DevOps 路线图
总结起来有四个阶段:
1 - 满足先决条件
首先要确保先决条件正确。所以,根据你的背景和预备知识,你需要首先确保掌握所有缺失的先决条件知识。
因此,作为一名系统管理员或网络工程师,你需要学习软件开发工作流程。作为一名开发人员,你需要学习基础设施、虚拟服务器等方面的基础知识。当然,如果你没有任何IT背景,你必须首先掌握从服务器管理到开发的所有必备知识。所以入门难度会比较大,但只要你知道要学什么,还是有可能的。
2. 云、Docker、Kubernetes
第二步是学习云、Docker 和 Kubernetes。学习了这些先决条件后,你就可以开始学习使用容器和容器编排工具等重要的 DevOps 技能了。学习 Docker 和 Kubernetes 的基本目的是帮助你的团队部署和高效运行应用程序。Kubernetes 本身是一个非常复杂的工具,因此可能需要一些时间来掌握它并使其能够投入生产。
由于大多数现代应用程序和 Kubernetes 集群都在云上运行,因此您需要学习云基础设施、如何使用云基础设施、如何配置它、如何扩展它等等。
3 - 自动化
第三步是自动化。掌握了上述技能和技术后,就该学习如何优化和自动化现有流程了。而对于 DevOps 专业人士来说,自动化技能是最重要的技能之一。
作为 DevOps 的核心,学习构建CI/CD 流水线是一项必备技能。
最后,您将学习如何使用所谓的X as code的概念和工具逐一自动化整个 DevOps 流程的各个部分,包括基础设施即代码、配置即代码、安全即代码、策略即代码等,这基本上意味着以代码的形式自动化一切
4 - 从这里开始,继续学习🙌
第四点,从现在开始。DevOps 不断发展,新的工具层出不穷。因此,作为一名 DevOps 专业人士,你应该学习如何评估和测试各种新工具,并始终以优化和自动化现有流程并提高其效率为同一个目标。
一些值得注意的概念和工具:
- GitOps(ArgoCD 👉🏼 🎬 ArgoCD 教程)
- 服务网格(Istio👉🏼🎬服务网格和 Istio 解释)
我还有一个视频,解释了我个人如何快速有效地学习新技术,我也会在这里链接:作为一名 DevOps 工程师,我如何学习新技术(而不会感到不知所措)
现在我希望这些信息对你有用,并且能够向你展示进入 DevOps 的下一步是什么😊
祝你的 DevOps 之旅一切顺利!🎉 💪
喜欢、分享并关注我😍以获取更多内容:
文章来源:https://dev.to/techworld_with_nana/from-zero-to-devops-engineer-devops-roadmap-for-your-specific-background-4h8n