DevOps/SRE 成长计划

导读:本篇文章讲解 DevOps/SRE 成长计划,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

ea2519c058e2c9a8dfda6abbd1d53693.png

本文最初目标是写给加入我们基础设施团队的新同事看的。个人觉得对所有人都是一个参考,所以就公开了。

以下是正文:

基于工程讨论,而非职位

说到DevOps/SRE成长计划,一开始笔者也把DevOps/SRE当职位来思考,因为只有人才会有“成长计划”。但是越写越发现写不下去。因为笔者无法给DevOps/SRE这两个职位的职责进行定义。

思来想去,个人觉得应该把它们当作工程来看,即DevOps工程和SRE工程。

把它们看作工程而不是职位的好处是避免职位所带来的局限性,也更适合独立讨论。比如A公司把DevOps定义为运维开发,那么,DevOps这个职位上会变成只关注运维系统的开发,很明显这对DevOps工程是非常不利的。

DevOps工程和SRE工程的范围

DevOps工程偏向于整个研发流程的效能及健壮性的建设,而SRE工程偏向于线上环境的可用性的保证(注意:并不是说不变更,系统就可用。强调通过“不变更”来保证系统可用性,是天真)。我倾向于将它们看作一体来建设,而不是独立的两个领域。

DevOps工程的好坏会直接影响SRE工程的好坏。比如DevOps工程中的版本化实践没有做好,会导致SRE无法定位线上运行的服务的版本,进而阻碍线上问题的定位与处理;SRE工程没有做好,又会导致DevOps工程设计之初缺少对可观测性的考虑。

什么叫研发流程的健壮性?指的是研发流程的反脆弱能力及扩展能力。如GitLab不会因为用户增长而挂掉;更换一个Pipeline实现是很容易实现的。

DevOps/SRE作为职位

虽然我们把DevOps/SRE看作工程,但是这些工程始终要分配到不同的人/团队去做。这时,我们该如何做呢?

笔者认为这个问题超出了本文讨论的范围。

DevOps/SRE 成长计划

既然我们已经把DevOps/SRE看作工程,那么,何来成长计划一说?

这要说到写本文的初衷。写本文的初衷是团队最近加入了从业务开发转过来的新人。新人在看到我们用到技术和要解决的问题时,会不知从哪里学起。

说回成长计划,指的是DevOps/SRE这两个工程领域的成长计划,不论你当前的职位是什么。

千万不要以职位来局限自己。

笔者希望这篇文章能帮到新人。让他们有一个大的学习方向。

DevOps/SRE 领域知识/能力清单

DevOps/SRE 涉及的领域非常的广。通过以下清单,我们了解到适合DevOps/SRE领域的人,通常是通才。而不是专才。在我们这个行业,通才往往不受待见。以下是清单内容:

  • 持续集成:各种技术栈构建的方法(比如前端的npm,后端的Maven,android的Gradle等),各种自动化测试的方法(如单元测试、接口测试等)、分布式构建的方法、精准测试的方法;

  • 持续部署:传统的部署方式,云原生的部署方式,各种发布模式(如金丝雀、蓝绿);

  • 研发流程指标收集:首先你得知道有什么指标可以收集,然后知道如何收集成本低,准确度高;

  • 制品管理:不同的技术栈,制品的管理方式不同,比如Nexus;

  • 配置管理:各种集中式的配置管理平台(比如Nacos,Etcd等),各种模板语言(比如go template、Jinjia2),支持编程的配置语言(如Jsonnet),各种技术栈本身的配置方式(比如SpringBoot的application.yaml配置、JVM的配置);

  • 容量规划能力:笔者目前没有太多的经验;

  • 可观测性:日志、指标、调用链三种可观测性的建设,建立SLI可视化的能力,还有与之对应的告警技术;

  • 事故的处理能力:事中处理、事后总结;

  • 流水线领域:指的是流水线的领域知识,比如串并行、执行步骤、触发条件等语义,了解这些后,任何流水线的实现方式的使用都应该能得心应手;

  • Everything as Code:这个领域估计很少人在意,如Terraform、Packer、Pipeline as Code、Config as Code等;

  • 代码管理:GitLab、GitHub等平台的使用、SonarQube等代码静态扫描的使用、分支的管理模式、代码仓库的结构设计;

  • Code Review:了解Code Review的各种实现方式;

  • 安全扫描:代码、制品、依赖等安全扫描;

  • 后端服务架构方面:微服务的架构模式、高可用的知识、分布式一致性知识等;

  • ServiceMesh:Istio、等了解越多越好;

  • 虚拟化技术:容器化、Vagrant、Kubernetes、OpenStack,了解越多越好;

  • 负载均衡:LB领域知识、具体LB技术知识(如F5、Nginx、Kong等);

  • MQ中间件:如Pulsar、Kafka;

  • CDN技术:CDN领域知识、CDN厂商知识;

  • 数据库知识:各种数据库的搭建、配置、高可用等;

  • 操作系统领域:操作系统的安装、调优等;

  • 网络:TCP/IP、DNS、HTTP等;

  • 云厂商:了解越多越好。

