DevOps - 参考路径(Roadmap)

1 - 技能与工具

在企业数字化转型落地过程中,DevOps是企业软件开发模式革新的重要支柱。
现代DevOps的精髓,如何将一个想法尽可能快速地转化为实现盈利。
严格来说DevOps终究是关于文华和交付软件的方式,而不是单纯的采用新工具、配备新的团队或部门。
多年的经验,结合对工具的扎实理解,才能最终成为真正有效的高级DevOps从业者,没有捷径可行,只能循序渐进。

如果只是将DevOps简单理解成“建立一个全自动的数字化流水线高效地将代码从编写环节部署到生产环境中”,也就是CICD环节,
然后结合,大多数公司都使用大同小异的(或者主流的)工具和概念菜单的情况
那么,就能够梳理出一个快速入门的途径。
尽管这个CICD(代码从开发环境到正确部署)仍然是一个充满错误和失败的痛苦过程。

基于需求和经历,对于工具理解和选择,不同行业、公司、部门、团队,甚至工程师个人都有着不同的观点,
相对快速涌现和变化的工具,概念变化要缓慢一些,因此使用工具作为进阶概念的学习辅助。
概念理解到位了,能有效帮助快速获取新的技能和工具,对主要工具有比较充分的理解,并将其结合在一起,构建端到端的流程自动化。
概念、流程和工具,构成了一个基本的合理的知识基础,就能够演变成解决实际问题的技能组合。

如何选择合适的工具?

  1. 相对容易入手和应用
  2. 跨平台
  3. 开源
  4. 当前主流,或者有成为主流趋势的可能

2 - DevOps Roadmap

Roadmap

## 1 - 基础设施即代码(Infrastructure as Code)
- 最佳实践: 计算资源编排工具类的工作(配置、调试、运维)都必须使用代码来完成
- 包括:服务器、存储、网络、数据库等
- 流程:编写基础设施的状态--》 版本控制git---》 Review更改(pull request)--》测试配置改动---》执行配置,调整资源


## 2 - 不可变基础设施(Immutable Infrastructure)
- 不可变部署:永不改变已部署的基础架构
- 不可变:安装一次,不做修改,用过即扔的“一次性产品”
- 不再通过打补丁的方式维护生产环境的“机器”,而是直接重新部署一个包含补丁的“机器”,也就是说,任何修复都必须来自开发环境
- 必要前提: 配置与业务代码分离


## 3 - 版本控制
- Git, 分布式源代码管理控制系统
- 多个团队可以在一个共享的代码库上安全地工作,实现业务敏捷性、加速创新并更快地交付
- 基础知识的强制要求,需要掌握Git的工作原理和常用方法
- 个人品牌: Github、Blog、Sharing and feedback


## 4 - 打包
1. 虚拟化: 虚拟机
2. Docker
  - 进程隔离: "操作系统级虚拟化",每个服务都完全的进程隔离,映射了微服务兴起,将软件分解为单独组件
  - 部署: 提供单一管理界面,隔离依赖,以一致的方式打包、部署和运行各种应用程序
  - 运行管理: 统一界面,允许启动、监控、集中日志、停止和重启不同类型的应用程序,降低运维开销
3. Serverless
  - Docker的局限: 
      - 仍运行在服务器,必须进行管理、补丁等操作;
	  - 如果作为复杂容器编排架构的一部分进行部署,例如K8s,需要较深的专业知识或专职人员
  - Serverless:
      - 不再需要运行和管理运行环境(服务器/容器),只需编写代码,并打包成zip文件,然后上传即可
      - 也就是说,允许在不配置或管理运行环境(服务器/容器)的情况下运行代码
  - Serverless当前的缺陷:
      - 目前无法支持长时间的进程
      - 作为FaaS(功能即服务,Functions-as-a-Service),要运行的应用必须完全分解为微服务的形式
	  - 应用需要与其他复杂的PaaS服务协调
	  - 作为云原生的应用,涉及的bug修复需要在生态系统中修复,繁琐且不直观
  
Docker和Serverless是流行的云原生对应用进行包装、运行和管理的方式。
两者通常是互补的,适用于不同的用例和应用场景。


## 5 - 部署
因为差异性 (主要是创建代码的环境与实际代码运行环境的差异),CICD(代码从开发环境到正确部署)仍然是一个充满错误和失败的痛苦过程。
差异性还包括培训、文化、人员、流程等。

采用“基础设施即代码”,可以很大程度上缓解运行环境上的差异。
- “不可变部署”: 将代码一次性部署到开发环境,克隆运行代码的整个机器环境,然后将其复制到需要的任何位置
- 12因子应用配置原则:所有配置都需要外部化并作为环境变量传递到服务器
- 理想的目标是根本不允许任何在生产环境上的接入,不要“修复”生产环境,而是在开发环境修复并重新部署
- 日志外部化:通过ELK等工具将日志转储到其他地方


## 6 - 一切皆代码
DevOps的核心任务: 为核心开发人员创建一个真正“无障碍、易用”的环境。
1. 版本管理: 开发人员编写微服务--》 添加必要的测试---》 监控代码配置---》 在一些“env.yaml”文件中指定参数
2. CICD流水线: 自动触发构建--》 测试---》 部署(金丝雀发布或蓝绿发布)--》 状态广播

特别注意:
- 包含代码部署流水线在内的所有内容进行版本化的管理
- 改动必须来自开发环境,而不是生产环境

3 - Jenkins

将Jenkins作为进入DevOps的起点。

  • 开源的持续集成和自动化部署工具
  • 了解Jenkins,熟悉Jenkinsfile的结构
  • 遵循pipeline blueocean
  • 通过弹性节点来部署容器化的Jenkins

4 - Q&A

Checklist

DevOps 2019

5 - References

posted @ 2020-09-22 23:46  Anliven  阅读(7)  评论(0编辑  收藏  举报