如何成为一名DevOps工程师 2023
如何成为一名DevOps工程师 2023
在本指南中,我分享了我作为DevOps工程师在不同组织中的经验以及成为DevOps工程师的技巧。这是一份开始DevOps工程职业的全面路线图。由于DevOps领域具有高薪和职业发展的潜力,目前在IT行业是一个非常受欢迎的选择。我经常被问及如何成为一名DevOps工程师。虽然有些人认为不存在 “DevOps工程师 “或 “DevOps团队 “这样的东西,但这个词在业内已经被广泛接受。理解DevOps理念而不是纠结于头衔是至关重要的。
这篇文章还包括关于DevOps工程师可能属于的不同团队的信息。对于DevOps所包含的内容有许多误解,例如认为它仅仅是关于自动化的想法。然而,DevOps实际上是一种哲学,侧重于通过软件交付和基础设施变化的自动化,改善IT专业人士之间的协作和沟通,包括开发人员、QA团队、性能团队等等。根据维基百科,DevOps是 “一种文化、运动或实践,强调软件开发人员和其他信息技术(IT)专业人员的协作和沟通,同时使软件交付和基础设施变化的过程自动化。” 在过去的五年里,DevOps的普及率一直在稳步上升,如所附趋势图所示。
什么是 DevOps Engineer?
DevOps工程师是一个具有很强的协作能力,并愿意适应新技术和方法的人,以支持DevOps实践在组织中的实施。从技术角度来看,DevOps工程师应该对系统、自动化工具、持续集成工具、版本控制系统、监控和可观察工具、网络和项目管理软件有很好的了解。DevOps工程师的角色涉及设计和开发持续集成和持续交付管道,可以在最小的人工干预下处理小的更新或发布。这需要对不同团队的工作方式进行文化转变,可能需要与不同的团队坐下来讨论痛点,共同寻找解决方案。DevOps工程师的最终目标是将重复性任务自动化,并将更多时间用于工程和创新。
如何成为一名DevOps Engineer?
要想成为一名成功的DevOps工程师,必须了解DevOps文化,即不同的团队为了一个共同的目标而合作,IT团队之间缺乏指责文化。作为一名DevOps工程师,你应该愿意帮助并与他人合作,而不是说 “这不是我的工作”。虽然理解DevOps的文化方面对应届生来说是个挑战,但重要的是要注重在核心IT概念方面打下坚实的基础,如操作系统、网络和编程。IT领导和决策者应确保整个团队在引入DevOps工具集之前接受DevOps文化方面的教育,以避免混乱和孤立的结构。了解DevOps文化也有助于防止将项目问题归咎于他人的倾向,采取合作的方式来解决和分析问题,例如通过无责的事后总结。必须认识到,DevOps不仅仅是持续集成/持续交付和基础设施自动化,而是一种注重改善IT专业人员之间协作和沟通的整体理念。Puppet的 “DevOps现状 “报告是工程师和领导者了解DevOps文化和实践的推荐资源。
学习 Linux
在当今世界,对各种Linux/Unix系统,特别是那些被组织广泛使用的系统,如RHEL、Centos、Ubuntu和CoreOS,有深刻的理解和工作知识是非常重要的。根据Linux基金会的一项案例研究,90%的公共云工作负载运行在Linux上,Redhat的一项研究显示了公共云中使用的不同Linux发行版。专注于学习Linux并熟练使用终端命令是非常必要的,因为图形用户界面在*nix世界中不常用。你可以使用Vagrant的VirtualBox等工具或AWS、GCP或Azure等云服务来启动Linux服务器,获得使用这些系统的实际经验。
要想作为DevOps工程师熟练掌握Linux,必须了解以下概念:
- Linux的启动过程
- Systemd
- Apache、Nginx和Tomcat等网络服务器的工作原理
- Linux进程
- SSH
- 不同的文件系统
- 系统日志、监控和故障排除
- 关键协议,如SSL、TLS、TCP、UDP、FTP、SFTP、SCP和SSH
- 服务管理,包括如何使用Initd和Systemd创建和配置服务
- 负载均衡器和反向代理(如Nginx和HA代理)的设置和配置,以及负载均衡中使用的算法
- 如何优化Linux的性能
- 设置和管理一个数据库,如PostgreSQL
- 排除故障的技巧
除了理解这些概念外,通过在网络服务器上托管静态或动态网站,实验不同的配置,以及破坏和修复东西来学习如何排除故障,获得实践经验也很重要。
学习基础设施组件如何运作
作为一名DevOps工程师,对构成组织的基础设施组件有广泛的了解是至关重要的,无论它们是位于云环境中还是位于内部数据中心。这种理解将使你能够提出正确的问题,并与网络和安全团队进行有效协作。例如,在基础设施知识方面有一个坚实的基础,使你能够提供有关初步故障排除努力的详细信息,而不是简单地说明某些东西不工作。这可以帮助促进一个更有成效和高效的解决过程。
学习云计算和虚拟化
云计算和虚拟化是现代DevOps实践的基础。为了获得对这些概念的扎实理解,建议从使用Virtualbox和Vagrant等工具学习虚拟化开始,这可以为云计算打下基础。在云计算方面,学习并获得云平台的认证是至关重要的,不过必须注意的是,仅仅通过使用考试转储的认证考试不一定能增加你的技能组合的价值。相反,建议积极学习和理解材料。根据Statista的一份报告,目前,AWS占据了公共云市场的大部分份额。
为了精通云计算,建议选择一个公共云平台,如AWS,并通过亲身体验和实验了解其所有的核心基础设施服务。你也可以通过观看AWS re:Invent的视频,看到其他组织如何使用AWS服务来托管他们的应用程序,从而学到很多东西。这些视频为如何在AWS上运行生产工作负载提供了宝贵的见解,而这些见解可能无法通过在线培训课程获得。如果你打算成为GCP的认证者,你可以观看Google Next视频来深入了解该平台。认证考试可以作为评估你在特定云平台上的知识和技能的一种方式。
学习自动化配置
基础设施自动化工具已经成为现代组织的一个重要方面,而不可变的基础设施模型通常用于基础设施部署。根据Redhat的一份报告,许多组织正在投资于自动化计划。从配置服务器到配置和部署应用程序,自动化是必不可少的。要学习自动化工具,建议先从官方文档或课程中学习基础知识,然后在编写自动化脚本之前通过手动配置系统获得实践经验。学习测试驱动的基础设施开发和使用测试工具,如Ansible-test和terratest,也是至关重要的。社区模块可以作为学习复杂逻辑的宝贵参考,但在使用这些模块时,必须了解每块代码的作用。
学习容器编排和分布式系统
分布式系统是可扩展基础设施的重要组成部分,许多用于微服务的工具,如Kubernetes,都具有分布式的性质。因此,对分布式系统的概念有一个坚实的理解是至关重要的。容器技术,如Docker或podman,也正变得越来越普遍,获得这方面的实践知识可以让你在就业市场上获得竞争优势。一旦你很好地理解了容器,你就可以开始学习容器协调工具,如Kubernetes和Docker Swarm,它们很适合基于微服务的架构。Kubernetes特别受欢迎,工程师和应届大学毕业生的搜索趋势和兴趣都在增加。有各种Kubernetes认证选择,如CKA、CKAD和CKS,让你在特定的领域内进行专业化。服务网是容器领域的一个更高级的话题。建议在学习服务网状结构工具之前,先在容器协调和基于微服务的架构方面打下坚实基础。CNCF基金会提供了许多服务网格工具,研究和选择最适合你的工具是非常有用的。
日志、监控和可观测性
可观察性、日志和监控是任何基础设施的基本组成部分。所有部署在基础设施中的应用都会产生日志和指标,这些日志和指标通常会根据组织的架构和设计存储在一个日志基础设施中。常见的日志堆栈包括Splunk和ELK,同时也有像Loggly这样的SaaS选项。在监控方面,有Prometheus和Nagios这样的开源工具,也有AppDynamics、Datadog和SignalFx这样的企业选项。开发人员、运营团队和安全团队依靠日志系统来监控、排除故障和审计应用程序和基础设施,而日志数据对于AIOPS也是至关重要的。关键任务应用程序通常使用显示来自日志来源或应用程序指标的数据的仪表板进行24/7监控。警报系统也被用来通过Slack、Jira门票、电子邮件、ServiceNow事件门票或电话等方法触发通知。作为一名DevOps工程师,在非生产和生产环境中查询日志和排查问题是很重要的,对正则表达式有很深的了解,对于在任何日志工具中查询日志都是很有用的。
学习安全最佳实践(DevSecOps)
DevSecOps涉及将安全实践纳入DevOps流程的每个阶段。传统的集中式安全团队的模式需要转变为联合模式,它允许每个交付团队在其DevOps实践中考虑适当的安全控制。DevSecOps的一个关键方面是左移的安全方法,这涉及到在设计和开发阶段考虑安全。云安全联盟建议从一开始就设计安全,而不是试图在以后添加。云安全联盟发布的DevSecOps的六大支柱概述了将安全纳入DevOps的关键实践。应用程序和基础设施组件的秘密管理应遵循标准的安全实践,也可以考虑零信任的安全实践。Hashicorp Vault是一个用于秘密管理的工具,为管理环境秘密提供各种工作流程。Salt Security发布的API安全状况报告显示,API攻击大幅增加,近年来增长了681%。
学习代码和脚本
DevOps工程师需要强大的脚本技能,因为他们在CI/CD工作流程中经常使用脚本。学习常用的脚本语言,如Bash/Shell、Python和Golang,是一个好主意。对于DevOps工程师来说,对编程和API有很好的理解也很有帮助,以便有效地排除故障并与开发人员协作。DevOps工程师从头开始开发自己的应用程序,以便更好地了解开发过程和所涉及的组件,这对他们来说是有益的。定制功能也可能需要编码或脚本技能。
这些语言经常用于自动化工具和流程中,可以帮助你定制和扩展这些工具的功能,以满足你的组织的需求。此外,对编程和API有很好的了解,可以帮助你更有效地与开发人员合作,并了解像Kubernetes这样的复杂技术。有从头开始开发应用程序的经验也会有帮助,因为这可以让你对开发过程有更深的了解,并帮助你与开发人员更有效地互动。Golang在DevOps领域特别受欢迎,许多工具和技术都是用这种语言编写的。
学习Git,GitOps和写文档
总之,GitOps是一种使用Git和持续部署工具来管理云原生应用运行的方式。它被设计成对开发者友好,利用开发者已经熟悉的工具。这是一个在行业内不断增长的实践,预计在未来会得到更广泛的应用。对于DevOps工程师来说,了解GitOps以及如何使用它来管理基础设施和应用程序是至关重要的。
作为一个DevOps工程师,记录你的工作是很重要的,尤其是在涉及到代码库的时候。README文件可以清楚地解释代码的目的和用途,这对你和将来可能要使用它的其他人都有帮助。记录你的工作有助于确保重要的信息不被丢失或遗忘,并能使其他人更容易理解和使用你的代码。
了解端到端应用交付生命周期
要了解应用交付过程,必须熟悉持续集成、交付和部署。阅读这些概念如何在开发、构建、测试、部署、批准和验证过程中共同发挥作用是有帮助的。
与应用程序开发和发布生命周期相关的一些关键点包括规划和审批流程、安全和合规措施、配置和秘密管理、质量保证和测试、监控和性能测量,以及发布到生产和处理潜在回滚的流程。了解这些主题可以帮助你了解不同组织中的应用程序是如何开发和发布的。
DevOps vs. SRE
网站可靠性工程(SRE)是一套实践和哲学,主要是通过更好的开发和运营实践来提高软件系统的可靠性和稳定性。它是在谷歌开发的,强调开发和运营团队之间合作的重要性,以便更快地交付更好的软件。SRE和DevOps并不冲突,而是互补的方法,旨在打破组织障碍,提高软件开发和运营的整体效率和效益。
不同类型的 “DevOps团队”
一个组织中的各种团队可能被贴上 “DevOps “的标签,但他们的角色和责任可能有所不同。中央平台团队负责按需提供基础设施,并通过持续支持和监控确保生产系统全天候可用。
- DevOps团队与开发人员紧密合作,处理端到端的应用交付。
- 应用运营团队专注于部署和管理特定领域内的应用,如支付团队。
- SRE团队专注于自动化、可用性、性能和其他运营方面,与开发人员紧密合作以解决问题。
- 专门的支持团队处理生产支持票,并根据严重程度将问题引向适当的团队。
对于有经验的候选人来说,在加入一个组织之前,了解DevOps团队的具体职责是至关重要的。
开发工程师的角色与职责
转述一下: 作为一名DevOps工程师,了解你在新组织中的角色和责任是至关重要的。这将有助于你将你的学习和职业目标与你将要做的工作结合起来。
解决关键问题:
- 日复一日的项目活动是什么?
- 是否有任何积极的自动化工作,或者它是一个维护项目?
- 目前项目中使用的DevOps工具是什么?
- 是否有任何新的迁移或开发活动正在进行中?
- 项目的未来路线图是什么?
- 多久会有随叫随到的支持?随叫随到的支持是否有补偿?
- 是否会有轮流上夜班的情况?
- 工作时间是固定的还是在项目变化时被改变?
- 是否有在周末工作的文化?
- 问一下团队的规模……肯定的,不想被烧死!”!
需要考虑的一些关键事项包括日常项目活动、正在使用的DevOps工具、项目的未来路线图以及团队规模。你还应该注意待命支持和潜在的夜班或轮班。考虑周末工作的文化也是至关重要的。根据你加入的团队,你的职责可能包括平台工程、应用开发和支持,或维护和故障排除。意识到你的工作对你的健康和幸福的影响也是至关重要的。
作为一名DevOps工程师,重要的是要了解大多数自动化工作是一次性的活动。然而,也必须准备好参与待命活动以支持项目,但也有一些例外。根据你所在的团队,你的职责可能有所不同。例如,如果你是平台工程团队的一部分,你可能会参与持续的开发和创新,作为构建平台工具的一部分。如果你是AppOps团队的一员,你可能与平台团队开发的工具一起工作,并有机会参与日常会议以了解项目。如果你是支持团队的一部分,你可能有一个游戏手册来帮助解决问题,但可能参与设计讨论的机会较少。在考虑DevOps工程师职位时,必须考虑你将成为团队的一部分的类型。
DevOps Engineer FAQs
如何进入DevOps?
有几种方法可以进入DevOps。如果你已经在从事开发、QA、性能或支持方面的工作,你可以学习基础设施自动化和CI/CD来过渡到DevOps。如果你刚开始工作,你应该专注于学习编程、操作系统概念、云计算和容器技术。在申请DevOps工作之前,在真实世界的项目中工作也是有帮助的。
担任DevOps角色需要写代码吗?
这取决于你所从事的具体项目。一些DevOps职位可能需要编码技能来开发基础设施自动化和CI/CD的定制解决方案。一般来说,有一些编码知识是个好主意,因为许多DevOps面试包括编码或脚本回合。
DevOps工程师是做什么的?
DevOps工程师与开发人员和跨职能团队合作,简化CI/CD流程,并使重复性任务自动化。他们还负责对生产和非生产平台和应用程序进行故障排除和监控。
DevOps需要哪些技能?
有几种技能对DevOps角色很重要,包括编程、操作系统概念、分布式系统、网络、监控、故障排除、容器技术、基础设施自动化、配置管理、版本控制,以及熟悉CI/CD工具,如Jenkins、GitLab CI和GitHub Actions。
什么是DevOps工程师的最佳认证?
有许多针对DevOps工程师的认证,而最适合你的认证将取决于你的兴趣和职业目标。例如,如果你想从事云技术工作,云认证可能是最有益的,而如果你对容器技术感兴趣,Kubernetes认证可能更有帮助。研究不同的认证选项并选择与你的兴趣和职业目标相一致的认证是一个好主意。
记录你的学习成果
记录你的学习历程并与他人分享是至关重要的,因为它可以帮助他人并为自己创造一个个人品牌。在WordPress或Medium等平台上建立一个博客,只需不到30分钟,当你学到新的DevOps概念和工具时,写下它们可以为自己和他人提供参考。在LinkedIn小组、Dzone或其他在线社区分享你的文章,也可以帮助扩大你的影响力。结论
需要注意的是,DevOps所涉及的工具和流程并不局限于本文所提到的那些,还有许多其他的开源工具和技术可以在这个领域使用。在决定开始你的DevOps之旅时,考虑你的目标和兴趣,关注哪些工具和技术是有帮助的。
最佳的DevOps学习资源:
- DevOps Culture and Mindset [Coursera]
- The Phoenix Project [Recomended eBook]
- Introduction to Linux [edX]
- Learn shell scripting for DevOps
- The Complete Guide to Bash Programming
- Learn Linux in 5 days [Udemy]
- Linux Foundation Certified System Administrator (LFCS)
- Computer Networking Course from Udacity [Free]
- Virtualbox Tutorial
- Vagrant tutorial for beginners
- Udemy AWS Certification Courses
- Google Certified Associate Cloud Engineer Certification
- Microsoft Azure — Beginner’s Guide + AZ-900 preparation
- Udacity Cloud DevOps Engineer Nanaodegree
- Learn DevOps: Infrastructure Automation With Terraform
- Ansible for the Absolute Beginner — Hands-On — DevOps
- Docker for the Absolute Beginner
- How to build a Docker image
- Podman tutorial for beginners
- How to Learn Kubernetes — Comprehensive Roadmap
- Kubernetes Tutorials For Beginners: 29 Getting Started Guide
- Best kubernetes courses
- Kubernetes the Hard way
- Elastic Stack — In-Depth & Hands-On
- Monitoring and Alerting with Prometheus
- Art of Monitoring [eBook]
- Regular Expressions (Regex) Tutorial
- DevOps measurement: Monitoring and observability
- HashiCorp Vault: The Advanced Course
- Vault Tutorial
- What is container security?
- Kubernetes vault setup guide
- Vault Injector tutorial
- 30+ websites to learn coding online
- Complete Python Bootcamp: Go from zero to hero in Python 3
- Learn How To Code: Google’s Go (golang)
- Linux Shell Scripting: A Project-Based Approach to Learning
- How to Learn Git for DevOps
- Git Complete: The definitive, step-by-step guide to Git
- Git Basics Every Developer and Administrator Should Know