写点什么

如何才能成为一名 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:204823

评论 1 条评论

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

基于 MinIO 对象存储保障 Rancher 数据

Rancher

Kubernetes k8s rancher

数牍 X Rust,那些不得不说的事

Jessica@数牍

联邦学习 隐私计算 数牍科技 rust开发者大会 分布式计算框架

面试官:ThreadLocal使用场景有哪些?内存泄露问题如何避免?

程序员啊叶

Java 编程 程序员 架构 java面试

58子站安居,经纪人营销管理平台登录接口加密逆向

梦想橡皮擦

Python 爬虫 7月月更

10次面试9次被刷?吃透这500道大厂Java高频面试题后,怒斩offer

程序员啊叶

Java 编程 程序员 架构 java面试

融云实时社区解决方案

融云 RongCloud

语音社交系统——完善有声系统产业链

开源直播系统源码

开源源码 语音直播系统源码 语音直播系统 语音直播系统连麦

Rust 入门指南(rustup, cargo)

王泰

rust

Rust 入门指南(crate 管理)

王泰

rust

不懂就问,快速成为容器服务进阶玩家!

阿里巴巴云原生

阿里云 容器 云原生 训练营

TDengine 助力西门子轻量级数字化解决方案

TDengine

数据库 tdengine 时序数据库

IT远程运维是什么意思?远程运维软件哪个好?

行云管家

IT运维 远程运维 IT远程运维

ApacheCon Asia 2022 启动!7场阿里云大数据+AI议题分享等你围观

阿里云大数据AI技术

人工智能 大数据

活动速递| Apache Doris 性能优化实战系列直播课程初公开,诚邀您来参加!

SelectDB

数据库 性能优化 数据仓库 OLAP Doris

管理区解耦架构见过吗?能帮客户搞定大难题的

华为云开发者联盟

云计算 后端 华为云

【微服务测试教程】使用Python测试gRPC接口案例

和牛

测试

35道MySQL面试必问题图解,这样也太好理解了吧

程序员啊叶

Java 编程 程序员 架构 java面试

看了就会的 Rainbond 入门教程

北京好雨科技有限公司

Kubernetes 云原生

这50道Java面试题看完,想不进大厂都难

王小凡

Java 程序员 面试 面试题 大厂面试

兆骑科创创业大赛平台,活动路演,投融资对接

兆骑科创凤阁

A tour of gRPC:05 - gRPC server straming 服务端流

BUG侦探

gRPC RPC protocolBuffer

围绕新市民金融聚焦差异化产品设计、智能技术提效及素养教育

易观分析

新市民金融 差异化产品设计 素养教育

NFTScan 与 NFTPlay 在 NFT 数据领域达成战略合作

NFT Research

区块链 大数据 NFT 合作 Web3.0

详解Kafka分区副本分配的Bug

石臻臻的杂货铺

7月月更 签约计划第三季

什么是SpringMVC?工作流程是什么?九大组件有哪些?

程序员啊叶

Java 编程 程序员 架构 java面试

一些企业数据平台建设的思考

Bright

数据平台 大数据平台

详解.NET的求复杂类型集合的差集、交集、并集

了不起的程序猿

java 14 java程序员 java编程

分布式 hdfs-over-ftp 工具实现方案

移动云大数据

兆骑科创创新创业大赛人才引进平台,双创赛事高层次人才引进

兆骑科创凤阁

一文读懂如何部署具有外部数据库的高可用 K3s

Rancher

Kubernetes k8s rancher

有奖活动分享:使用WordPress搭建一个专属自己的博客后最高可领取iPhone13

云端explorer

Wordpress 博客部署

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