以上并不能包括所有,因为还有很多细分的领域,比如AI领域和游戏领域。

最后,还要学习将以上所有的领域的知识进行有机集成,并自助化的能力。如果没有这个能力,以上的知识无法做1+1=3。

该如何学

首先你要有心理准备。不要被上文所列的知识清单所惊讶。并没有人要求你一次性学会所有的领域知识。

但是该如何学呢?

排除掉个人喜好因素,本文写的是工程级别的成长计划,所以,不讨论细分领域。比如行业里有专门搭建、调优Ceph的人,我们可以认为他们是Ceph方向的SRE。

站在工程的角度来看,笔者认为新人可以按以下阶段练习并思考,在每一个阶段分别去熟悉使用到的技术栈:

熟悉持续编译打包

选择一个平台,如Jenkins和GitLab CI。实现当代码提交后,你的应用能自动化编译打包。这个过程,就是流水线的原型了。可以分成以下几个等级:

级别1:通过GUI创建流水线,对源代码进行编译打包,并将包上传到指定的地方集中管理;级别2:通过Pipeline as Code创建流水线,对源代码进行编译打包,并将包上传到指定的地方集中管理;

思考:

  • 通过实践分析以上两级别的区别;

  • 设想当你要支持99个工程的编译打包时,你会怎么做?

  • 多代码仓库集成打包的流水线该如何实现?

熟悉将制品部署到指定的IP的机器上

  • 级别1:通过在GUI上设置,一步步设置部署一台机器上;

  • 级别2:通过Pipeline as Code部署到一台机器上;

  • 级别3:实现幂等的部署,即执行一次和执行多次部署操作后,结果都应该是一样的;

  • 级别4:实现编译打包后,直接部署到目标机器上。

思考:如何将包部署到100台机器上?

接下来所有的阶段,都只能通过as Code的方式实现。

熟悉制品的版本的管理

  • 级别1:手工管理制品及制品与版本之间的关系;

  • 级别2:将制品放到像Nexus这样的平台上;

  • 级别3:将制品的上传与使用集成到前面的步骤中。

思考:什么样的版本号能让你后期更方便地找到制品所对应的源代码?

在持续编译打包过程中加入单元测试

  • 级别1:执行编译打包后,执行单元测试,如果失败,流水线失败,不上传制品;

  • 级别2:测试结果与制品关联起来,只有通过测试的制品,才能够被使用。

思考:

  • 如何实现当a文件变动,只执行a文件相关的单元测试?

  • 当团队成员不会写单元测试,你该如何做?甚至领导都不支持写单元测试呢?

在流水线中加入集成测试

调查团队里多个系统之间是如何集成的,并考虑如何设计自动化集成测试。

熟悉多环境的部署。

  • 级别1:每个环境的制品是分别编译打包的;

  • 级别2:每个环境使用的是同一制品。

本质上,多环境的管理属于配置管理的范畴。本阶段重点是思考配置的管理。

熟悉针对K8s环境的部署

  • 级别1:只通过kubectl apply -f的方式部署一个应用;

  • 级别2:通过Helm或Kustomiz的方式部署一个应用;

  • 级别3:部署100个应用到1个K8s集群;

  • 级别4:部署100个应用到5个K8s集群。

思考:两种部署方式的区别。

熟悉on-call流程

只有你了解一个告警通知如何处理、处理过程需要哪些信息,你才知道如何设计SRE体系及DevOps过程。没有救过火,你是不会对SRE这份工作有体会的。

加入指标监控/告警

包括所有的层次的监控。

  • 级别1:针对VM级别的监控;

  • 级别2:针对K8s环境的监控;

  • 级别3:将告警发送到指定IM上;

  • 级别4:将告警根据不同的规则通知到当时的on-call。

思考:

  • VM与K8s的监控之间的区别;声明式与GUI配置告警规则之间的区别;

  • 日志监控、指标监控、调用链监控之间的关系;

  • 日志监控前提是日志结构化,该如何结构化?

各种发布模式的实践

  • 级别1:滚动更新;

  • 级别2:手工金丝雀发布、手工蓝绿部署;

  • 级别3:自动化金丝雀发布、自动化蓝绿部署;

小结

以上成长计划只是大的轮廓。我总结一下:

对于新人,你大脑里可以将研发流程看成:开发→编译打包 →部署→监控。从开发人员提交代码到git后,后面的阶段,你都要进行自动化。至于如何做到全自动化,就看你的练习和思考了。

成长计划其实就是一个个实现自动化的练习题,促使你去思考,如何做才是更好的。

后记

熟悉我的朋友一看上文的知识清单,就猜到是我的技术栈。所以,上面的清单是有局限性,我也是人,超出我认知的,我可能无法想得到了。但是那份清单本身并不是最重点的。最重点的是练习题背后的思考。

最后,如果你希望加入“持续交付实践指南”微信交流群,可以添加微信号:zhaizhijun0 ,他会拉你入群。

往期好文推荐:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/70951.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!