2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

DevOps & SRE 必备技能清单

  • 2018-10-16
  • 本文字数:5650 字

    阅读完需:约 19 分钟

导读

  • 这个列表并非详尽无遗,只是列举了技术基础、必须知道的技能和一些随机的想法。可以用它们作为一个清单来评估你自己或其他人,或者为下一次面试 DevOps/SRE(Site Reliability Engineers,网站可靠性工程师)工作做准备。补充下,这个清单是比较个人的想法。

免责声明

这个清单由 Sahil Sharma 作者共同完成。我们已经发布了它的第一个版本( DevOps 和网站可靠性工程师必备技能清单)。本文是最新的版本更新。

下一步是什么?更了解 DevOps 生态系统:

  • 首先,一定要了解文化要点的重要性:在这里( 15 点 DevOps 检查表 )可以读到更多信息。
  • 您应该掌握 *nix 系统并且很好地理解 Linux 发行版的工作原理。
  • 为产品设置选择一个操作系统。不需要掌握每一个操作系统,这会让你的工作陷入困境,选择其中一个并掌握它。
  • 能轻松使用终端,可能有一些 GUI 来管理服务器,但是无论如何,必须热爱终端,它更快、更安全,坦白说,一旦掌握了用起来会更容易。
  • 如何获取 CPU/ 系统信息(cat /proc/version,/proc/cpuinfo,uptime,等。)
  • cron 作业如何运作。在特定日期 / 时间 / 月设置 cron 作业。
  • 了解在机器上运行的操作系统是什么(cat /etc/lsb-release)
  • 了解不同的 *nix 操作系统之间的区别,以及了解在机器上运行的操作系统(例如 cat /etc/lsb-release)
  • shell 之间的区别:sh/dash/bash/ash/zsh
  • 如何设置和取消设置 ENV 变量。导出的 ENV 变量是临时的,如何导出永久的变量?
  • 什么是 shell 配置文件:〜/.bashrc,.bash_profile,.environment .. 如何为程序初始化文件“添加”设置?
  • 了解 Vim,其配置(.vimrc)及其一些基本提示是必须的。
  • 日志如何在 *nix 系统中运行,什么是日志记录级别以及如何使用日志管理工具(rsyslog,logstash,fluentd,logwatch,awslogs ..)
  • swapping 如何工作。swappiness 是什么。(swapon -s,/proc/sys/vm/swappiness,sysctl vm.swappiness ..)
  • 能轻松使用脚本语言轻松自如。Bash 是必须了解的(其他脚本语言也是非常有用的,如 Python,Perl ..)。
  • 掌握有用的命令,例如进程监控命令(ps,top,htop,atop ..),系统性能命令(nmon,iostat,sar,vmstat..)和网络故障排除和分析(nmap,tcpdump,ping,traceroute,airmon,airodump ..)。
  • 你的备份策略是什么?如何测试备份的可靠性?
  • 你知道 ext4,ntfs,fat?知道联合文件系统(Union FS)吗?
  • 如何在系统上查看 / 设置网络配置?
  • 如何在具有不同子网的计算机上设置静态 / 动态 IP 地址?(提示:CIDR)
  • 使用网络数据包分析来分析和了解网络的工作原理:tcpdump,Wireshark ..
  • 你熟悉 OSI 模型和 TCP/IP 模型的规范吗?TCP 和 UDP 有什么区别?你知道 vxlan 吗?
  • 如何设置防火墙(iptables,至少知道 ufw):设置规则,列出规则,路由流量,阻止协议 / 端口 ..
  • 如何查看 / 设置 / 备份路由器设置?
  • DNS 如何工作?如何设置 DNS 服务器(Bind,Unbound,PowerDNS,Dnsmasq ..)?递归(recursive)和权威(authoritative)DNS 有什么区别?如何排除 DNS 故障(nslookup,dig ..)
  • 熟悉 DNS 和 A,AAAA,C,CNAME,TXT 记录
  • 当你在浏览器中点击 google.com 时会发生什么?从浏览器的缓存、本地 DNS 缓存、本地网络配置(hosts 文件)、路由、DNS、网络、Web 协议中,缓存系统到 Web 服务器(如果深入分析,最基本的问题也很难回答)。
  • 熟悉 CDN 提供商(fastly,Akamai 等)
  • 熟悉 SSL/TLS 的工作原理以及数字证书的工作原理(https)
  • 了解 SSL 证书(需要加密)
  • 熟悉更安全的协议和工具:TLS,STARTTLS,SCP,SSH, 

    SFTP,FTPS ..
  • 了解 PPTP,OpenVPN,L2TP/IPSec 之间的区别
  • 学习为域设置记录集(可以使用 Route53 或 CloudFlare 等托管云服务)
  • SSH 如何工作,如何调试它,如何生成 ssh 密钥以及无密码登录到其他计算机
  • 什么是 init 系统?你知道 Systemd(自 15.04 以来由 Ubuntu 使  

    用),Upstart(由 Ubuntu 开发),SysV ..
  • 用任何软件的源代码编译它(gcc,make 和其他相关内容)
  • 如何通过终端用不同的格式压缩 / 解压缩文件(主要是:tar/tar.gz)
  • 如何设置 Web 服务器(Apache,Nginx ..)
  • 学习使用“awk,sed,sort,uniq”操作 Nginx/Apache 日志文件
  • Nginx 和 Apache 有什么区别?什么时候使用 Nginx?什么时候使用 Apache?在同一个 Web 应用程序中,何时以及如何同时使用它们?
  • 如何设置反向代理(Nginx ..)
  • 如何设置缓存服务器(Squid,Nginx,Varnish ..)
  • 如何设置负载均衡器(HAproxy,Nginx ..)
  • 如何为您的微服务建立 API 网关(Ambassador,Kong,Traefik,Nginx ..)
  • 熟悉 Systemd 以及如何使用 systemctl 和 journalctl 等命令分析和管理服务
  • 熟悉 OAuth、SAML、Auth0 集成
  • 熟悉 RESTful API,Webhooks,GraphQL,gRPC
  • 确保 ES 集群安全(XPack(商业),OpenSource:ReadOnlyREST,Search Guard)
  • 使用 snapshot API 或 esdump 进行 ES 备份(快照和增量)(注意:需要 nodejs/npm)
  • 使用 DB 备份
  • 学习 Python(pip + setup.py)和 BASH。您是否开始使用 Golang 作为脚本语言?尝试一下吧。
  • 发展云计算技能。从选择云基础架构提供商开始:Amazon Web Services,Google Cloud Platform,Digitalocean,Microsoft Azure。或者使用 OpenStack 创建自己的私有云。
  • staging 服务器怎么样?单元测试的测试策略是什么?端到端?真的需要 staging 服务器吗?Google 下“staging servers must die”。
  • 阅读有关 PaaS/Iaas/Saas/CaaS/FaaS/DaaS 和无服务器架构的信息
  • 了解如何通过 CLI 中的 Cloud Shell,或你的程序中的 Cloud SDK,来使用和配置云资源
  • 了解如何使用至少一个配置管理和远程执行工具(Ansible,Puppet,SaltStack,Chef 等)。您的选择应基于以下标准:语法,性能,模板语言,推拉模型,性能,架构,与其他工具的集成,可伸缩性,可用性等等。
  • 用于 image 构建的 Packer
  • 将 Jenkins 集成到 CI/CD 中
  • 设置 Consul(用于服务发现)
  • 开始研究“基础架构即代码”(infrastructure as code),以及基础架构配置自动化工具,如 Terraform 和 Packer
  • 开始研究容器和 Docker。容器是底层架构(cgroups 和 namespaces),它是如何工作的?
  • 开始熟悉基本的 Docker 命令(logs/inspect/top/ps/rm)。另外得研究 docker hub(push/pull image)
  • 开始研究容器编排工具:Docker Swarm,Kubernetes,Mesosphere DC/OS,AWS ECS
  • 阅读有关无状态和有状态应用程序的知识
  • 学习为您的应用程序构建小型的 docker image(alpine 比较合适)。仅安装所需的包就够了。
  • 了解默认运行服务的最常用端口号(如:SSH(22),Web(80),HTTP/S(443)等)
  • 从分布式角度学习网络(在容器世界中建立网络)。利用分布式系统中的 8 个谬论,让自己轻松应对。
  • 了解 L4/L7 负载均衡器。
  • 了解如何确保代理服务器和反向代理服务器的安全(Nginx,Traefik,Ambassador ..),并了解它们的网络系统是如何工作的。
  • 熟悉帮助创建可分发和可移植开发环境的工具(例如:Vagrant 和 Docker)。
  • 部署应用程序时,管理私密信息。Hashicorp Vault 会帮助你。
  • 了解 AWS SQS,Google PubSub 或其它替代方案。
  • 熟悉 Kafka,AWS Kinesis 或其它替代方案。
  • 了解 AWS RDS,大多数时候 Ops 发现很容易将普通任务委派给服务提供商以避免额外的工作,但这会带来一些费用。
  • 如果你在使用 Kubernetes,那么了解它的所有组件和工作。
  • 学习如何首先处理 K8s 内置功能,然后学习 Helm/Istio。
  • 了解监控的方式和内容(从操作系统和应用程序的角度来看)。
  • 一旦到了合适的阶段,接着会需要追踪(Tracing)来帮助理解和挖掘,并且应用程序需要直接支持它
  • 如果您正在处理(大)数据工程相关应用程序,那么得熟悉 Hadoop,HBase,Zookeeper,Spark 以及如何设置相关集群
  • 学习如何根据应用需求设置和调整 Redis,如何添加身份验证。
  • 了解应用程序的性质:CPU 密集型,内存密集型,I/O 密集型,然后了解如何相应地进行处理。
  • 学习根据需要在不同类型的数据库之间进行选择:SQL,NoSQL,TSDB,图形数据库 ..
  • 学习管理 IAM 角色 / 权限以及如何管理不同用户的密钥(AWS IAM,GCP IAM ..)。
  • 如果您喜欢分享并帮助其他人解决遇到过的问题,请将代码发布到 GitHub。
  • 学习对基础架构和应用程序进行基准测试以填补空白。
  • 不要直接去执行。先可视化最终目标、画图、与开发人员详细讨论、毫不犹豫地提问、让问题彻底变得愚蠢。
  • 不时做小型演示或 PoC 以便更好地理解。
  • 你熟悉 IDE(Sublime Text,Atom,Eclipse ..)吗?
  • 深入了解 DB(MySQL 或任何其它你喜欢的数据库)。
  • 了解 Redis/Memcache 以及类似工具。
  • 了解微服务架构的优缺点,并开始构建类似的架构。
  • 了解如何配置和使用持续集成和持续交付工具,如 Jenkins,Travis CI,Buildbot,GoCd。将这些工具与其它工具(如 Selenium,构建工具,配置管理软件,Docker,云供应商的 SDK 等)集成是非常有帮助的。
  • 学习分布式版本控制系统 Git 及其基本命令(pull/push/commit/clone/branch/merge/logs 等)。了解 git 工作流程。你知道如何将 Git 存储库恢复到以前的提交吗?
  • 如何使用 SSH 密钥。尝试使用 Github,Bitbucket 或 Gitlab .. 来配置对 repo/account 的无密码访问。
  • 熟悉内核版本的混乱以及如何修补它们。
  • 了解如何生成校验(md5,SHA ..)以验证任何文件的完整性。
  • 了解单体(Monolithic)和微服务(Microservices)架构之间的区别。
  • 如何实现零宕机部署?制定回滚、自修复、自动扩展的策略是什么?
  • 了解可扩展性和高度分布式系统,如何让它们一直保持运行状态?
  • 熟悉 API 和服务:RESTfull,RESTful-like,API 网关,Lambda 函数,serverless 计算,SOA,SOAP,JMS,CRUD ..
  • 如何确保基础架构、网络和运行的应用程序的安全?
  • 你知道什么是 ChatOps 吗?是否尝试过使用一个已知框架? Hubot,Lita,Cog?
  • 了解如何设置、配置和使用某些监控系统(Nagios,Zabix,Sensu,Prometheus ..)
  • 无论你做什么都“记录下来”,无论多么粗糙,做吧。稍后,你会感谢自己的。
  • 制作小的代码脚本以方便使用,记下命令或片段(通过 StackOverflow,Github Gists 或其它在线记事板),它会帮助你得到想要的东西。
  • 让 Google,StackExchange,Quora 和其它专业论坛成为您的朋友。
  • 读,读,读。在 Twitter/StackOverflow 上提问。
  • 参加会议。可以加入我们当地的聚会,如 DevOpsLinks Community 会议(班加罗尔) DevOpsLinks Community 会议(伦敦) DevOpsLinks Community 会议(巴黎)。如果想组织当地的聚会,请联系我们,我们将为您提供帮助!
  • 与同一领域的研究员交谈并讨论您的问题。通过社区学习。
  • 加入我们的 Slack 频道并询问您的所有(菜鸟级)问题,都没问题!我们都是从开始起步的。
  • 不要试图解决所有问题。永远记住一件事:没有人是一座孤岛。你不能做、学习、实现一切。要了解对于手头的任务最重要的是什么。
  • 阅读 DevOps 词汇表(请 Google 它)
  • 关注开源项目(Kubernetes/Docker 等)或者让您感到兴奋的东西。
  • 关注来自社区的志同道合的人,并了解最新的科技趋势。
  • 尝试搭建良好的开发实践以及坚实的架构。
  • 了解如何在生产级别进行扩展。
  • 了解如何在生产服务器中实时调试和跟踪运行的应用程序。
  • 关注一些合适的科技公司的技术博客(我们跟随:Google/Uber/Quora/Github/Netflix)。这是您可以直接从专家那里学习的地方,并有机会看到他们解决任何问题的方法。
  • 浏览一些新闻聚合器,如 Reddit,hackernews,medium 等。
  • 在 twitter 上关注志同道合的开发人员和技术公司。 (我总是阅读文章和观看谈话 / 会议,事后剖析(post-mortems)是我最喜欢的内容。我也关注一些 github 库看看我使用的技术发生了什么。)
  • 加入 DevOpsLinks Kaptain Shipped !我们相信你会学到很多东西,即使你是专家,你仍然不得不更多地学习。
  • 阅读各种与技术相关的博客并订阅 DevOps Newsletters。顺便说一句,我们有一份出版物,您可以提交您的文章并与社区分享。
  • 了解开源以及如何为开源项目做出贡献。
  • 如果系统出现问题,您应该能够进行事后剖析。详细记录出现了什么问题,以及如何防止它再次发生。
  • 尝试学习 StackOverflow 的专家如何解决问题。永远记住,方法是不断变化的,不像基础知识总是保持不变。
  • 读书。
  • 最后这点也很重要...... 不要假设任何事情,永远不要把现实视为理所当然,总是去尝试并享受旅程。

