K8S subPath使用

860 阅读1分钟

subPath的使用方法一共有两种:

  1. 将configMap和secret作为文件挂载到容器中而不覆盖挂载目录下的文件
  2. 同一个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