kubernetes 中VolumeMounts.subPath的巧妙用法

1,070 阅读1分钟

官方文档

使用volumeMounts.subPath 属性可用于指定卷内的子路径,而不是其根路径。

  • subPath是volumes挂载的子目录或单个文件,如果volumes挂载的目录下不存在subPath定义的文件(目录或文件),那么就会在volumes对应的目录下创建一个subPath目录。

  • 在ConfigMap 或 Secret 中使用 subPath,如果不指定subPath,则会把volumeMounts.mountPath对应目录下的文件都清掉,只存放ConfigMap 或 Secret 定义的文件。

使用场景

  1. 一个共享卷挂载多个路径
  2. 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