第 1 章 · 01 DevOps 概念与实践


文档摘要

第 1 章 · 01 DevOps 概念与实践 本节摘要:从四个头部公司的定义中提炼 DevOps 的本质,认识它的收益与反模式,然后进入工程实践的四个关键概念:可变与不可变基础设施、声明式与过程式、配置漂移、GitOps。最后给出部署策略与软件分发的全景图。学完本节,你能在面试中把"什么是 DevOps"讲出层次,也能在工作中识别反模式。 学习目标 说出 DevOps 的核心定义与三大收益,举出三个反模式。 区分可变/不可变基础设施与声明式/过程式两对概念。 解释配置漂移的产生原因与治理手段。 说出 GitOps 的定义、收益与仓库实践。 说出四种部署策略的差异与适用场景。

第 1 章 · 01 DevOps 概念与实践

本节摘要:从四个头部公司的定义中提炼 DevOps 的本质,认识它的收益与反模式,然后进入工程实践的四个关键概念:可变与不可变基础设施、声明式与过程式、配置漂移、GitOps。最后给出部署策略与软件分发的全景图。学完本节,你能在面试中把"什么是 DevOps"讲出层次,也能在工作中识别反模式。

学习目标

  1. 说出 DevOps 的核心定义与三大收益,举出三个反模式。
  2. 区分可变/不可变基础设施与声明式/过程式两对概念。
  3. 解释配置漂移的产生原因与治理手段。
  4. 说出 GitOps 的定义、收益与仓库实践。
  5. 说出四种部署策略的差异与适用场景。

一、什么是 DevOps

DevOps 没有单一权威定义,但四家公司的定义合起来就是完整拼图:

视角 核心表述
Amazon 文化哲学+实践+工具的组合,提升以高速度交付应用与服务的能力
Microsoft 人、流程、产品的统一,打破开发与运维的孤岛,形成跨学科团队
Red Hat 让想法从开发到生产的速度提升,开发与运维高频沟通、相互共情
Google 组织与文化运动,目标是提升交付速度、改善服务可靠性、建立共享所有权

提炼共性:DevOps = 文化 + 实践 + 工具,目标是"更快、更可靠地交付价值"。

收益:协作(Collaboration)、交付改进、安全、速度、规模、可靠性。

反模式(常见面试追问,能举反例说明你理解深入):

  • 单人垄断:只有一个人被允许合并所有人的代码。
  • 环境差异:生产环境不实施开发环境有的安全措施。
  • 流程迷信:规定"周五不能上线"之类的教条,而不是评估具体变更的风险。
  • 数字崇拜:把"每天部署 20 次"当目标本身——正确目标应是"需要部署时随时能部署",而不是为数量牺牲质量。

二、工具选型与各领域工具地图

选型四问:

  1. 成熟度:成熟稳定还是前沿尝鲜?团队能承受多大不确定性?
  2. 社区:社区规模决定问题能否快速得到解答、生态是否繁荣。
  3. 架构:有 agent 还是无 agent?有主控节点还是无主控(masterless)?
  4. 学习曲线:上手成本 vs 团队现有技能。

各领域的代表工具(面试常被要求按领域点名):

领域 工具
CI/CD Jenkins、Circle CI、Travis、Drone、Argo CD、Zuul
基础设施供给 Terraform、CloudFormation
配置管理 Ansible、Puppet、Chef
监控告警 Prometheus、Nagios
日志 Logstash、Graylog、Fluentd
代码审查 Gerrit、Review Board
覆盖率 Cobertura、JaCoCo
问题跟踪 Jira、Bugzilla
容器与编排 Docker、Podman、Kubernetes、Nomad

换工具怎么决策:换平台必须回答三件事——新平台带来什么(新功能/解决现有局限)、建议基于什么(是否亲测过/有无调研)、切换代价(培训成本、团队时间投入)。

三、两个关键范式对照

可变 vs 不可变基础设施

