DevOps路线图
什么是DevOps?
什么是DevSecOps:
1)了解更多关于DevOps文化和实践的信息:
2)学习至少一种后端编程语言:
3)了解不同的操作系统概念:
4)学习服务器管理:
5)网络、安全和协议
6)学习基础设施即代码:
7)学习一些 CI/CD 工具:
8. 学习监控软件和基础设施:
9)云服务提供商:
概括:
作者简介:
一直以来,都有人询问如何成为一名 DevOps 工程师,以及需要掌握哪些技能。
在本文中,我将详细解释所有这些内容。但首先请看这里👇
好!好!我知道这有点太多了,别慌,我们从基础开始吧。
什么是DevOps?
DevOps 是一套结合软件开发和 IT 运维的实践方法。它旨在缩短系统开发生命周期,并实现持续交付和高质量软件。DevOps 与敏捷软件开发相辅相成;DevOps 的许多方面都源于敏捷方法论。——维基百科
我也很喜欢AWS的这个定义:
DevOps 融合了文化理念、实践和工具,旨在提升组织高速交付应用程序和服务的能力:与采用传统软件开发和基础设施管理流程的组织相比,DevOps 能够以更快的速度演进和改进产品。这种速度使组织能够更好地服务客户,并在市场竞争中更具优势。
从定义和上面的图片中,你已经能大致了解DevOps是什么了。
简单来说,就是任何能让以下流程更快更顺畅的事情:
编码 -> 构建 -> 测试 -> 打包 -> 发布 -> 配置 -> 监控 -> 重复并改进 <-
我们已经讨论了什么是DevOps,现在让我们来谈谈DevSecOps。
我喜欢 Sumologic 对 DevSecOps 的解释👇
什么是DevSecOps:
DevSecOps 是一种将安全实践融入 DevOps 流程的理念。DevSecOps 旨在创建一种“安全即代码”的文化,并促进发布工程师和安全团队之间持续、灵活的协作。DevSecOps 运动与 DevOps 本身一样,致力于在敏捷框架内为复杂的软件开发流程创建新的解决方案。
DevSecOps是对传统安全模型在现代持续交付流程中造成的瓶颈效应的自然且必要的应对措施。其目标是在确保代码快速、安全交付的同时,弥合IT和安全之间的传统鸿沟。它摒弃了各自为政的思维模式,转而加强沟通,并在交付过程的各个阶段共同承担安全责任。
简单来说,就是确保将安全纳入 DevOps 流程并实现自动化。
在深入探讨之前,了解DevOps工程师的日常工作非常重要,以下是一些示例:
从开发到生产,设计、构建、测试和部署可扩展、安全、分布式的系统;
管理代码仓库(例如 Git、SVN、BitBucket 等),包括代码合并和集成、分支和维护以及远程仓库管理;
管理、配置和维护基础设施系统;
设计数据库架构和数据库对象,并同步各种环境;
设计、实施和支持 DevOps 持续集成和持续交付流水线;
研究和实施新技术和实践;
记录流程、系统和工作流;
使用行业领先的服务创建和增强动态监控和告警解决方案;
持续分析手动执行且可以用代码替代的任务;
创建和增强基于 Docker 和 Kubernetes 的持续部署自动化。
您可能觉得这些都是开发人员和运维人员共同的责任,而事实也的确如此,原因如下:
开发 + 运维 = DevOps
好了,定义就讲到这里,现在我们来谈谈推荐的路线图:
1)了解更多关于DevOps文化和实践的信息:
DevOps 是每个人的责任,它不是一条硬性规定,而是整个团队齐心协力实现最终目标,即优化开发人员的生产力和运维的可靠性,打造高质量的产品,快速发布功能并更快地修复错误,引入更多自动化,并遵循最佳 DevOps 实践,例如:
持续集成:
持续集成是一种软件开发实践,开发人员定期将代码更改合并到中央代码库中,之后运行自动化构建和测试。持续集成的关键目标是更快地发现和修复错误、提高软件质量,并缩短验证和发布新软件更新所需的时间。
持续交付:
持续交付是一种软件开发实践,它自动构建、测试代码变更,并最终将其部署到生产环境。它在持续集成的基础上进行了扩展,在构建阶段之后,将所有代码变更部署到测试环境和/或生产环境。如果持续交付实施得当,开发人员始终可以获得一个已通过标准化测试流程、随时可以部署的构建产物。
微服务:
微服务架构是一种将单个应用程序构建为一组小型服务的设计方法。每个服务运行在自己的进程中,并通过定义良好的接口,使用轻量级机制(通常是基于 HTTP 的应用程序编程接口 (API))与其他服务通信。微服务围绕业务功能构建;每个服务都服务于单一用途。您可以使用不同的框架或编程语言来编写微服务,并将它们独立部署、作为单个服务部署,或作为一组服务部署。
基础设施即代码:
基础设施即代码(IaC)是一种使用代码和软件开发技术(例如版本控制和持续集成)来配置和管理基础设施的实践。云的 API 驱动模型使开发人员和系统管理员能够以编程方式大规模地与基础设施交互,而无需手动设置和配置资源。因此,工程师可以使用基于代码的工具与基础设施交互,并以类似于处理应用程序代码的方式来处理基础设施。由于基础设施和服务器由代码定义,因此可以使用标准化模式快速部署,并使用最新的补丁和版本进行更新,或以可重复的方式进行复制。
监控和日志记录:
企业通过监控指标和日志,了解应用程序和基础设施性能如何影响最终用户的体验。通过捕获、分类和分析应用程序和基础设施生成的数据和日志,企业可以了解变更或更新对用户的影响,从而深入了解问题或意外变更的根本原因。随着服务必须全天候可用,以及应用程序和基础设施更新频率的增加,主动监控变得日益重要。创建警报或对这些数据进行实时分析,也有助于企业更主动地监控其服务。
沟通与协作:
加强组织内部的沟通与协作是DevOps的关键文化要素之一。DevOps工具的使用以及软件交付流程的自动化,通过将开发和运维的工作流程和职责整合在一起,实现了真正的协作。在此基础上,这些团队围绕信息共享和促进沟通建立了强大的文化规范,例如使用聊天应用、问题或项目跟踪系统以及维基百科。这有助于加快开发人员、运维人员乃至市场营销或销售等其他团队之间的沟通,使组织的各个部门能够更紧密地朝着目标和项目方向前进。
2)学习至少一种后端编程语言:
是的,你至少要学一门编程语言,这样才能编写自动化脚本。如果你能学习多种高难度语言,那就更好了,但也不是所有语言都适合你 😉
我个人推荐的编程语言是:Go、Python、JavaScript (Node.js)
优质课程:
去:
付费课程:https://www.udemy.com/course/go-the-complete-developers-guide/
免费:https://www.youtube.com/watch?v=YS4e4q9oBaU
Python:
付费课程:https://www.udemy.com/course/python-the-complete-python-developer-course/
自由的:
https://www.youtube.com/watch?v=_uQrJ0TkZlc
https://www.youtube.com/watch?v=rfscVS0vtbw
https://www.youtube.com/watch?v=WGJJIrtnfpk
Node.js
付费课程:https://www.udemy.com/course/the-complete-nodejs-developer-course-2/
自由的:
https://www.youtube.com/watch?v=JnvKXcSI7yk
https://www.youtube.com/watch?v=RLtyhwFtXQA
3)了解不同的操作系统概念:
DevOps 工程师必须掌握基本的操作系统概念,因为 DevOps 工程师最终会在开发和/或部署过程中使用不同的操作系统(主要是 Linux)。
DevOps工程师经常需要进行系统级操作系统优化以提高性能和/或根据应用程序需求进行其他优化,在此过程中,掌握进程管理、线程和并发、套接字、I/O管理、虚拟化、内存存储和文件系统方面的知识将非常有用。
优质课程:
有薪酬的:
https://www.udemy.com/course/operating-system-concepts/
自由的:
https://www.youtube.com/watch?v=Snrh580U3tI
https://www.youtube.com/watch?v=mXw9ruZaxzQ
4)学习服务器管理:
作为一名DevOps工程师,我们需要管理各种类型的服务器,而且有趣的是,这并非仅仅一两台服务器,而是一大群服务器(有时甚至超过100台),其中大部分是Linux实例(极少数情况下是其他操作系统)。因此,首先需要对不同的操作系统概念有基本的了解,之后再深入学习Linux系统,这将使你的日常工作更加轻松😉
作为 DevOps 工程师,我们应该掌握动态扩展/缩减服务器的知识,而无需重写配置文件,并向开发人员提出必要的建议,以便应用程序本身符合可扩展性方法。
此外,即使不是一直都需要,你也肯定会在某个时候需要处理网络服务器😁,因此,掌握 Nginx 和/或 Apache 等反向代理服务器的知识和实践经验也是必要的。
优质课程:
有薪酬的:
https://www.udemy.com/course/linux-administration-bootcamp/
https://www.udemy.com/course/nginx-fundamentals/ (nginx)
自由的:
https://www.youtube.com/watch?v=wsh64rjnRas
https://www.youtube.com/watch?v=v_1zB2WNN14
https://www.youtube.com/watch?v=lWjZSgXu5VU (nginx)
5)网络、安全和协议
作为一名 DevOps 工程师,我们必须掌握网络、安全和基本协议方面的知识,我们需要设置 VPC 和安全组/防火墙,并使用各种协议,例如 TCP/IP(传输控制协议/互联网协议)、HTTP(超文本传输协议)、SSL(安全套接字层)、SSH(安全外壳协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等等。
特别是对于网络概念,必要的概念包括 DNS 记录管理、路由、防火墙和端口,以及 ping、ssh、netstat、ncr 和 ip 等基本实用程序、负载均衡和 TLS 加密。
优质课程:
有薪酬的:
https://www.udemy.com/course/introduction-to-computer-networks/
https://www.udemy.com/course/network-security-course/
自由的:
https://www.youtube.com/watch?v=QKfk7YFILws
https://www.youtube.com/watch?v=U_P23SqJaDc
6)学习基础设施即代码:
“基础设施即代码”是指通过机器可读的定义文件来管理和配置计算机数据中心,而不是通过物理硬件配置或交互式配置工具。
我也很喜欢AWS和微软的这个定义:
AWS:
“基础设施即代码”是一种实践,它使用代码和软件开发技术(例如版本控制和持续集成)来配置和管理基础设施。云的 API 驱动模型使开发人员和系统管理员能够以编程方式大规模地与基础设施交互,而无需手动设置和配置资源。因此,工程师可以使用基于代码的工具与基础设施交互,并以类似于处理应用程序代码的方式处理基础设施。由于基础设施和服务器由代码定义,因此可以使用标准化模式快速部署,使用最新的补丁和版本进行更新,或以可重复的方式进行复制。
微软:
基础设施即代码 (IaC) 是一种使用描述性模型管理基础设施(网络、虚拟机、负载均衡器和连接拓扑)的方法,它采用与 DevOps 团队源代码相同的版本控制机制。正如相同的源代码生成相同的二进制文件一样,IaC 模型每次应用时都会生成相同的环境。IaC 是 DevOps 的一项关键实践,并与持续交付结合使用。
基础设施即代码 (IaC) 的出现是为了解决发布流程中环境漂移的问题。如果没有 IaC,团队必须维护各个部署环境的设置。随着时间的推移,每个环境都会变成“雪花”,即无法自动复现的独特配置。环境间的不一致性会导致部署过程中出现问题。对于“雪花”环境,基础设施的管理和维护需要手动操作,这不仅难以追踪,而且容易出错。
简单来说:
基础设施即代码(IaC)是指使用配置文件来管理您的 IT 基础设施。
作为 DevOps 工程师,我们应该了解容器(Docker)、容器编排(Kubernetes、Docker Swarm)、配置管理工具(如 Ansible、Chef、Salt 和 Puppet)、基础设施配置工具(如 Terraform 和 CloudFormation)。
优质课程:
有薪酬的:
https://www.udemy.com/course/docker-mastery/ (Docker)
https://www.udemy.com/course/learn-kubernetes/ (Kubernetes)
https://www.udemy.com/course/learn-ansible/ (Ansible)
https://www.udemy.com/course/chef-fundamentals-a-recipe-for-automating-infrastructure/ (Chef)
https://www.udemy.com/course/learning-salt/ (Salt)
https://www.udemy.com/course/learn-puppet/(木偶戏)
https://www.udemy.com/course/learning-path-automation-with-ansible-puppet-and-salt/ (Ansible、Puppet 和 Salt)
https://www.udemy.com/course/learn-devops-infrastructure-automation-with-terraform/ (Terraform)
https://www.udemy.com/course/aws-cloudformation-master-class/ (Cloud Formation)
自由的:
https://www.youtube.com/watch?v=RSIstPUiEjY (Docker)
https://www.youtube.com/watch?v=Mi3Lx7yk3Hg (Kubernetes)
https://www.youtube.com/watch?v=EcnqJbxBcM0 (Ansible)
https://www.youtube.com/watch?v=LTIjUJEehDA (厨师)
https://www.youtube.com/watch?v=XovHdJZp1X4&list =PLgGQIE0cGrkiDRmJ3YWBKlI2KuYfFvfzV (Salt)
https://www.youtube.com/watch?v=kHD4KQKKP5Y(木偶)
https://www.youtube.com/watch?v=0-z1G0BFZSU (Terraform)
https://www.youtube.com/watch?v=6R44BADNJA8(云的形成)
7)学习一些 CI/CD 工具:
持续集成 (CI):
持续集成 (CI) 是一种开发实践,开发人员频繁地将代码集成到共享代码库中,最好每天多次。每次集成都可以通过自动化构建和自动化测试进行验证。虽然自动化测试并非 CI 的严格组成部分,但通常是 CI 的隐含步骤。
持续交付(CD):
持续交付 (CD) 是一种软件工程方法,团队以短周期的方式开发软件,确保软件可以随时可靠地发布,并且在发布时采用手动方式。其目标是以更快的速度和更高的频率构建、测试和发布软件。
作为一名DevOps工程师,你应该了解、学习和使用以下常用工具:
Jenkins、GitLab CI、CircleCI、Microsoft VSTS、CodeShip、Bamboo、GitHub Actions
优质课程:
有薪酬的:
https://www.udemy.com/course/jenkins-from-zero-to-hero/ (Jenkins)
自由的:
https://www.youtube.com/watch?v=FX322RVNGj4 (Jenkins)
8. 学习监控软件和基础设施:
企业通过监控指标和日志,了解应用程序和基础设施性能如何影响最终用户的体验。通过捕获、分类和分析应用程序和基础设施生成的数据和日志,企业可以了解变更或更新对用户的影响,从而深入了解问题或意外变更的根本原因。随着服务必须全天候可用,以及应用程序和基础设施更新频率的增加,主动监控变得日益重要。创建警报或对这些数据进行实时分析,也有助于企业更主动地监控其服务。
对于 DevOps 工程师来说,收集反馈并快速实施变更至关重要,为此,您应该掌握 Nagios、Prometheus 和 Grafana 等监控工具的相关知识。
优秀课程:
有薪酬的:
https://www.udemy.com/course/setting-up-nagios-4/ (Nagios)
https://www.udemy.com/course/monitoring-and-alerting-with-prometheus/ (Prometheus)
https://www.udemy.com/course/grafana-graphite-and-statsd-visualize-metrics/(Grafana)
自由的:
https://www.youtube.com/watch?v=knCO6wzCW3w (Negios)
https://www.youtube.com/watch?v=9GMWvFcQjYI (普罗米修斯)
https://www.youtube.com/watch?v=sTP7yzXmdFk&list=PLyJqGMYm0vnO9osZ-EBV6iu2l10muE2A-(Grafana)
9)云服务提供商:
我总是说:
没有云就没有DevOps
其实这已经很清楚了,不过为了更清楚地说明,我还是问你一个问题吧?
你会考虑在本地机器上实施 DevOps 吗?
答案当然是否定的,不是吗?!是的,我们不会为本地开发环境考虑 DevOps,但当我们考虑在云端托管应用程序、管理多个应用程序和服务器,以及监控测试环境和生产环境中的应用程序和基础设施时,我们就会非常重视 DevOps。
目前市面上有很多云服务提供商,其中AWS、Azure和GCP这三家占据了最大的市场份额。下面我将介绍你应该学习哪些适用于每家云服务提供商的工具:
AWS:云领导者
CI & CD:AWS CodePipeline、AWS CodeBuild、AWS CodeDeploy、AWS CodeStar
微服务:Amazon Elastic Container Service (ECS)、AWS Lambda、
基础设施即代码:CloudFormation、AWS OpsWorks
配置管理:AWS 系统管理器
策略即代码:AWS 配置
监控和日志记录:Amazon CloudWatch、X-Ray、AWS CloudTrail
平台即服务:AWS Elastic Beanstalk
版本控制:AWS CodeCommit
微软 Azure:
持续集成与持续交付:Azure Pipelines、Azure 测试计划、Azure Artifacts
版本控制:Azure Repos
GCP:
CI/CD:Cloud Build、Tekton、Artifact Registry、Deployment Manager
优质课程:
有薪酬的:
https://www.udemy.com/course/aws-certified-developer-associate/ (AWS)
https://www.udemy.com/course/aws-certified-developer-associate-dva-c01/ (AWS)
https://www.udemy.com/course/aws-certified-devops-engineer-professional-hands-on/ (AWS)
https://www.udemy.com/course/azure-devops-for-beginners/ (Azure)
https://www.udemy.com/course/azure-devops-ci-cd-pipelines/ (Azure)
https://www.udemy.com/course/microsoft-azure-devops/ (Azure)
https://www.udemy.com/course/google-certified-architect-developer-engineer-data-devops/ (GCP)
自由的:
https://www.youtube.com/watch?v=RrKRN9zRBWs (AWS)
https://www.youtube.com/watch?v=PxGGeNEdb3E (AWS)
https://www.youtube.com/watch?v=k1RI5locZE4 (AWS)
https://www.youtube.com/watch?v=tDuruX7XSac (Azure)
https://www.youtube.com/watch?v=QmvAYDc4UUw (Azure)
https://www.youtube.com/watch?v=RfbXgK-T0dM (GCP)
概括:
我认为这是一段漫长而永无止境的旅程,要不断学习,不断进步,不要试图一次性掌握所有内容,而是一次学习一个主题,并将相关主题结合起来学习,这样可以加快学习速度。不要只是纸上谈兵,要动手实践,这才是最重要的,也能帮助你日后找到高质量的工作。
祝你DevOps之旅一切顺利😊
作者简介:
Sandip Das 担任多家科技产品公司/初创企业的资深云解决方案架构师和 DevOps 工程师,同时还拥有“ AWS 容器英雄”的称号。
他始终保持着“持续学习”的状态,乐于与他人分享知识,目前拥有4项AWS认证。桑迪普认为写博客是分享知识的绝佳方式:他在LinkedIn上撰写关于云计算、DevOps、编程等方面的文章。他还在自己的YouTube频道上制作视频教程。
文章来源:https://dev.to/sd031/devops-roadmap-3fic