Files
nexus/wiki/concepts/Immutable-Infrastructure.md
2026-04-26 16:02:45 +08:00

73 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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]]