定义
在 K8s 中,VolumeMount 是用来挂载定义好的存储卷的。
其中有个属性 subPath
是这样描述的:
Field | Description |
---|---|
subPath string |
Path within the volume from which the container’s volume should be mounted. Defaults to “” (volume’s root). |
subPath
所定义的路径,指的是 卷(Volume)内的子路径,用于将卷内 subPath 所对应的目录或文件,挂载到容器的挂载点。不指定此参数时,默认是将卷的根路径中内容进行挂载。
使用场景
挂载一个存储卷中的多个路径
假设一个容器有多个路径需要挂载,如 YouTrack 需要挂载 data
、conf
、logs
和 backups
四个路径。
或由于某些原因,创建出来的存储卷根路径中不是空的,但容器要求所挂载的路径中不能有其他内容,如 mysql5.7 创建有状态服务问题。
此时就有了 subPath 的用武之地。
以上面 YouTrack 为例,存储卷相关配置如下:
volumeMounts:
- name: volume-d3gekc
mountPath: /opt/youtrack/data
subPath: youtrack/data
- name: volume-d3gekc
mountPath: /opt/youtrack/conf
subPath: youtrack/conf
- name: volume-d3gekc
mountPath: /opt/youtrack/logs
subPath: youtrack/logs
- name: volume-d3gekc
mountPath: /opt/youtrack/backups
subPath: youtrack/backups
可以仅创建一个存储卷,然后将 YouTrack 持久化所需的四个路径,通过 subPath 挂载到该卷的不同子路径中。
挂载 ConfigMap 中的一个文件
在 K8s ConfigMap 一文中,我们也提到了 subPath 的用法,可以用来将 ConfigMap 中指定的 key 挂载到对应的挂载点,如:
volumeMounts:
- name: nginx-config-vol
mountPath: /etc/nginx/nginx.conf # 也可挂载到文件
subPath: nginx.conf # 挂载到文件时,需设置子路径
即将名为 nginx-config-vol
的 volume 中的 nginx.conf
key 对应内容,以文件形式挂载到容器中 /etc/nginx/nginx.conf
路径。
需注意:在 ConfigMap 中使用 subPath 将影响 ConfigMap 内容变化时的自动更新。