1. subPath字段的作用
在Linux中,將目錄A掛載到目錄B,則目錄B原有的文件都會(huì)被目錄A下的文件覆蓋撬腾。
那么在k8s中,如何將configmap掛載到容器中某個(gè)目錄的文件中呢恢恼?答案是使用subPath民傻。
subPath可以將configMap和secret作為文件掛載到容器中而不覆蓋掛載目錄下的文件。
vim configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap
namespace: dev
data:
info: |
username:admin
password:123456
info2: zhangssssssssssssssssssssssssss
vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod1
namespace: dev
spec:
containers:
- name: mydocker
image: zengfeng666/mydocker:1.0
command: ["/bin/sh", "-c", "while true; do sleep 2; done;"]
volumeMounts:
- name: config
mountPath: /workspace
volumes:
- name: config
configMap:
name: configmap
vim pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod2
namespace: dev
spec:
containers:
- name: mydocker
image: zengfeng666/mydocker:1.0
command: ["/bin/sh", "-c", "while true; do sleep 2; done;"]
volumeMounts:
- name: config
mountPath: /workspace/info
subPath: info
- name: config
mountPath: /workspace/info2
subPath: info2
volumes:
- name: config
configMap:
name: configmap
可以看到厅瞎,因?yàn)閜od1中是將configmap直接掛載到了容器的workspace目錄饰潜,由于Linux的目錄掛載特性,原來(lái)的workspace目錄下的文件將會(huì)被掛載過(guò)來(lái)的目錄下(可以將configmap看成一個(gè)目錄和簸,因?yàn)槊總€(gè)key都是一個(gè)文件)的文件所覆蓋彭雾,因此workspace中只有configmap中的info和info2文件。如果不想被覆蓋锁保,則要以文件的方式進(jìn)行掛載薯酝,如pod2.yaml中所示,注意mountPath和subPath的寫法爽柒,subPath此時(shí)指的就是configMap中的key吴菠,也就是文件名。
image.png
image.png
2.items字段的作用
假如不想以key名作為配置文件名可以引入items 字段浩村,在其中逐個(gè)指定要用相對(duì)路徑path替換的key:
volumes:
- name: config
configMap:
name: configmap
items:
- key: info # 原文件名(key的名稱)
path: userinfo # 修改之后的文件名(key的名稱)
- key: info2
path: userinfo2
items還有一個(gè)作用做葵,就是只有items下的key對(duì)應(yīng)的文件會(huì)被掛載到容器中。
比如pod1.yaml中不想把info和info2都掛載到workspace目錄下心墅,而只需要掛載info到workspace目錄下酿矢,則可以將pod1.yaml的volumes字段修改為:
volumes:
- name: config
configMap:
name: configmap
items:
- key: info
path: info