维度 可变基础设施 不可变基础设施
变更方式 在现有基础设施上叠加修改 每次变更=全新基础设施
历史 随时间积累修改历史 无历史包袱
代表工具 Ansible、Puppet、Chef Terraform
一致性 服务器间容易产生漂移 每次部署完全一致

声明式 vs 过程式

  • 声明式(Declarative):写出期望的最终状态,工具自己想办法达成。如"我要两台服务器"。
  • 过程式(Procedural):写出到达最终状态的每一步。如"写个循环,每次迭代创建一台,跑两遍"。
  • 声明式工具:Terraform、Puppet、CloudFormation、Ansible;过程式代表:Chef。

小知识:配置漂移(Configuration Drift)——同一配置的多台服务器,某台被单独打了补丁或改了配置,久而久之各机器渐行渐远,产生难以复现的 bug。治理手段是期望状态配置(DSC):用声明式文件定义系统应有的样子,由工具持续校准(Terraform 即典型)。

四、基础设施即代码(IaC)

IaC 是用声明式方式定义基础设施(或系统架构)的做法,实现方式包括 Azure ARM 模板、跨云厂商的 Terraform 等。

四大收益:

  • 供给/修改/删除全流程自动化;
  • 基础设施纳入版本控制,可快速回滚;
  • 可用自动化测试与代码审查验证基础设施质量;
  • 减少重复劳动。

配置→部署 vs 部署→配置:更推荐"配置→部署"——先构建一个镜像,多个部署共用,天然保证环境一致性,减少部署间差异。

五、GitOps

定义(GitLab):把应用开发用的 DevOps 最佳实践——版本控制、协作、合规、CI/CD 工具——应用到基础设施自动化上。

收益:对基础设施的细粒度受控访问;谁改了什么一目了然(可追踪)。

GitOps 仓库:不存放应用源代码,只存放测试与部署应用所需的配置与基础设施文件。实践要点:基础设施文件入 Git 版本控制;变更走审查/审批流程。

配置放哪? 应用仓库还是独立仓库?大多数情况建议独立仓库:配置变更不应触发应用 CI/CD,且混放会破坏变更的独立测试与发布。

六、部署策略

策略 做法 优点 缺点
Rolling 逐个/分批滚动替换旧版本 平滑、无停机 新旧版本并存
Blue-Green 两套环境整体切换流量 回滚极快 成本双倍、故障影响全员
Canary 先放小比例流量灰度 影响面小 需要真实流量验证
Recreate 停旧版→启新版 简单 有停机窗口

七、软件分发与架构常识

四种分发方式:

  • 源码:构建脚本随版本库分发,用户自行构建。优点:可快速切换版本;缺点:用户机器需装构建工具。
  • 归档:全部文件打成一个 tar 包。优点:一个文件拿全;缺点:更新要重复整套流程,依赖多时不合适。
  • :按 OS 包格式(RHEL 系 RPM)分发,标准包管理命令可装/卸/更新。优点:依赖管理完善;缺点:要维护包仓库。
  • 镜像:VM 或容器镜像,自带运行所需一切。优点:预装完整、隔离度高;缺点:需要镜像构建与优化知识。

无状态 vs 有状态:无状态应用不在主机存数据,天然适合水平扩展与微服务;有状态应用依赖存储保存状态,典型如数据库。

小结

  • DevOps 三要素:文化、实践、工具;收益是速度+可靠性+协作。
  • 两对范式:可变/不可变(改机器 vs 换机器)、声明式/过程式(写目标 vs 写步骤)。
  • 漂移治理:期望状态配置,让声明式工具持续校准。
  • GitOps:基础设施也走版本控制+审查流程。
  • 部署四式:Rolling 平滑、蓝绿快切、金丝雀灰度、Recreate 简单。

下一节预告:从"理念"进入"度量"——SRE 如何用 SLI/SLO/错误预算把可靠性变成可管理的数字。


发布者: 作者: 灏天文库 转发
评论区 (0)
U