--- title: "Immutable Infrastructure" type: concept tags: [Infrastructure as Code, DevOps, Cloud Native] sources: [devops-maturity-model-from-traditional-it-to-advanced-devops] last_updated: 2026-04-26 --- ## 定义 不可变基础设施(Immutable Infrastructure)是一种基础设施管理范式,服务器一旦部署就不再进行原地修改。当需要更新配置或修复问题时,整个服务器被替换为新版本,而不是在原有服务器上打补丁或更新。 ## 核心原则 1. **不修改已部署的服务器**:任何变更都生成新服务器镜像 2. **完整镜像部署**:使用预构建的镜像完整部署 3. **自动化替换**:通过自动化流水线处理服务器生命周期 4. **环境一致性**:所有环境使用相同的基础镜像 ## 在 DevOps 成熟度模型中的位置 不可变基础设施是 **Phase 4(高度优化阶段)** 的关键特征: > "Immutable infrastructure replaces old servers rather than updating them." 在该阶段,组织通过流水线管理基础设施和代码更新,不再依赖手动服务器修改。 ## 不可变 vs 可变基础设施 | 维度 | 不可变基础设施 | 可变基础设施 | |------|---------------|-------------| | 更新方式 | 替换整个服务器 | 在原服务器上打补丁 | | 一致性 | 所有环境高度一致 | 环境间可能存在差异 | | 回滚难度 | 简单(切换回旧镜像) | 困难(需反向补丁) | | 调试复杂度 | 低(快照确定) | 高(变化累积) | | 部署速度 | 快(预构建镜像) | 慢(需逐步更新) | ## 实现方式 ### 容器化(推荐) ```dockerfile # 每次构建生成新镜像 FROM base-image:latest RUN ./build.sh # 部署时拉取新镜像,不修改原容器 ``` ### 虚拟机镜像 ```bash # Packer 创建镜像 packer build template.json # Terraform 用新 AMI 替换旧实例 terraform apply ``` ### 云基础设施 ```yaml # Kubernetes 中使用 Immutable Pod spec: containers: - image: myapp:v2.0 # 替换镜像而非修改容器 ``` ## 与相关概念的关系 - [[Infrastructure as Code]]:不可变基础设施通常依赖 IaC 工具(Terraform、CloudFormation)实现 - [[CI/CD Pipeline]]:不可变基础设施通过 CI/CD 流水线自动化构建和部署 - [[DevOps Maturity Model]]:是 Phase 4 高度优化阶段的核心特征 - [[Container-Lifecycle-Hardening]]:容器天然支持不可变范式,结合使用可提升安全性和一致性 ## 来源 - [[devops-maturity-model-from-traditional-it-to-advanced-devops]]