【问题标题】:Modifying Environmental Variables of Helm Chart Dependencies without Forking在不分叉的情况下修改 Helm Chart 依赖项的环境变量
【发布时间】: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


【解决方案1】:

我了解,您不想通过分叉来破坏您的伞形图所依赖的子图的打开/关闭原则,但您仍然有权通过使其更具扩展性和灵活的。是的,我建议您在上下文中向 helm chart 项目提交 Pull Request/请求新功能。

以下代码 sn-p 不会破坏当前功能,并让用户有机会根据所需资源的规范中现有的 ConfigMap 引入自定义环境变量。

helm_template.yaml

 #helm template
 ...

 env:
- name: POD_NAME
  valueFrom:
    fieldRef:
      apiVersion: v1
      fieldPath: metadata.name
- name: POD_NAMESPACE
  valueFrom:
    fieldRef:
      apiVersion: v1
      fieldPath: metadata.namespace
{{- if .Values.envConfigs }}
{{- range $key, $config := $.Values.envConfigs }}
- name: {{ $key }}
  valueFrom:
    configMapKeyRef:
      name: {{ $config }}
      key: {{ $key | quote }}
{{- end }}
{{- end }}

values.yaml

#
# values.yaml
#
envConfigs:
  Q3_CFG_MAP: Q3DM17
  Q3_CFG_TIMEOUT: 30

# if empty use: 
# envConfigs: {}

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 2021-09-21
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2020-06-02
    • 2019-10-24
    相关资源
    最近更新 更多