一、概述
有时,在单个 Pod 中共享卷以供多方使用是很有用的。volumeMounts.subPath 属性可用于指定所引用的卷内的子路径,而不是其根路径。
官方文档:https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#using-subpath
二、使用场景
- 一个共享卷, 挂载多个路径。
- ConfigMap或Secret挂载到特定目录的特定路径, 而 该目录下已经有其他文件且不希望被覆盖掉。
三、共享卷中使用, 挂载多个路径
作为configmap/secret使用时,subPath代表configmap/secret的子路径。
【示例1】挂载目录,hostPath
【示例2】挂载目录,pvc
如果使用PVC模板就不用手动创建PVC了,示例如下:
【示例3】共享单个文件那么如果 subPath 不是文件夹,而是一个文件,又该如何解决呢?同样的道理,只需要通过 subPath 指定出该文件即可,注意 subPath 要使用相对目录。具体如下所示:
【结论】以宿主机上的文件为准,会覆盖pod里原先默认的的文件内容。
四、ConfigMap 和 Secret 中使用 subPath
作为configmap/secret使用时,subPath代表configmap/secret的子路径。如果不使用subPath会把容器里原本的文件(volumeMounts.mountPath对应的目录)都清空,自会把ConfigMap 和 Secret 的文件放在volumeMounts.mountPath对应的目录下。
【示例1】ConfigMap
【示例1】Secret
【结论】会在/tmp目录下面存放data文件信息,如果存在则覆盖。如果不存在,则自动创建。
最后对volumeMounts.subPath来一个总结:
- subPath其实就是volumes挂载的子目录或单个文件,是不是目录和单文件,取决于subPath在volumes挂载的目录下是否存在subPath定义的文件(文件或目录),如果不存在,则会volumes对应的目录下创建一个subPath目录。
- 如果ConfigMap 和 Secret 中使用 subPath,如果不指定subPath,则会把volumeMounts.mountPath对应的目录下的文件都清掉,然后只存放ConfigMap 或者 Secret 定义的文件。
关于volumeMounts.subPath的用法就先到这里了,有疑问的小伙伴,欢迎给我留言哦,后续文章更精彩,请小伙伴耐心等待哦~