DevOps介绍
DevOps 是
- 是一种团队文化和指导工程实践的方法论
- 核心思想是让开发和运维参与到软件开发的整个生命周期
- 通过自动化流程打通开发和运维间的信息流和部门墙
2009 年比利时工程师(Patrick Debois、 帕特里克·德布瓦)提出了DevOps的的概念, 后被广泛引用。
DevOps 是Development和 Operations的组合,也就是开发和运维的 简写。
DevOps 强调运维与开发团队协作、相互协助, 然而传统的模式是开发人员只顾开发程序,运维只负责基础环境管理和代码部署及监控等,其并不是为了一个共同的目标而共同实现最终的目的
而 DevOps 则强调团队作战,即无论是开发、 运维还是测试,都为了最终的代码发布、 持续部署和业务稳定而付出各自的努力, 从而实现产品设计、开发、测试和部署的 良性循环,实现产品的最终持续交付。
DevOps 是针对企业中的研发人员、运维人员和测试人员的工作理念,是指导他们在应用开发、代码部署和质量测试等业务落地的整条生命周期中的协作 和沟通的最佳实践理念,DevOps 强调整个组织的合作以及交付和基础设施变更的自动化、从而实现持续集成、持续部署和持续交付,DevOps 主要理念如 下:
- 代码托管(gitlab、svn)
- 项目管理(jira、禅道、redmine、Confluence、Teambition)
- 运维平台(猪齿鱼/腾讯蓝鲸/其它自研运维平台)
- 持续交付(Jenkins/瓦力/gitlab/gitee/其它自研交付工具)
核心阶段
- 版本控制
- 目的是管控提交的代码 打tag
- 方便回滚
- 持续集成
- 编译
- 持续交付
- 代码部署到测试环境
- 运行测试用例、端到端的验证测试
- 持续部署
- 部署到生产环境 包括 基础设施 配置管理
- 发布策略
- 灰度发布
- 金丝雀发布
- 持续监控
- 提供性能 错误 日志 监控
- 自动化的告警策略
源码管理
- SVN集中式代码管理
- git 分布式代码管理
Git 工作流
- 本地工作目录、暂存区、本地仓库
- git add 提交到暂存区、git commit 将暂存区提交到本地仓库、git push 提交到远端
- git pull 更新本地仓库 = git fetch + git merge
Git 代码管理最佳实践
- 代码审核 重复率 覆盖率
持续集成(CI)
- 在代码提交时⾃动触发构建
- 包括:编译、单元测试、代码安全扫描、质量扫描、构建制品等
- 代表工具:Jenkins、GitHub Action、GitLab CI、腾讯云 CODING、阿里云效
持续交付
⾃动部署到测试环境
- 运行⾃动化测试:Selenium ⾃动化测试、GUI 测试、白盒测试、黑盒测试
- 由于工作流是连续发生的,所以当持续交付过程出错时,可以立刻找到对应的 git 提交
持续部署(CD)
⾃动部署到生产环境
误区:在持续集成(CI)中完成持续部署的工作,例如在Jenkins 里通过 kubectl apply 完成部署操作
常见工具:FluxCD、Argo CD、Harness、Spinnaker
复杂的发布策略:分批次发布、A/B Test、灰度、金丝雀发布等
云原生 DevOps 的进一步补充
应用定义
云原生应用安装包 - helm
容器化和编排
不可变制品和容器管理 每一个代码提交 对应一个镜像
基础设施即代码IaC(Infrastructure as Code)
以代码的方式管理云基础
发布 部署 基础设施 以前是shell脚本去管理
表示基础设施即代码,是DevOps中的一个重要实践。
IaC的主要思想是将服务器、网络、存储、安全等基础架构层面的配置和设置过程,以代码的形式进行表达和管理
可观测性
日志、监控、告警、分布式追踪
灾备
集群、数据库备份 velero
DevOps 全流程案例
源码
- 提交MR
- git源码仓库(源码)
- heml chart仓库(应用定义)
持续集成
- 单元测试
- sornarqube代码扫描 -- 质量门禁
- 安全性
- 可维护性
- 覆盖率
- kaniko 构建镜像
- 导出tarball
- Grype
- 镜像扫描
- 扫描安全漏洞
- crane
- 将tarball 转换为标准的镜像
- 然后将镜像推送到 harbor
- 生成制品
- 使用commit进行命名 并且生成唯一的镜像tag
- harbor
- 通过签名进行识别 防止人为推送
- 其实harbor 也自带镜像扫描 但是属于后置扫描
持续部署
- argo
- 会检查镜像签名 只会使用签名的镜像去部署
- imgae update 实时watch镜像是否存在更新
- 自动修改helm chart中标注的image
- 然后使用helm 部署
持续监控
- grafna
- promethues
- loki
总结
软件对比
OPS部分职责:
- 1.通过监控、告警、人工值守等方式保证应用程序的 7*24的可用性。
- 2.系统选型、基础环境初始化、web服务高可以架构 设计及落地、网络配置、监控系统部署、日志收集系 统部署、链路追踪系统部署、CICD系统部署、运维工 具或自动化运维平台开发及维护等。
- 3.监控及告警配置、故障处理、故障报告整理及汇报、 故障文档总结、故障复盘、优化方案及故障跟进等。
- 4.数据库、ES、kafka、redis、zookeeper等中间件 的集群部署、监控配置、故障处理、性能优化及维护。
- 5.对资源利用率进行统计、提交资源使用汇总清单、 提交下财年IT预算等。
DEV部分职责:
- 1.业务架构设计、开发语言及框架选型、中间件选型、数据库表结构设计及数据库初始化等。
- 2.业务代码编写,使用java、python、go等语言,编写项目 中的各服务。
- 3.提高代码质量,基于监控工具试下链路性能分析,对响应 慢的服务或页面进行优化、提高代码质量。
- 4.APP客户端兼容性(安卓、IOS等),兼容IE浏览器、手机浏 览器、各型号手机等。
- 5.bug修复及新功能开发,基于监控工具、APP探针、URL监 控工具、日志收集工具等收集、统计并分析bug,并进行修 复,在618、双十一等节假日开发新的功能。