73 lines
2.6 KiB
Markdown
73 lines
2.6 KiB
Markdown
---
|
||
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]]
|