我正在寻找一种方法来挂载基于标签选择器的配置。
随着时间的推移,我将创建新的配置Map,我将用“intendeedtarget”=“MainApp”标记。配置是从json文件创建的,文件名作为关键字。
例如,一个类似于以下内容的yml(但可以正常工作):
volumeMounts:
- name: appconfigs
mountPath: /appconfigs
volumes:
- name: appconfigs
configMap:
selector:
matchLabels:
intendeedtarget: MainApp
也就是说,随着时间的推移,新配置将自动装载到“MainApp”的运行pod中。
我已经让它在运行的pod中将单个配置作为文件挂载:
containers:
- name: {{Name}}
image: {{Image}}
ports:
- containerPort: 80
volumeMounts:
- name: appconfigs
mountPath: /appconfigs
volumes:
- name: appconfigs
configMap:
name: {{ConfigName}}
这将挂载应用于configmap的json,作为/appconfigs文件夹中的一个单独文件。
我现在的目标是在/appconfigs中挂载所有标签为“intendeedtarget”=“MainApp”的配置Map。
有什么建议吗?
一个额外的问题,有人知道如何将configmap标记为一个命令吗?
布雷尔
2条答案
按热度按时间vptzau2j1#
因此,简短版本为no,无法指定整个volumeMounts范围,但您可以使用以下解决方法:
initContainers:
我相信它会这样工作:
volume
,类型为emptyDir
,命名为appconfigs
(只是为了便于讨论,名称并不重要) 挂载在您希望挂载的位置。initContainer
要么包含kubectl
二进制文件,要么下载一个,要么使用许多kubernetesapi客户端库中的一个,甚至只包含curl
的一个副本。1.使用
ServiceAccount
标记,它查询您选择的ConfigMap
。1.它提取它们的有效负载,根据需要对其进行处理,然后将文件写入
appconfigs
的挂载点1.现在,
containers:
将启动,但它将在共享卷挂载中找到配置文件,正如您指定的那样f87krz0w2#
有一段时间了,但我还是被同样的问题卡住了。mdaniel提出的解决方案很好用,但kiwigrid也有一个项目可以为你做同样的事情:https://github.com/kiwigrid/k8s-sidecar .您可以将容器添加为边车,如kubernetes docs中所述.
的配置是通过env变量完成的,例如,您可以用途:
其他选项可以在回购协议中找到。