Helm图表生成器 helm-generator

Helm图表生成器是一个全面的套件,用于生成遵循当前标准和约定的最佳实践Helm图表和资源。它适用于创建新的Helm图表、实现Helm模板或从头开始构建Helm项目。关键词包括:Helm, Kubernetes, 部署, 模板, 自动化。

Docker/K8s 0 次安装 0 次浏览 更新于 3/4/2026

Helm Chart Generator

综合工具包,用于生成遵循当前标准和约定的最佳实践Helm图表和资源。在创建新的Helm图表、实现Helm模板或从头开始构建Helm项目时使用此技能。

官方文档:

何时使用此技能

使用helm-generator 使用OTHER技能
创建新的Helm图表 devops-skills:helm-validator: 验证/lint现有图表
生成Helm模板 k8s-generator: 原始K8s YAML(无Helm)
将K8s清单转换为Helm k8s-debug: 调试部署资源
在Helm中实现CRD k8s-yaml-validator: 验证K8s清单

触发短语: “create”, “generate”, “build”, “scaffold” Helm charts/templates

图表生成工作流程

第1阶段:了解需求

收集信息:

  • 范围:完整图表、特定资源或清单转换
  • 应用程序:名称、镜像、端口、环境变量、资源、扩展、存储
  • CRDs/Operators:cert-manager、Prometheus Operator、Istio等。
  • 安全:RBAC、安全上下文、网络策略

必需:使用AskUserQuestion 如果这些信息缺失或含糊:

缺失信息 询问问题
镜像仓库/标签 “应该使用哪个容器镜像?(例如,nginx:1.25)”
服务端口 “应用程序监听哪个端口?”
资源限制 “应该设置什么CPU/内存限制?(例如,500m CPU,512Mi内存)”
探测端点 “应用程序暴露哪些健康检查端点?(例如,/health,/ready)”
扩展需求 “是否启用自动扩展?如果是,最小/最大副本和目标CPU%?”
工作负载类型 “工作负载类型:Deployment、StatefulSet还是DaemonSet?”
存储需求 “应用程序是否需要持久存储?大小和访问模式?”

不要假设 关键设置的值。先询问,然后继续。

第2阶段:CRD文档查找

如果需要自定义资源:

  1. 首先尝试上下文7 MCP:

    mcp__context7__resolve-library-id 与操作员名称
    mcp__context7__get-library-docs 与CRD种类的主题
    
  2. 退回到WebSearch:

    "<operator>" "<CRD-kind>" "<version>" kubernetes 文档规范
    

查看references/crd_patterns.md以获取常见的CRD示例。

第3阶段:创建图表结构

使用脚手架脚本:

bash scripts/generate_chart_structure.sh <chart-name> <output-directory> [选项]

