Helm Chart Generator
综合工具包,用于生成遵循当前标准和约定的最佳实践Helm图表和资源。在创建新的Helm图表、实现Helm模板或从头开始构建Helm项目时使用此技能。
官方文档:
- Helm Docs - 主要文档
- Chart Best Practices - 官方最佳实践指南
- Template Functions - 内置函数
- Sprig Functions - 扩展函数库
何时使用此技能
| 使用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文档查找
如果需要自定义资源:
-
首先尝试上下文7 MCP:
mcp__context7__resolve-library-id 与操作员名称 mcp__context7__get-library-docs 与CRD种类的主题 -
退回到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
- 参数化: 名称 → 助手,值 →
values.yaml - 应用模式: 标签,条件,
toYaml用于复杂对象 - 添加助手: 创建
_helpers.tpl带有标准助手 - 验证: 使用devops-skills:helm-validator,用不同的值测试
错误处理
| 问题 | 解决方案 |
|---|---|
| 模板语法错误 | 检查{{- / -}}匹配,使用helm template --debug |
| 未定义值 | 使用default或required函数 |
| 缩进问题 | 一致使用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以确保质量:
- 生成图表/模板
- 调用devops-skills:helm-validator技能
- 修复识别的问题
- 重新验证直到通过