第 1 章 · 01 DevOps 概念与实践 本节摘要:从四个头部公司的定义中提炼 DevOps 的本质,认识它的收益与反模式,然后进入工程实践的四个关键概念:可变与不可变基础设施、声明式与过程式、配置漂移、GitOps。最后给出部署策略与软件分发的全景图。学完本节,你能在面试中把"什么是 DevOps"讲出层次,也能在工作中识别反模式。 学习目标 说出 DevOps 的核心定义与三大收益,举出三个反模式。 区分可变/不可变基础设施与声明式/过程式两对概念。 解释配置漂移的产生原因与治理手段。 说出 GitOps 的定义、收益与仓库实践。 说出四种部署策略的差异与适用场景。
本节摘要:从四个头部公司的定义中提炼 DevOps 的本质,认识它的收益与反模式,然后进入工程实践的四个关键概念:可变与不可变基础设施、声明式与过程式、配置漂移、GitOps。最后给出部署策略与软件分发的全景图。学完本节,你能在面试中把"什么是 DevOps"讲出层次,也能在工作中识别反模式。
DevOps 没有单一权威定义,但四家公司的定义合起来就是完整拼图:
| 视角 | 核心表述 |
|---|---|
| Amazon | 文化哲学+实践+工具的组合,提升以高速度交付应用与服务的能力 |
| Microsoft | 人、流程、产品的统一,打破开发与运维的孤岛,形成跨学科团队 |
| Red Hat | 让想法从开发到生产的速度提升,开发与运维高频沟通、相互共情 |
| 组织与文化运动,目标是提升交付速度、改善服务可靠性、建立共享所有权 |
提炼共性:DevOps = 文化 + 实践 + 工具,目标是"更快、更可靠地交付价值"。
收益:协作(Collaboration)、交付改进、安全、速度、规模、可靠性。
反模式(常见面试追问,能举反例说明你理解深入):
选型四问:
各领域的代表工具(面试常被要求按领域点名):
| 领域 | 工具 |
|---|---|
| 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 |
换工具怎么决策:换平台必须回答三件事——新平台带来什么(新功能/解决现有局限)、建议基于什么(是否亲测过/有无调研)、切换代价(培训成本、团队时间投入)。
| 维度 | 可变基础设施 | 不可变基础设施 |
|---|---|---|
| 变更方式 | 在现有基础设施上叠加修改 | 每次变更=全新基础设施 |
| 历史 | 随时间积累修改历史 | 无历史包袱 |
| 代表工具 | Ansible、Puppet、Chef | Terraform |
| 一致性 | 服务器间容易产生漂移 | 每次部署完全一致 |
小知识:配置漂移(Configuration Drift)——同一配置的多台服务器,某台被单独打了补丁或改了配置,久而久之各机器渐行渐远,产生难以复现的 bug。治理手段是期望状态配置(DSC):用声明式文件定义系统应有的样子,由工具持续校准(Terraform 即典型)。
IaC 是用声明式方式定义基础设施(或系统架构)的做法,实现方式包括 Azure ARM 模板、跨云厂商的 Terraform 等。
四大收益:
配置→部署 vs 部署→配置:更推荐"配置→部署"——先构建一个镜像,多个部署共用,天然保证环境一致性,减少部署间差异。
定义(GitLab):把应用开发用的 DevOps 最佳实践——版本控制、协作、合规、CI/CD 工具——应用到基础设施自动化上。
收益:对基础设施的细粒度受控访问;谁改了什么一目了然(可追踪)。
GitOps 仓库:不存放应用源代码,只存放测试与部署应用所需的配置与基础设施文件。实践要点:基础设施文件入 Git 版本控制;变更走审查/审批流程。
配置放哪? 应用仓库还是独立仓库?大多数情况建议独立仓库:配置变更不应触发应用 CI/CD,且混放会破坏变更的独立测试与发布。
| 策略 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| Rolling | 逐个/分批滚动替换旧版本 | 平滑、无停机 | 新旧版本并存 |
| Blue-Green | 两套环境整体切换流量 | 回滚极快 | 成本双倍、故障影响全员 |
| Canary | 先放小比例流量灰度 | 影响面小 | 需要真实流量验证 |
| Recreate | 停旧版→启新版 | 简单 | 有停机窗口 |
四种分发方式:
无状态 vs 有状态:无状态应用不在主机存数据,天然适合水平扩展与微服务;有状态应用依赖存储保存状态,典型如数据库。
下一节预告:从"理念"进入"度量"——SRE 如何用 SLI/SLO/错误预算把可靠性变成可管理的数字。