卷装入的配置映射,由标签选择器

时间:2018-04-18 11:12:07

标签: kubernetes

我正在寻找一种基于标签选择器安装配置的方法。

我将随着时间的推移创建新的配置图,我将用" intendeedtarget" =" MainApp"标记。 配置是从json文件创建的,文件名为key。

E.g。像这样的yml(但正在工作):

    volumeMounts:
      - name: appconfigs
        mountPath: /appconfigs
  volumes:
  - name: appconfigs
    configMap:
      selector:
        matchLabels:
          intendeedtarget: MainApp

这是新的配置将自动安装在" MainApp"的运行吊舱中。随着时间的推移。

我已经把它作为运行pod中的文件安装个人配置:

containers:
      - name: {{Name}}
        image: {{Image}}
        ports:
        - containerPort: 80
        volumeMounts:
          - name: appconfigs
            mountPath: /appconfigs
      volumes:
      - name: appconfigs
        configMap:
          name: {{ConfigName}}

这会将应用于configmap的json安装为/ appconfigs文件夹中的单独文件。

我现在的目标是使用标签" intendeedtarget"安装所有配置映射。 =" MainApp"在/ appconfigs。

有什么建议吗?

奖金问题,是否有人知道如何将配置图标记为一个命令,即在创建配置图时?

BR

1 个答案:

答案 0 :(得分:1)

所以短版本没有,我们无法指定整个范围的volumeMounts,但有一个可以解决的问题:initContainers:

我相信它会像这样工作:

  1. Pod会声明volume类型emptyDir,名为appconfigs (只是为了让讨论变得简单,名称并不重要)已挂载你想要的地方。它的类型为emptyDir,因为我们只关心在initContainer和“main”containers之间有一些共享磁盘空间,并且当Pod执行时该共享空间应该消失
  2. initContainer要么包含kubectl二进制文件,要么下载一个,或者使用众多kubernetes api客户端库中的一个,或者只使用curl的副本在里面
    1. 使用ServiceAccount令牌,它会查询您选择的ConfigMap。绝对可以将标签标准放入initContainer的环境变量中,或者initContainer甚至可以使用自己的Pod的元数据进行内省,如果您愿意的话
    2. 它会提取有效负载,按照您的意愿对其进行按摩,并将文件写入appconfigs的挂载点
  3. 现在containers:将启动,但它会在共享卷装入中找到配置文件,就像您指定的那样