写点什么

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

  • 2021-06-09
  • 本文字数:5154 字

    阅读完需:约 17 分钟

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

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


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

 

维基百科上提到,

 

DevOps(开发和运维的缩写)是一种文化、运动或实践,它强调软件开发人员和其他信息技术(IT)专业人员的协作和沟通,同时自动化软件交付及基础设施变更的过程。

 

从上面的定义来看,很明显 DevOps 与任何工具或技术无关。这是一种理念,让不同的 IT 团队一起协作,通过持续反馈来更好更快地交付成果。

 

下面是一个有趣的趋势图,它显示了过去五年 DevOps 受欢迎的程度。

 


从工具的角度来看,对系统、自动化工具、CI 工具、版本控制系统、网络以及对使用项目管理工具的经验有很好的理解,将能铺平 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基金会的案例研究,90%的公共云工作负载运行在 Linux 上。

 


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

 


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

 

需要注意的是,GUI 在*nix 世界中并不太受欢迎。你可以使用虚拟机(Virtual box)或 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 环境中进行实践或工作的人来说,必须要全面了解基础设施的组件。如果你对以下的内容有一个基本的了解,对你来说将会有所帮助。

 

网络

存储

子网

公共网络

私有网络

CIDR标识

静态/动态IP

防火墙

代理

NAT

公有和私有DNS

SAN

备份(Backups)

NFS

单点登录(SSO)

Active Directory/LDAP

负载平衡器

高可用性

L5负载平衡器

L7负载平衡器

负载平衡算法

反向代理

集群

FailOver机制

故障恢复

安全

VPN

PKI基础设施

SSL证书

站点到站点VPN

客户端到站点的VPN


4.获得云上认证


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

 

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

 


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


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

5.学习自动化


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

 


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

 

针对开发环境

基础设施配置

  • Vagrant
  • Docker Desktop
  • Minikube
  • Minishift
  • Terraform
  • CLIs (各云提供商的)

针对配置管理

VM镜像管理

  • Ansible
  • Chef
  • Puppet
  • Saltstack
  • Packer

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


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

 

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

 

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

 


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

 

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

7.日志与监控


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

 

每家公司都会有一个日志和监控基础设施。常用的日志栈是 Splunk 和 ELK。此外,也有少量的像 Loggly 这样提供日志基础设施的 SaaS 公司。对于监控,有诸如Prometheus、Nagios 之类的开源工具和诸如 AppDynamics、Datadog、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 管道即代码(Jenkins Pipeline As Code )需要理解 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.了解端到端应用程序交付生命周期


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

 

  • 持续集成(Continuous Integration)

  • 持续交付(Continuous Delivery)

  • 持续部署(Continuous Deployment)

 

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

 

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



12.DevOps 与 SRE


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

 

SRE 是谷歌提出的一系列实践和理念。以下是谷歌对 DevOps 和 SRE 的说明:

 

DevOps 和 SRE 并不是两种相互竞争的软件开发和运维方法,而是旨在打破组织障碍以更快地交付更好的软件的密友。

 

如果你想进一步了解 SRE,可以阅读下面这些官方文档:

 

 

13.不同类型的“DevOps 团队”

 

如今,每个组织都将与基础设施/CI-CD 打交道的人称为“DevOps工程师”,并使他们成为“DevOps 团队”的一部分。然而,他们的职责却因所在团队而异。对于“DevOps 工程师”来说,有一种误解认为“他们要对一切负责”。但其实这句话可能只适用于小型团队。

 

实际上,如果你被聘为“DevOps 工程师”,那么你可能属于组织中如下的任何一个团队。

 

  • 中台团队(Central Platform Team):负责按需提供基础设施。他们不负责应用程序,而是负责底层平台。通过持续的平台支持和监控来确保生产系统 24×7 全天候可用。此外,他们将致力于新的工具和自动化,以满足未来的需要。这个团队的最终用户将是开发或 App Ops 团队。所以它更多的是共同责任。

  • DevOps 团队:虽然“DevOps 团队”没有任何意义,但是组织用它来命名运维团队。这个团队通常与开发人员密切合作,并为多个开发团队提供服务。他们负责端到端的应用程序交付。

  • App Ops 团队:这个团队是特定工程团队的一部分,在一个对特定领域有很好了解的组织中,与特定项目密切合作。例如,支付团队。该团队负责部署和管理支付应用程序。平台管理将由中台团队或 DevOps 团队负责。

  • SRE 团队:该团队负责自动化、可用性、延迟、性能、效率、变更管理、监控、应急响应和容量规划。他们与开发人员密切合作,解决运维问题。该团队由具有开发背景的基础设施工程师组成。

  • 专门的支持团队:支持团队负责解决/处理生产支持问题,并根据严重程度指导相应团队的问题解决。

