subPath的使用方法一共有两种:
- 将configMap和secret作为文件挂载到容器中而不覆盖挂载目录下的文件
- 同一个pod中多容器挂载同一个卷时提供隔离
一 configmap/secret 挂载
前置条件:
(1)容器/home/work/config目录下,有db.conf 和 web.py文件
(2)configmap中有两个key(redis_host & config.py)
metadata:
name: showcase-config
data:
redis_host: localhost
config.py: |-
HOST = '10.100.122.32'
USERNAME = 'root'
PASSWORD = '123456'
PORT = 3306
场景1
-
操作: 将configmap挂载在容器/home/work/config目录下(不使用subpath)。
-
结果: (1)/home/work/config中有redis_host和config.py两个文件,db.conf 和 web.py全部被覆盖
(2)修改configmap中的config.py或者redis_host后,容器中的文件同步更新
场景2
-
操作: 将configmap/redis_host文件挂载到/home/work/config/db.conf文件 (使用subpath)
-
结果: (1)容器中/home/work/config/db.conf中为redis_host内容,web.py保持不变
(2)修改configmap中的redis_host后,容器中db.conf内容不变
二 pvc挂载
前置条件
Pod中有两个容器Container1 和 Container2
场景1
- 操作 (1)将PVC挂载在Container1 /home/work/data目录(不使用subpath),创建文件cc1.txt
(2)将PVC挂载在Container2 /home/work/data目录(不使用subpath), 创建文件cc2.txt
- 结果 在Container1中和Container2中都能看到cc1.txt和cc2.txt(存储共享)
场景2
- 操作 (1)将PVC挂载在Container1 /home/work/data目录,使用subpath c1
(2)将PVC挂载在Contianer2 /home/work/data目录,使用subpath c2
- 结果 (1)Container1中/home/work/data目录下为空,创建文件dd1.txt,只能看见dd1.txt
(2)Container2中/home/work/data目录下为空,创建文件dd2.txt, 只能看见dd2.txt
(3)重新将pvc挂载在container1 和container2中,不使用subpath 看见/home/work/data下有:
-
- 文件:cc1.txt cc2.txt
-
- 文件夹: c1-dd1.txt
-
- 文件夹: c2-dd2.txt