如果您拥有以上大部分技能,则可以确保您具备 DevOps、SRE 和系统工程知识的先决条件。

你无法一次性学习所有这些,但是具备这样一个思维模式是主要的。 即使去熟悉所有这些也肯定需要时间,但俗话说旅程很有趣。 你会失败很多次,并从错误中吸取教训,不要重蹈覆辙。

永远记住,我们都是学生。我们通过碰撞和试验来学习。不要羞于失败,因为这就是学习的方式。

我们希望听到您的反馈和建议:

  • 显然,针对这个清单的反馈和建议。
  • 您想学习哪种技术?(请与我们分享)。我们将推出一个 DevOps 在线学院,我们希望您成为我们的第一个贡献者,所以分享您的建议,不要害羞!
  • 其他的东西,我们将与您在未来分享,我们将很高兴听到您的建议和反馈!

进一步联系

我们会很高兴听到您的建议,并愿意为这个清单增加其它观点。

为了取得联系,请订阅我们的一个或多个在线社区,因为这是了解最新信息并与我们以及社区保持联系的好方法:

DevOpsLinks ,一个来自世界各地的 DevOps 专业人士和从业者的社区。 

Shipped ,一个专注于无服务计算、FaaS 和其他有趣主题的技术的社区。 

Kaptain :一个 Kubernetes 社区中心,主要包括手工策划的时事通讯、团队聊天、培训和更多(即将推出)。 

