subPath
和 subPathExpr
都是在 Kubernetes 中挂载卷的一部分内容到容器内路径的机制,但它们之间有关键的区别:
✅ 共同点:
两者都是让你挂载 卷中的某个子目录或文件,而不是整个卷。
🔹 subPath
-
是 静态的。
-
指定的是固定的目录或文件名。
-
不支持变量或模板。
-
一旦定义,所有 Pod 都会使用这个固定路径。
示例:
yamlCopyEditvolumeMounts:
- name: config
mountPath: /etc/config/config.toml
subPath: config.toml
说明:只挂载
config
卷中的config.toml
文件。
🔸 subPathExpr
-
是 动态的。
-
支持使用环境变量,例如
$(PODNAME)
。 -
每个 Pod 挂载路径可以不同。
-
更灵活,适合按 Pod 做目录隔离。
示例:
yamlCopyEditvolumeMounts:
- name: data
mountPath: /logs
subPathExpr: logs/kangaroo_runner/$(PODNAME)
说明:每个 Pod 会将
logs/kangaroo_runner/<PODNAME>
这个子目录挂载到/logs
,从而实现 每个 Pod 独立的日志目录。
📌 总结对比表:
特性
subPath
subPathExpr
类型
静态
动态
是否支持变量
❌ 不支持
✅ 支持(如 $(PODNAME)
)
用途
精确挂载一个文件或目录
按 Pod、Job 动态生成路径
常见场景
加载配置文件
每个 Pod 独立子目录