You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Helm中拆分文件以生成多个ConfigMap?

问题描述

众所周知,Kubernetes ConfigMap的大小上限为1MB。我有一个需要以ConfigMap形式传递(而非挂载卷)的文件,路径为helm chart/file/rules.yaml,文件结构如下:

groups:
- name: alert-1
  rules:
  - alert: MimirIngesterUnhealthy
    annotations:
      message: {{printf "%f" $value }} unhealthy ingester(s).
    expr: | <expresseion>
for: 15m
    labels:
      severity: critical
- name: alert-2
  rules:
  - alert: MimirIngesterUnhealthy
    annotations:
      message: {{printf "%f" $value }} unhealthy ingester(s).
    expr: | <expresseion>
for: 15m
    labels:
      severity: critical
...
...
- name: alert-n
  rules:
  - alert: MimirIngesterUnhealthy
    annotations:
      message: {{printf "%f" $value }} unhealthy ingester(s).
    expr: | <expresseion>
for: 15m
    labels:
      severity: critical

如果创建单个ConfigMap会超出1MB限制导致安装失败,因此我希望将该文件拆分为多个ConfigMap,每个对应一个告警组,示例如下:

configmap-1--> 包含alert-1的配置
configmap-2--> 包含alert-2的配置

能否仅通过Helm模板或函数实现此需求?注:无法修改etcd的大小限制。

解决方案

完全可以通过Helm模板的循环与数据处理功能实现需求,核心逻辑是读取规则文件中的告警组列表,遍历每个组生成独立的ConfigMap。

具体实现步骤

  1. 加载并解析规则文件:用Helm的fromYaml函数将规则文件的字符串内容转为可遍历的对象。
  2. 遍历生成ConfigMap:通过range循环遍历每个告警组,为每个组生成单独的ConfigMap资源。
  3. 构造单组配置内容:为每个ConfigMap构造仅包含当前告警组的YAML结构,保证格式与原文件一致。

示例模板代码

创建templates/alert-configmaps.yaml文件,内容如下:

{{- $rules := fromYaml (include "chart-name.rules-content" .) -}}
{{- range $index, $group := $rules.groups }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "chart-name.fullname" $ }}-alert-{{ $group.name }}
  labels:
    {{- include "chart-name.labels" $ | nindent 4 }}
data:
  rules.yaml: |
    {{- $singleGroup := dict "groups" (list $group) }}
    {{- toYaml $singleGroup | nindent 4 }}
---
{{- end }}

在_helpers.tpl中添加加载规则文件的模板定义:

{{- define "chart-name.rules-content" -}}
{{- .Files.Get "file/rules.yaml" | nindent 0 -}}
{{- end -}}

关键细节说明

  • fromYaml:将规则文件的纯文本内容解析为Helm可操作的字典对象,实现对groups数组的遍历。
  • range $index, $group:遍历每个告警组,$group包含当前组的完整配置,$index可用于生成序号类命名。
  • dict "groups" (list $group):构造仅包含当前组的groups数组,确保每个ConfigMap的YAML结构与原文件匹配。
  • toYaml:将构造的单组对象转回YAML字符串,填充到ConfigMap的data.rules.yaml字段中。
  • 命名规则:示例用告警组名作为ConfigMap名称后缀,也可替换为{{ $index }}生成序号式名称,根据需求调整。

通过该方案,Helm渲染时会为每个告警组生成独立的ConfigMap,单个ConfigMap大小远低于1MB限制,避免安装失败。


内容的提问来源于stack exchange,提问作者SHC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:45:31