使用volumeMounts.subPath 属性可用于指定卷内的子路径,而不是其根路径。
-
subPath是volumes挂载的子目录或单个文件,如果volumes挂载的目录下不存在subPath定义的文件(目录或文件),那么就会在volumes对应的目录下创建一个subPath目录。
-
在ConfigMap 或 Secret 中使用 subPath,如果不指定subPath,则会把volumeMounts.mountPath对应目录下的文件都清掉,只存放ConfigMap 或 Secret 定义的文件。
使用场景
- 一个共享卷挂载多个路径
- ConfigMap或Secret挂载到特定目录的特定路径
具体用法
1. 一个共享卷挂载多个路径
volumeMounts:
- mountPath: /var/lib/mysql
name: site-data
subPath: mysql
- name: php
image: php:7.0-apache
volumeMounts:
- mountPath: /var/www/html
name: site-data
subPath: html
volumes:
- name: site-data
persistentVolumeClaim:
claimName: my-lamp-site-data
此例子中PHP 应用的代码和相关数据映射到卷的 html 文件夹,MySQL 数据库存储在卷的 mysql 文件夹中
2. ConfigMap或Secret挂载到特定目录的特定路径
- configmap挂载指定目录的文件
volumeMounts:
- name: nginx-cm
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: nginx-cm
configMap:
name: nginx-conf
- secret挂载到指定目录的文件
会在tmp目录下面存放data文件信息,如果存在则覆盖。如果不存在,则自动创建。
volumeMounts:
- name: mysql
mountPath: /tmp/data
subPath: data
volumes:
- name: mysql
secret:
secretName: mysecret