如果您喜欢这篇文章,请通过订阅上述一个或多个在线社区与我们保持联系。

请为我们鼓掌并分享给您的粉丝。

原文链接:  The Must Know Checklist For DevOps & Site Reliability Engineers

感谢张婵对本文的审校。

2018-10-16 18:1525345
用户头像

发布了 43 篇内容, 共 35.3 次阅读, 收获喜欢 136 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

慢查询 MySQL 定位优化技巧,从10s优化到300ms

程序知音

Java MySQL 数据库 后端技术 MySQL 数据库

MySQL DDL执行方式-Online DDL介绍

京东科技开发者

Java MySQL 数据 ddl DML

火山语音7篇论文入选国际顶会Interspeech

科技热闻

写给自己的react面试题总结

beifeng1996

前端 React

“密评”,听说过没

华为云开发者联盟

云计算 网络安全 开发 企业号九月金秋榜

人脸关键点的应用场景及重难点解析丨Dev for Dev 专栏

声网

算法 Dev for Dev 人工智能’

传媒产业的数字化怎样被小程序影响

Geek_99967b

小程序

来自大厂 10+ 前端面试题附答案(整理版)

loveX001

JavaScript 前端

RabbitMQ怎么保证消息不被重复消费以及消息的可靠性

知识浅谈

