Kubernetes 在不分叉的情况下修改舵图依赖关系的环境变量
我正在创建一个舵图,它依赖于几个不是我维护的舵图,我想对这些子舵进行一些配置。配置不是太复杂,我只想在每个容器中添加几个环境变量。但是,容器的Kubernetes 在不分叉的情况下修改舵图依赖关系的环境变量,kubernetes,kubernetes-helm,kustomize,Kubernetes,Kubernetes Helm,Kustomize,我正在创建一个舵图,它依赖于几个不是我维护的舵图,我想对这些子舵进行一些配置。配置不是太复杂,我只想在每个容器中添加几个环境变量。但是,容器的env字段尚未在头盔图表中模板化。我希望避免将这些图表分叉,并自己维护它们,因为这是一个微不足道的变化 有没有一种简单的方法可以通过Helm或其他工具以灵活的方式向Kubernetes中的多个容器提供环境变量 我目前正在考虑在Helm填写模板后使用Kustomize进行最后一英里的更改,但是我对设置Kustomize补丁感到很不满意。在我的场景中,Helm
env
字段尚未在头盔图表中模板化。我希望避免将这些图表分叉,并自己维护它们,因为这是一个微不足道的变化
有没有一种简单的方法可以通过Helm或其他工具以灵活的方式向Kubernetes中的多个容器提供环境变量
我目前正在考虑在Helm填写模板后使用Kustomize进行最后一英里的更改,但是我对设置Kustomize补丁感到很不满意。在我的场景中,Helm在ConfigMap中填写了环境变量。我想添加一个envFrom
字段来读取ConfigMap并将给定的环境变量添加到容器中。我想通过Kustomize将envFrom添加到资源YAML文件中。我遇到的问题是Kustomize patch.yaml文件是特定于资源的。下面是我的patch.yaml
和我的kustomization.yaml
的示例
patch.yaml
:
apiVersion:apps/v1
种类:StatefulSet
元数据:
姓名:没关系
规格:
模板:
规格:
容器:
-名称:服务器
来自:
-configMapRef:
姓名:我的环境
kustomization.yaml:
资源:
-亚马尔
补丁:
-路径:patch.yaml
目标:
种类:“状态集”
姓名:“*”
要执行Kustomization,我运行:
helm install perceptor../--后期渲染器。/kustomize
它基本上只是填写头盔模板,然后将它们传递给Kustomize来完成最后一英里的补丁
在补丁中,我必须指定容器(“服务器”)的名称,以正确插入我的configMap。我真正想做的是能够将这些环境变量提供给给定部署中的所有容器(由
kustomization.yaml
中的target
约束定义),而不管它们的名称如何。从我所看到的情况来看,似乎我必须为每个容器编写一个单独的补丁,这是次优的。我刚开始与Kubernetes合作,所以我可能遗漏了一些可以轻松解决这个问题的东西。我理解,你不想通过分叉来打破你的伞形图表所依赖的分图表的开/闭原则,但您仍然有权通过使其更具扩展性和灵活性来对其提出修改。是的,我建议您在上下文中向helm chart项目提交拉动请求/请求新功能
下面的代码片段不会破坏当前的功能,并允许用户根据所需资源规范中的现有ConfigMap引入自定义环境变量
舵手
价值观
刚发完这篇文章,我就遇到了。这可能就是我正在寻找的解决方案。这是一个很好的解决方案。将其作为答案发布,以便其他人将来可以使用。@mWatney我很快就会发布。在将其作为解决方案发布之前,我想确认它是否按需工作。@mWatney事实证明,PodPreset解决方案不起作用。在我的例子中,我需要将env变量添加到StatefulSet中的pod中,它使用pod模板。播客预设不适用于此。
#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
#
envConfigs:
Q3_CFG_MAP: Q3DM17
Q3_CFG_TIMEOUT: 30
# if empty use:
# envConfigs: {}