干燥所有依赖于非常相似的初始化容器的部署的最佳方法

时间:2018-08-20 22:27:49

标签: kubernetes

我有10个应用程序要部署到Kubernetes。每个部署都依赖于一个初始化容器,除了一个参数外,该初始化容器基本上是相同的(从概念上讲,将这个初始化容器与应用程序分离对我来说没有任何意义)。到目前为止,我已经将这个init容器复制粘贴到每个Deployment.yaml文件中,但是我觉得这样做一定是更好的方法!

虽然我到目前为止唯一能想到的就是使用Helm之类的东西来包装init容器并将其部署为基于依赖项的一部分(Argo),但我的研究还没有找到一个很好的解决方案。 ?)。

遇到此问题的其他人是否找到了他们满意的解决方案?

1 个答案:

答案 0 :(得分:0)

Helm模板可以包含任意数量的文本,只要扩展所有宏,它就会生成有效的YAML Kubernetes清单。 (“有效YAML”比起听起来要棘手,因为缩进很重要。)

最简单的方法是编写一个共享的Helm模板,其中包含init容器的定义:

_init_container.tpl:

{{- define "common.myinit" -}}
name: myinit
image: myname/myinit:{{ .Values.initTag }}
# Other things from a container spec
{{ end -}}

然后在您的部署中包括以下内容:

deployment.yaml:

apiVersion: v1
kind: Deployment
spec:
  template:
    spec:
      initContainers:
        - {{ include "common.myinit" . | indent 10 | strip }}

然后,您可以将_init_container.tpl文件复制到每个单独的服务中。

如果要避免复制粘贴(足够合理),可以创建一个仅包含模板而没有实际Kubernetes资源的Helm图表。您需要建立某种类型的存储库来保存此图表。将_init_container.tpl放入该共享图表中,将其声明为图表元数据的依赖项,并以相同的方式在部署YAML中引用模板(Go模板名称在所有包含的图表中共享)。