RabbitMQ 9月月更

最新MLPerf基准测试:基于阿里云GPU云服务器的AIACC在图像识别封闭式场景下夺冠

阿里云弹性计算

图像识别 GPU实例 AIACC

可恶,又是个线上问题

艾小仙

Java ShardingSphere TiDB

一文读懂Jina生态的Dataclass

Jina AI

多模态机器学习 多模态 跨模态

阿里前端面试题

loveX001

JavaScript 前端

大数据调度平台Airflow(五):Airflow使用

Lansonli

airflow 9月月更

羊了个羊闯关游戏开发(链改代币分红)

开发微hkkf5566

校招 | StarRocks首次Open Day报名ING!

StarRocks

数据库

【网络安全】记一次杀猪盘渗透实战

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

linux入门学第一天

乌龟哥哥

9月月更

算法基础(三)| 二分图解及代码模板

timerring

算法 二分查找 9月月更

Pipy 同一 IP 多个 SSL 域名

Flomesh

Service Mesh 服务网格

峰会倒计时3天!硅谷传奇投资人登陆专场,围炉共话分析型数据库的爆发式增长

StarRocks

数据库

云原生数字化转型与金融信创建设,鱼和熊掌可兼得

BoCloud博云

云计算 云原生 信创

XML简单基础详解(I)

吉师职业混子

9月月更

2022-09-21:有n个动物重量分别是a1、a2、a3.....an, 这群动物一起玩叠罗汉游戏, 规定从左往右选择动物,每只动物左边动物的总重量不能超过自己的重量 返回最多能选多少个动物,求一个

福大大架构师每日一题

算法 rust 福大大

react面试如何回答才能让面试官满意

beifeng1996

React

浅析python爬虫(上)

吉师职业混子

9月月更

本地服务调用K8S环境中的SpringCloud微服务实战

程序员欣宸

Kubernetes 9月月更

带你认识全新的华为云IoT路网数字化服务

华为云开发者联盟

云计算 后端 物联网 交通 企业号九月金秋榜

创作者能从设计师那学到什么样的设计原则

宇宙之一粟

读书笔记 设计 读书感悟 设计原则 9月月更

Qt|控件QPushButton讲解

中国好公民st

qt 按钮 9月月更

DevOps & SRE 必备技能清单_语言 & 开发_Aymen El Amri_InfoQ精选文章