Comprehensive toolkit for generating best practice Helm charts and resources following current standards and conventions. Use this skill when creating new Helm charts, implementing Helm templates, scaffolding Chart.yaml and values.yaml, defining deployment templates, service definitions, ingress configurations, .tpl helpers, or building Helm projects from scratch. Trigger phrases include "create", "generate", "build", "scaffold" alongside terms like "kubernetes helm", "k8s charts", "helm package", "chart dependencies", "values.yaml", or "helm install".
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Generate production-ready Helm charts with best practices built-in. Create complete charts or individual resources with standard helpers, proper templating, and automatic validation.
Official Documentation:
Use for creating/generating Helm charts and templates. For validation/linting of existing charts use devops-skills:helm-validator; for raw K8s YAML (no Helm) use k8s-generator.
REQUIRED: Use AskUserQuestion if any of these are missing or ambiguous:
| Missing Information | Question to Ask |
|---|---|
| Image repository/tag | "What container image should be used? (e.g., nginx:1.25)" |
| Service port | "What port does the application listen on?" |
| Resource limits | "What CPU/memory limits should be set? (e.g., 500m CPU, 512Mi memory)" |
| Probe endpoints | "What health check endpoints does the app expose? (e.g., /health, /ready)" |
| Scaling requirements | "Should autoscaling be enabled? If yes, min/max replicas and target CPU%?" |
| Workload type | "What workload type: Deployment, StatefulSet, or DaemonSet?" |
| Storage requirements | "Does the application need persistent storage? Size and access mode?" |
Do NOT assume values for critical settings. Ask first, then proceed.
If custom resources are needed:
Try context7 MCP first:
mcp__context7__resolve-library-id with operator name
mcp__context7__get-library-docs with topic for CRD kindFallback to WebSearch:
"<operator>" "<CRD-kind>" "<version>" kubernetes documentation specSee references/crd_patterns.md for common CRD examples.
Use the scaffolding script:
bash scripts/generate_chart_structure.sh <chart-name> <output-directory> [options]Script options:
--image <repo> - Image repository (default: nginx). Note: Pass only the repository name without tag (e.g., redis not redis:7-alpine)--port <number> - Service port (default: 80)--type <type> - Workload type: deployment, statefulset, daemonset (default: deployment)--with-templates - Generate resource templates (deployment.yaml, service.yaml, etc.)--with-ingress - Include ingress template--with-hpa - Include HPA template--force - Overwrite existing chart without promptingImportant customization notes:
http as the default port name in templates. Customize port names for non-HTTP services (e.g., redis, mysql, grpc).Values.configMap.enabled and .Values.secret.enabled)Use the helpers script or assets/_helpers-template.tpl:
bash scripts/generate_standard_helpers.sh <chart-name> <chart-directory>⚠️ CRITICAL REQUIREMENT: Read Reference Files NOW
You MUST use the
Readtool to load these reference files at this stage, even if you read them earlier in the conversation:1. Read references/resource_templates.md - for the specific resource type patterns 2. Read references/helm_template_functions.md - for template function usage 3. Read references/crd_patterns.md - if generating CRD resources (ServiceMonitor, Certificate, etc.)Why: Prior context may be incomplete or summarized. Reading reference files at generation time guarantees all patterns, functions, and examples are available for accurate template creation.
Do NOT skip this step. Template quality depends on having current reference patterns loaded.
Reference templates for all resource types in references/resource_templates.md:
Key patterns (MUST include in all templates):
# Use helpers for names and labels
metadata:
name: {{ include "mychart.fullname" . }}
labels: {{- include "mychart.labels" . | nindent 4 }}
# Conditional sections with 'with'
{{- with .Values.nodeSelector }}
nodeSelector: {{- toYaml . | nindent 2 }}
{{- end }}
# Checksum annotation (REQUIRED for Deployments/StatefulSets/DaemonSets to trigger restarts on config changes)
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}Structure guidelines:
# -- commentsSee assets/values-schema-template.json for JSON Schema validation.
Run validation using devops-skills:helm-validator skill (helm lint, template render, schema checks, dry-run).
See references/helm_template_functions.md for complete guide.
| Function | Purpose | Example |
|---|---|---|
required | Enforce required values | {{ required "msg" .Values.x }} |
default | Fallback value | {{ .Values.x | default 1 }} |
quote | Quote strings | {{ .Values.x | quote }} |
include | Use helpers | {{ include "name" . | nindent 4 }} |
toYaml | Convert to YAML | {{ toYaml .Values.x | nindent 2 }} |
tpl | Render as template | {{ tpl .Values.config . }} |
nindent | Newline + indent | {{- include "x" . | nindent 4 }} |
See references/crd_patterns.md for complete examples. Ship CRDs in crds/ directory (not templated); template CR instances in templates/.
toYaml for complex objects_helpers.tpl with standard helpers| Issue | Solution |
|---|---|
| Template syntax errors | Check {{- / -}} matching, use helm template --debug |
| Undefined values | Use default or required functions |
| Indentation issues | Use nindent consistently |
| CRD validation fails | Verify apiVersion, check docs for required fields |
After generating charts, invoke devops-skills:helm-validator to ensure quality.
values.yaml:latest or a hard-coded version in the chart prevents version overrides at deploy time.image: repository: myapp tag: latestimage: repository: myapp tag: "" with appVersion as the default, overridden via --set image.tag=v1.2.3.resources: limits and requests on containersresources: block in the container spec template.requests and limits for CPU and memory, with documented tuning guidance in values.yaml.helm upgrade --install without --atomic in CI/CD--atomic, a failed upgrade leaves the release in a broken state that blocks future upgrades and requires manual helm rollback.helm upgrade --install myapp ./charthelm upgrade --install --atomic --timeout 5m myapp ./chartvalues.yamlvalues.yaml.values.yaml for defaults, values-prod.yaml for overrides, -f values-prod.yaml at deploy time.helm template + kubeval/kubeconform validationhelm lint before deploying.helm template . | kubeval --strict --ignore-missing-schemas to validate rendered manifests against the Kubernetes API schema.| Script | Usage |
|---|---|
scripts/generate_chart_structure.sh | bash <script> <chart-name> <output-dir> |
scripts/generate_standard_helpers.sh | bash <script> <chart-name> <chart-dir> |
| File | Content |
|---|---|
references/helm_template_functions.md | Complete template function guide |
references/resource_templates.md | All K8s resource templates |
references/crd_patterns.md | CRD patterns (cert-manager, Prometheus, Istio, ArgoCD) |
| File | Purpose |
|---|---|
assets/_helpers-template.tpl | Standard helpers template |
assets/values-schema-template.json | JSON Schema for values validation |
a1083f4
Also appears in
since Mar 16, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.