linux怎么查看本机内存大小
310
2022-09-10
k8s configMap 中 subPath 字段和 items 字段
1. subPath字段的作用
在Linux中,将目录A挂载到目录B,则目录B原有的文件都会被目录A下的文件覆盖。
那么在k8s中,如何将configmap挂载到容器中某个目录的文件中呢?答案是使用subPath。
subPath可以将configMap和secret作为文件挂载到容器中而不覆盖挂载目录下的文件。
话不多说,直接看一个例子。
制作案例镜像:
dockerfile:
FROM busyboxWORKDIR /workspaceRUN touch a.txt b.txt c.txt
切换到dockerfile目录下执行:
docker build -t mydocker:latest .docker tag mydocker:latest zengfeng666/mydocker:1.0docker push zengfeng666/mydocker:1.0
configmap.yaml
apiVersion: v1kind: ConfigMapmetadata: name: configmap namespace: devdata: info: | username:admin password:123456 info2: zhangssssssssssssssssssssssssss
pod1.yaml
apiVersion: v1kind: Podmetadata: name: pod1 namespace: devspec: 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
pod2.yaml
apiVersion: v1kind: Podmetadata: name: pod2 namespace: devspec: 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
$ kubectl create -f pod1.yaml$ kubectl create -f pod2.yaml$ kubectl get pods -n devNAME READY STATUS RESTARTS AGEpod1 1/1 Running 0 2m20spod2 1/1 Running 0 14s
可以看到,因为pod1中是将configmap直接挂载到了容器的workspace目录,由于Linux的目录挂载特性(可以看这篇:什么是挂载,Linux挂载详解),原来的workspace目录下的文件将会被挂载过来的目录下(可以将configmap看成一个目录,因为每个key都是一个文件)的文件所覆盖,因此workspace中只有configmap中的info和info2文件。如果不想被覆盖,则要以文件的方式进行挂载,如pod2.yaml中所示,注意mountPath和subPath的写法,subPath此时指的就是configMap中的key,也就是文件名。
2. items字段的作用
假如不想以key名作为配置文件名可以引入items 字段,在其中逐个指定要用相对路径path替换的key:
volumes: - name: config configMap: name: configmap items: - key: info # 原文件名(key的名称) path: userinfo # 修改之后的文件名(key的名称) - key: info2 path: userinfo2
items还有一个作用,就是只有items下的key对应的文件会被挂载到容器中。
比如pod1.yaml中不想把info和info2都挂载到workspace目录下,而只需要挂载info到workspace目录下,则可以将pod1.yaml的volumes字段修改为:
volumes: - name: config configMap: name: configmap items: - key: info path: info
参考:
k8s官网 卷 - 使用 subPath
Kubernetes subPath | 容器原目录下的文件全被覆盖了,什么鬼?
Kubernetes的ConfigMap详解
k8s官网 ConfigMap
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~