【发布时间】:2020-07-30 01:05:35
【问题描述】:
我正在创建一个依赖于我未维护的几个 Helm 图表的 Helm 图表,并且我想对这些子图表进行一些配置。配置并不太复杂,我只是想为每个容器添加几个环境变量。但是,容器的 env 字段尚未在 Helm 图表中模板化。我想避免分叉这些图表并自己维护它们,因为这是一个微不足道的变化。
有没有一种简单的方法可以通过 Helm 或其他工具灵活地为 Kubernetes 中的多个容器提供环境变量?
我目前正在考虑在 Helm 填写模板后使用 Kustomize 进行最后一英里的更改,但我对设置 Kustomize 补丁程序感到束手无策。在我的场景中,Helm 在 ConfigMap 中填写了环境变量。我想添加一个 envFrom 字段来读取 ConfigMap 并将给定的环境变量添加到容器中。我想通过 Kustomize 将 envFrom 添加到资源 YAML 文件中。我遇到的问题是 Kustomize patch.yaml 文件是资源特定的。下面分别是我的patch.yaml 和我的kustomization.yaml 的示例。
patch.yaml:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: does-not-matter
spec:
template:
spec:
containers:
- name: server
envFrom:
- configMapRef:
name: my-env
kustomization.yaml:
resources:
- all.yaml
patches:
- path: patch.yaml
target:
kind: "StatefulSet"
name: "*"
为了执行 Kustomization,我运行:
helm install perceptor ../ --post-renderer ./kustomize
这基本上只是填写 Helm 模板并将它们传递给 Kustomize 以完成最后一英里的补丁。
在补丁中,我必须指定容器的名称(“服务器”)才能正确注入我的 configMap。我真正想做的是能够为给定部署中的所有容器提供这些环境变量(由kustomization.yaml 中的target 约束定义),无论它们的名称如何。从我所见,我几乎必须为每个容器编写一个单独的补丁,这是次优的。我刚开始使用 Kubernetes,所以我可能遗漏了一些可以轻松解决这个问题的东西。
【问题讨论】:
-
发布后,我遇到了kubernetes.io/docs/tasks/inject-data-application/podpreset。这实际上可能是我正在寻找的解决方案。
-
这是一个不错的解决方案。将其发布为答案,以便其他人将来可以使用它。
-
@mWatney 我会很快的。在将其作为解决方案发布之前,我想确认它是否按需要工作。
-
@mWatney 事实证明,PodPreset 解决方案不起作用。 PodPresets only work with pods, not pod templates。就我而言,我需要将环境变量添加到 StatefulSet 中的 pod 中,它使用 pod 模板。 PodPresets 不适用于此。
标签: kubernetes kubernetes-helm kustomize