DevOps检查清单


文档摘要

DevOps 检查清单 此列表并不详尽,仅列举了技术基础、必须了解的技能和一些随机想法。您可以将其用作自检或评估他人,或者为下一次 DevOps/SRE 面试做准备。 列表是主观的。 [ ] 应该掌握nix系统,并且对Linux发行版的工作原理有很好的理解。 [ ] 要熟悉终端。虽然您可能有GUI来管理服务器,但无论如何您都必须热爱终端,因为它是快速、安全的,并且一旦掌握了它,实际上更容易使用。 [ ] 如何获取CPU/系统信息(例如: , , 等)。 [ ] 了解cron作业如何工作。在特定日期/时间/月份设置cron作业。 [ ] 如何知道您正在机器上运行的操作系统(例如: )。 [ ] 学习不同nix操作系统之间的差异,以及如何知道您正在机器上运行的操作系统(例如: )。

DevOps 检查清单

此列表并不详尽,仅列举了技术基础、必须了解的技能和一些随机想法。您可以将其用作自检或评估他人,或者为下一次 DevOps/SRE 面试做准备。

  • 列表是主观的。
  • 应该掌握*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等。
  • 如何设置和取消环境变量。导出环境变量是临时的,如何永久导出变量?
  • 了解shell配置文件:~/.bashrc, .bash_profile, .environment 等。如何“源”设置程序初始化文件。
  • 掌握Vim及其配置(.vimrc)和一些基本技巧是必须的。
  • 在*nix系统中如何进行日志记录,什么是日志级别,以及如何使用日志管理工具(如rsyslog, logstash, fluentd, logwatch, awslogs等)。
  • 了解交换分区的工作原理。什么是交换偏好。(例如:swapon -s, /proc/sys/vm/swappiness, sysctl vm.swappiness等)。
  • 如何查看/设置系统的网络配置。
  • 如何在具有不同子网的机器上设置静态/动态IP地址?(提示:CIDR)。
  • 如何查看/设置/备份您的路由器设置?
  • DNS是如何工作的?如何设置DNS服务器(如Bind, Unbound, PowerDNS, Dnsmasq等)?递归DNS与权威DNS有什么区别?如何排查DNS问题(如nslookup, dig等)。
  • 熟悉DNS和A、AAAA、C、CNAME、TXT记录。
  • SSH是如何工作的,如何调试它,以及如何生成SSH密钥并实现无密码登录到其他机器。
  • 如何设置Web服务器(如Apache, Nginx等)。
  • Nginx和Apache之间的区别是什么?什么时候使用Nginx?什么时候使用Apache?您可以在同一Web应用程序中同时使用它们,什么时候以及如何使用?
  • 如何设置反向代理(如Nginx)。
  • 如何设置缓存服务器(如Squid, Nginx等)。
  • 如何设置负载均衡器(如HAProxy, Nginx等)。
  • 什么是初始化系统?您是否知道Systemd(Ubuntu自15.04以来使用)、Upstart(由Ubuntu开发)、SysV等。
  • 熟悉Systemd,以及如何使用systemctljournalctl等命令分析和管理服务。
  • 从源代码编译任何软件(如gcc, make及其他相关工具)。
  • 如何通过终端以不同的格式压缩/解压缩文件(主要是:tar/tar.gz)。
  • 如何设置防火墙(至少iptables, ufw):设置规则,列出规则,路由流量,阻止协议/端口等。
  • 了解默认运行的服务的主要端口号(如:SSH(22),Web(80),HTTP/S(443)等)。
  • 学习如何在生产服务器上实时调试和跟踪运行的应用程序。
  • 熟悉脚本语言。Bash是必须的(其他脚本语言如Python, Perl等也很有用)。
  • 至少学习一种配置管理和远程执行工具(如Ansible, Puppet, SaltStack, Chef等)。您的选择应基于标准,如语法、性能、模板语言、推送模式与拉取模式、架构、与其他工具的集成、可扩展性、可用性等。
  • 学习如何配置和使用持续集成和持续交付工具,如Jenkins, Travis CI, Buildbot, GoCd等。将这些工具与其他工具(如Selenium, 构建工具, 配置管理软件, Docker, 云提供商SDK等)集成是有帮助的。
  • 学习分布式版本控制系统Git及其基本命令(如pull/push/commit/clone/branch/merge/logs等)。理解Git工作流。你知道如何将Git仓库恢复到之前的提交吗?
  • 如何使用SSH密钥。尝试Github, Bitbucket或Gitlab来配置无密码访问仓库/帐户。
  • 熟悉像Vagrant这样的工具,帮助您创建可分发和便携的开发环境。
  • 开始了解基础设施即代码和基础设施自动化供应工具,如Terraform和Packer。
  • 开始了解容器和Docker。其底层架构(如cgroups和命名空间)。它是如何工作的?
  • 开始熟悉基本的Docker命令(如logs/inspect/top/ps/rm)。也了解一下Docker Hub(push/pull镜像)。
  • 开始了解容器编排工具:Docker Swarm, Kubernetes, Mesosphere DC/OS, AWS ECS。
  • 深入了解数据库(如MySQL或其他你喜欢的)。
  • 了解Redis/Memcache等类似工具。
  • 您的备份策略是什么?如何测试备份的可靠性?
  • 您知道ext4, ntfs, fat吗?您了解联合文件系统吗?
  • 发展您的云计算技能。从选择一个云基础设施提供商开始:Amazon Web Services, Google Cloud Platform, DigitalOcean, Microsoft Azure。或者使用OpenStack创建自己的私有云。
  • 阶段服务器呢?您的测试策略是什么?单元测试?端到端测试?您真的需要阶段服务器吗?搜索“阶段服务器必须死”。
  • 了解PaaS/IaaS/SaaS/CaaS/FaaS/DaaS及无服务器架构。
  • 学习如何使用和配置Cloud Shell从命令行使用云资源,或者使用Cloud SDK从程序中使用云资源。
  • 您是否熟悉OSI模型和TCP/IP模型规范?TCP和UDP之间有什么区别?您知道vxlan吗?
  • 掌握有用的命令,如进程监控命令(ps, top, htop, atop等),系统性能命令(nmon, iostat, sar, vmstat等)以及网络故障排除和分析(nmap, tcpdump, ping, traceroute, airmon, airodump等)。
  • 熟悉HTTP状态码(2xx, 3xx, 4xx, 5xx)。
  • 您是否熟悉IDE(如Sublime Text, Atom, Eclipse等)?
  • 网络数据包分析:tcpdump, Wireshark等。
  • 当您在浏览器中访问google.com时到底发生了什么?从浏览器缓存,本地DNS缓存,本地网络配置(hosts文件),路由,DNS,网络协议,缓存系统到Web服务器(最基础的问题,但如果深入则很难)。
  • 熟悉内核版本的混乱情况以及如何修补它们。
  • 熟悉SSL/TLS的工作原理和数字证书的工作原理(https)。
  • 熟悉安全协议:TLS, STARTTLS, SSL, HTTPS, SCP, SSH, SFTP, FTPS等。
  • 了解PPTP, OpenVPN, L2TP/IPSec之间的区别。
  • 如何生成校验和(如md5, SHA等)以验证任何文件的完整性。
  • 了解单体架构和微服务架构之间的区别。
  • 了解微服务架构的优点和缺点,并开始构建类似的架构。
  • 您知道什么是ChatOps吗?您是否尝试过使用其中任何一个已知框架?如Hubot, Lita, Cog等。
  • 您如何实现零停机部署?您的回滚、自愈、自动扩展策略是什么?
  • 熟悉API和服务:RESTful, 类似RESTful, API网关, Lambda函数, 无服务器计算, SOA, SOAP, JMS, CRUD等。
  • 阅读有关无状态和有状态应用的文章。
  • 阅读有关DevOps词汇的文章(可以在Google上搜索)。
  • 如何保护您的基础设施、网络和运行中的应用程序?
  • 学习如何设置、配置和使用一些监控系统(如Nagios, Zabbix, Sensu, Prometheus等)。
  • 阅读有关开源的内容,以及如何为开源项目做出贡献。更多信息:http://jvns.ca/blog/2016/10/26/a-few-questions-about-open-source/
  • 如果系统出现问题,您应该能够进行事后分析。详细记录发生了什么以及我们如何防止未来再次发生。
  • 尝试学习StackOverflow专家解决问题的方法。始终记住,技术总是在变化,但基础知识永远不会改变。
  • 让Google, StackOverflow, Quora和其他专业论坛成为您的朋友。
  • 尝试建立良好的开发实践和稳健的架构。
  • 学习如何在生产环境中进行扩展。
  • 关注开源项目(如Kubernetes/Docker等)或您感兴趣的其他项目。
  • 在邮件列表/公共论坛/技术聚会中提问/疑虑/问题,并从中学习。
  • 关注社区中有相同兴趣的人,并及时了解最新的技术趋势。
  • 关注一些技术公司的工程博客(我们关注:Google/Uber/Quora/Github/Netflix)。这是您可以直接从专家那里学习并看到他们解决问题方法的地方。
  • 浏览一些聚合网站,如Reddit, Hacker News, Medium等。
  • 在Twitter上关注志同道合的开发者和技术公司。我总是阅读文章和观看会议/演讲,事后分析是我最喜欢的内容之一。我也关注一些GitHub仓库,看看我所使用的那些技术的发展。
  • 阅读各种技术相关的博客并订阅DevOps新闻通讯。
  • 如果可能的话,参加当地的聚会和会议。您将有机会从资深人士和其他人那里学到很多东西。
  • 学习关于可扩展性和高度分布式的系统。如何保持它们始终在线?

资源:

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


作者与出处
原作者: Tikam02
来源:Tikam02
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: Tikam02 转发
评论区 (0)
U