k8s 挂载子目录

0 阅读1分钟

subPathsubPathExpr 都是在 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 独立子目录