kubernetes 按标签选择器列出的卷装入配置Map

zmeyuzjn  于 2022-12-03  发布在  Kubernetes
关注(0)|答案(2)|浏览(125)

我正在寻找一种方法来挂载基于标签选择器的配置。
随着时间的推移,我将创建新的配置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标记为一个命令吗?
布雷尔

vptzau2j

vptzau2j1#

因此,简短版本为no,无法指定整个volumeMounts范围,但您可以使用以下解决方法:initContainers:
我相信它会这样工作:

  1. Pod会声明一个volume,类型为emptyDir,命名为appconfigs(只是为了便于讨论,名称并不重要) 挂载在您希望挂载的位置。
  2. initContainer要么包含kubectl二进制文件,要么下载一个,要么使用许多kubernetesapi客户端库中的一个,甚至只包含curl的一个副本。
    1.使用ServiceAccount标记,它查询您选择的ConfigMap
    1.它提取它们的有效负载,根据需要对其进行处理,然后将文件写入appconfigs的挂载点
    1.现在,containers:将启动,但它将在共享卷挂载中找到配置文件,正如您指定的那样
f87krz0w

f87krz0w2#

有一段时间了,但我还是被同样的问题卡住了。mdaniel提出的解决方案很好用,但kiwigrid也有一个项目可以为你做同样的事情:https://github.com/kiwigrid/k8s-sidecar .您可以将容器添加为边车,如kubernetes docs中所述.
的配置是通过env变量完成的,例如,您可以用途:

- name: appconfig-sidecar
  image: kiwigrid/k8s-sidecar:1.19.2
  imagePullPolicy: IfNotPresent
  volumeMounts:
  - name: appconfigs
    mountPath: /appconfigs
  env:
  - name: LABEL
    value: "intendeedtarget"
  - name: LABEL_VALUE
    value: "MainApp"
  - name: FOLDER
    value: "appconfigs"

其他选项可以在回购协议中找到。

相关问题