Kubernetes 存储体系全景
存储架构
应用 Pod
│ volumeMount
▼
Volume(存储卷)
│
├── emptyDir(临时,Pod 生命周期)
├── hostPath(节点本地路径)
├── configMap / secret(配置数据)
├── PersistentVolumeClaim(持久化存储)
│ │
│ ▼
│ PersistentVolume(存储资源)
│ │ CSI 驱动
│ ▼
│ 存储后端(NFS/Ceph/云盘/本地SSD)
└── projected(多源合并)Volume 类型
emptyDir(临时存储)
yaml
volumes:
- name: cache
emptyDir:
medium: Memory # 使用内存(tmpfs),默认为磁盘
sizeLimit: 1Gi用途:容器间共享数据、缓存、临时文件
hostPath(节点路径)
yaml
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock
type: Socket # File | Directory | Socket | CharDevice | BlockDevice⚠️ 安全风险:Pod 可以访问节点文件系统,生产环境谨慎使用
projected(多源合并)
yaml
volumes:
- name: all-in-one
projected:
sources:
- configMap:
name: app-config
- secret:
name: app-secret
- serviceAccountToken:
path: token
expirationSeconds: 3600
- downwardAPI:
items:
- path: labels
fieldRef:
fieldPath: metadata.labels存储类型对比
| 类型 | 持久化 | 共享 | 性能 | 适用场景 |
|---|---|---|---|---|
| emptyDir | ❌ | Pod 内 | 高(内存) | 缓存、临时数据 |
| hostPath | ✅ | 单节点 | 极高 | 日志、监控 |
| NFS | ✅ | 多节点 | 中 | 共享文件 |
| Ceph RBD | ✅ | 单节点 | 高 | 数据库 |
| Ceph CephFS | ✅ | 多节点 | 中高 | 共享存储 |
| 云盘(EBS/PD) | ✅ | 单节点 | 高 | 云原生数据库 |
| 本地 SSD | ✅ | 单节点 | 极高 | 高性能数据库 |
访问模式
| 模式 | 缩写 | 说明 |
|---|---|---|
| ReadWriteOnce | RWO | 单节点读写 |
| ReadOnlyMany | ROX | 多节点只读 |
| ReadWriteMany | RWX | 多节点读写 |
| ReadWriteOncePod | RWOP | 单 Pod 读写(K8s 1.22+) |
回收策略
| 策略 | 说明 |
|---|---|
| Retain | 保留数据,需手动清理 |
| Delete | 自动删除存储资源 |
| Recycle | 清空数据后重用(已废弃) |
存储生态
本地存储:
Local Path Provisioner(开发/测试)
TopoLVM(生产级本地存储)
分布式存储:
Rook + Ceph(最流行的云原生存储)
Longhorn(轻量级分布式块存储)
OpenEBS(云原生存储)
云厂商:
AWS EBS / EFS
GCP Persistent Disk / Filestore
Azure Disk / File
NFS:
NFS Subdir External Provisioner