脚本选项:

  • --image <repo> - 镜像仓库(默认:nginx)。注意: 只传递仓库名称,不要标签(例如,redis而不是redis:7-alpine
  • --port <number> - 服务端口(默认:80)
  • --type <type> - 工作负载类型:deployment, statefulset, daemonset(默认:deployment)
  • --with-templates - 生成资源模板(deployment.yaml, service.yaml等)
  • --with-ingress - 包含入口模板
  • --with-hpa - 包含HPA模板
  • --force - 覆盖现有图表而不提示

重要的自定义说明:

  • 脚本在模板中使用http作为默认端口名称。自定义非HTTP服务的端口名称(例如,redis, mysql, grpc
  • 模板包括ConfigMap/Secret更改的校验和注释(通过.Values.configMap.enabled.Values.secret.enabled有条件启用)

标准结构:

mychart/
  Chart.yaml           # 图表元数据(apiVersion: v2)
  values.yaml          # 默认配置
  values.schema.json   # 可选:JSON Schema验证
  templates/
    _helpers.tpl       # 标准助手(始终创建)
    NOTES.txt          # 安装后说明
    deployment.yaml    # 工作负载
    service.yaml       # 服务
    ingress.yaml       # 入口(条件性)
    configmap.yaml     # ConfigMaps
    serviceaccount.yaml # RBAC
  .helmignore          # 忽略模式

第4阶段:生成标准助手

使用助手脚本或assets/_helpers-template.tpl

bash scripts/generate_standard_helpers.sh <chart-name> <chart-directory>

必需助手: name, fullname, chart, labels, selectorLabels, serviceAccountName

第5阶段:生成模板

⚠️ 关键要求:现在阅读参考文件

必须使用Read工具在此阶段加载这些参考文件,即使你之前在对话中阅读过它们:

1. 阅读 references/resource_templates.md - 特定资源类型模式
2. 阅读 references/helm_template_functions.md - 模板函数使用
3. 阅读 references/crd_patterns.md - 如果生成CRD资源(ServiceMonitor, Certificate等)

为什么: 之前的上下文可能不完整或总结。在生成时间读取参考文件确保所有模式、函数和示例可用于准确的模板创建。

不要跳过这一步。 模板质量取决于当前参考模式加载。

参考模板为references/resource_templates.md中的所有资源类型:

  • 工作负载:Deployment, StatefulSet, DaemonSet, Job, CronJob
  • 服务:Service, Ingress
  • 配置:ConfigMap, Secret
  • RBAC:ServiceAccount, Role, RoleBinding, ClusterRole, ClusterRoleBinding
  • 网络:NetworkPolicy
  • 自动扩展:HPA, PodDisruptionBudget

关键模式(必须包含在所有模板中):

# 使用助手进行名称和标签
metadata:
  name: {{ include "mychart.fullname" . }}
  labels: {{- include "mychart.labels" . | nindent 4 }}

# 条件部分与'with'
{{- with .Values.nodeSelector }}
nodeSelector: {{- toYaml . | nindent 2 }}
{{- end }}

# 配置更改重启触发器(始终添加到工作负载)
annotations:
  checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}

校验和注释是必需的,用于Deployments/StatefulSets/DaemonSets在ConfigMaps或Secrets更改时触发pod重启。如果ConfigMap是可选的,则有条件地添加:

{{- if .Values.configMap.enabled }}
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
{{- end }}

第6阶段:创建values.yaml

结构指南:

  • 逻辑分组相关设置
  • 使用# --注释记录每个值
  • 提供合理的默认值
  • 包括安全上下文、资源限制、探测

查看assets/values-schema-template.json以获取JSON Schema验证。

第7阶段:验证

始终验证 使用devops-skills:helm-validator技能:

1. helm lint
2. helm template (渲染检查)
3. YAML/模式验证
4. 如果集群可用,则进行干运行

修复问题并重新验证,直到所有检查通过。

模板函数快速参考

查看references/helm_template_functions.md以获取完整指南。

函数 目的 示例
required 强制要求值 {{ required "msg" .Values.x }}
default 回退值 {{ .Values.x | default 1 }}
quote 引用字符串 {{ .Values.x | quote }}
include 使用助手 {{ include "name" . | nindent 4 }}
toYaml 转换为YAML {{ toYaml .Values.x | nindent 2 }}
tpl 作为模板渲染 {{ tpl .Values.config . }}
nindent 新行+缩进 {{- include "x" . | nindent 4 }}

条件模式:

{{- if .Values.enabled }}...{{- end }}
{{- if not .Values.autoscaling.enabled }}replicas: {{ .Values.replicaCount }}{{- end }}

迭代:

{{- range .Values.items }}
- {{ . }}
{{- end }}

处理CRD

查看references/crd_patterns.md以获取完整示例。

关键点:

  • 你分发的CRD → crds/目录(不模板化,卸载时不删除)
  • CR实例 → templates/目录(完全模板化)
  • 始终查找CRD规范要求的文档
  • 在Chart.yaml注释中记录操作员依赖关系

将清单转换为Helm

  1. 参数化: 名称 → 助手,值 → values.yaml
  2. 应用模式: 标签,条件,toYaml用于复杂对象
  3. 添加助手: 创建_helpers.tpl带有标准助手
  4. 验证: 使用devops-skills:helm-validator,用不同的值测试

错误处理

问题 解决方案
模板语法错误 检查{{- / -}}匹配,使用helm template --debug
未定义值 使用defaultrequired函数
缩进问题 一致使用nindent
CRD验证失败 验证apiVersion,检查文档以获取所需字段

资源

脚本

脚本 使用
scripts/generate_chart_structure.sh bash <script> <chart-name> <output-dir>
scripts/generate_standard_helpers.sh bash <script> <chart-name> <chart-dir>

参考

文件 内容
references/helm_template_functions.md 完整的模板函数指南
references/resource_templates.md 所有K8s资源模板
references/crd_patterns.md CRD模式(cert-manager, Prometheus, Istio, ArgoCD)

资产

文件 目的
assets/_helpers-template.tpl 标准助手模板
assets/values-schema-template.json 值的JSON Schema验证

与devops-skills:helm-validator集成

生成图表/模板后,自动调用devops-skills:helm-validator以确保质量:

  1. 生成图表/模板
  2. 调用devops-skills:helm-validator技能
  3. 修复识别的问题
  4. 重新验证直到通过