14.阅读,阅读,再阅读

 

没有什么比读书更能获得知识的了,要想成为 DevOps 工程师,至少需要阅读一篇与工程相关的 DevOps 技术博客。此外,你也可以关注所有工程博客,如 Netflix、Twitter、Google 等,了解他们是如何使用正确的工具集的,以及他们的部署策略和最新的开源项目。也可以在 LinkedIn、Reddit、Medium、Quora 等网站上关注志趣相投的人。

资源:

最佳DevOps博客和资源列表

15.写博客


你可以在博客上发布教程、学习内容和经验。这种方式可以帮助到别人,也能为自己创造个人品牌。建立一个 WordPress 博客或 Medium 博客只需不到 30 分钟的时间。每当你学到新东西,你都可以写下来。这对你和其他人都是一个参考。

结论

 

DevOps 中涉及的工具和流程并不仅限于本文中所提到的内容。不过,这些都是常用的开源工具和技术,你可以从它们开始,成为 DevOps 工程师。

 

原文链接:

https://devopscube.com/become-devops-engineer

2021-06-09 09:204734

评论 1 条评论

发布
用户头像
很不错的文章,看到了自己想要了解的东西
2021-06-09 17:37
回复
没有更多了
发现更多内容

Dubbo 服务在线测试

青年IT男

dubbo

【Vue2.x源码学习】第一篇-源码环境搭建

Brave

源码 vue2 6月日更

40 图|硬核解析用 Mac M1 玩转 SpringCloud

悟空聊架构

Spring Cloud Mac SpringCloud Alibaba m1 6月日更

NQI质量基础设施“一站式”服务平台开发解决方案

源中瑞-龙先生

开发 解决方案 NQI 质量基础设施“一站式”

bzz矿机分币系统开发,BZZ矿机节点APP搭建

六一限定,致每一个追光者

脑极体

面试官问我redis的string应用场景,我是这么回答的!

李阿柯

php lua redis 面试

Java 中 HashSet 的 removeAll 性能分析

落日楼台H

Java 性能 HashSet removeAll 集合删除

项目又延期了

escray

学习 极客时间 朱赟的技术管理课 6月日更

Rust从0到1-泛型-trait

rust 泛型 Trait generic

GitOps系列一:为什么协作技术对GitOps至关重要?

极狐GitLab

算法设计与分析——递归详解

若尘

算法 递归 6月日更

《面试官:谈谈你对索引的认知》系列之B+树

架构精进之路

MySQL 索引结构 6月日更

在一架天车中,透视5G时代的钢铁智变

脑极体

如何理解梯度下降算法Gradient Descent algorithm John 易筋 ARTS 打卡 Week 49

John(易筋)

ARTS 打卡计划

网络攻防学习笔记 Day32

穿过生命散发芬芳

网络攻防 6月日更

Grpc-go源码刨析

王博

记录下PVE 装openwrt 后 pve 本身不能上网问题

三爻

架构抉择之分合矩阵

凌晞

架构

【Flutter 专题】115 图解自定义 View 之 Canvas (四) drawParagraph

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

树莓派上的自动化---自动发送IP地址到邮箱

IT蜗壳-Tango

树莓派 IT蜗壳教学 6月日更

springboot+mongo多数据源简单配置

Mars

mongo 多数据源配置

认识微前端:一种用于前端 Web 开发的微服务

devpoint

大前端 SPA

云原生中定时弹性伸缩之CronHPA实战

雪雷

6月日更

基于MySQL Binlog 实现可配置的异构数据同步

王博

[万字总结] 一文吃透 Webpack 核心原理

范文杰

大前端 webpack 6月日更

让你编程能力秃飞猛进的好习惯

程序员鱼皮

Java c++ Python 大前端 自学编程

【译】JavaScript 代码整洁之道-变量篇

KooFE

JavaScript 大前端 变量 6月日更 整洁代码

Spring Cloud Alibaba 实战

Damon

微服务 SpringCloud Alibaba 6月日更

算法训练营 - 学习笔记 - 第八周

心在飞

react源码解析3.react源码架构

全栈潇晨

React React Hooks react源码

如何才能成为一名DevOps工程师?_文化 & 方法_Bibin Wilson_InfoQ精选文章