卷 Volume 基础
本教程共 65 篇 · 第 34 篇 · 更新于 2026-08-14 · 约 9 分钟阅读
本节目标:理解容器里为什么需要卷,认识 emptyDir、hostPath、configMap、secret 四种基础卷,知道每种卷的数据活多久、适合干什么、有哪些坑。
容器里的文件系统是临时的。Pod 一重启,容器里写的东西全没了。两个容器想共享点文件,也没法直接互通。Kubernetes 用”卷(Volume)“解决这个问题。
卷是 Pod 级别的存储。它挂载到 Pod 里的容器,生命周期跟 Pod 绑定,但跟容器本身不完全一样。这点很关键,下面会反复提到。
34-1 为什么需要卷
先记住一个比喻:容器像一次性纸杯,用完就扔;卷像托盘,杯子换了这个托盘还在(部分类型)。Pod 里的多个容器可以挂同一个卷,从而共享数据。
在 Pod 的 YAML 里,卷分两处声明:spec.volumes 定义”有哪些卷”,spec.containers[].volumeMounts 定义”容器把卷挂到哪个路径”。
apiVersion: v1
kind: Pod
metadata:
name: vol-demo
spec:
containers:
- name: writer
image: busybox
command: ["sh", "-c", "echo hello > /data/msg; sleep 3600"]
volumeMounts:
- name: shared
mountPath: "/data"
volumes:
- name: shared
emptyDir: {}
34-2 emptyDir 临时卷
emptyDir 最简单。Pod 被调度到节点时,这个卷才创建,初始是空的。Pod 在该节点运行期间,容器读写它都正常。
它的生命周期跟着 Pod 走:Pod 被删,里面的数据也没了。容器崩溃重启不会删 Pod,所以数据还在。
volumes:
- name: cache
emptyDir: {}
TipemptyDir 适合做临时缓存、程序运行中间产物、同 Pod 多容器共享。不适合存任何你想长期保留的东西。它默认用节点磁盘,也可以设
medium: Memory改用内存,速度更快但算进内存限额。
34-3 hostPath 节点路径卷
hostPath 直接把节点上的真实目录或文件挂进 Pod。比如挂 /var/log 让容器读节点日志。
volumes:
- name: hostlogs
hostPath:
path: "/var/log"
type: Directory
这个卷的生命周期跟节点绑定,不跟 Pod。Pod 删了,节点上的文件还在。
WarninghostPath 会绕过 Kubernetes 的调度隔离,把 Pod 跟某台具体机器绑死,还有权限风险。生产里尽量少用,监控、日志采集这类 DaemonSet 场景才常见。普通应用别随便挂节点路径。
34-4 configMap 卷
把 ConfigMap 当卷挂进来,每个键变成一个文件。配置更新后,文件内容会被 kubelet 自动同步(用 subPath 挂载时例外)。
volumes:
- name: config
configMap:
name: game-demo
containers:
- name: app
image: nginx
volumeMounts:
- name: config
mountPath: "/etc/game"
readOnly: true
这种方式比环境变量好:能自动更新,能挂整段配置。配置类数据优先用卷,而不是环境变量。
34-5 secret 卷
secret 卷跟 configMap 卷几乎一样,只是数据源换成 Secret。每个键也是一个文件,内容默认是 Base64 解码后的明文。
volumes:
- name: secret-vol
secret:
secretName: db-secret
containers:
- name: app
image: myapp
volumeMounts:
- name: secret-vol
readOnly: true
mountPath: "/etc/secret"
前面章节提过:Secret 挂成卷后,kubelet 把它放在节点的 tmpfs 内存里,不会写进持久磁盘,Pod 删了副本就清掉。这比放环境变量里更安全一点。
NoteconfigMap 和 secret 卷都不支持用
subPath接收更新。要热更新,挂整个目录,别只挂单个文件。
34-6 四种卷怎么选
简单一句话总结:
- 要临时共享、不在乎持久,用
emptyDir。 - 要读节点本地的文件(如日志),用
hostPath,但慎用。 - 要注入不敏感配置,用
configMap卷。 - 要注入密码令牌,用
secret卷。
后面几章会讲更持久的存储:PV、PVC、StorageClass。它们才是真正” Pod 删了数据还在”的方案。