Helm Chart Patterns
Expert guidance for developing production-grade Helm charts covering chart structure, templating patterns, multi-environment configuration, dependency management, testing strategies, and distribution workflows for Kubernetes application packaging.
When to Use This Skill
- Creating reusable Helm charts for applications and services
- Building application catalogs and chart repositories
- Managing multi-environment deployments (dev, staging, production)
- Implementing advanced templating with conditionals and loops
- Managing chart dependencies and subcharts
- Implementing chart hooks for lifecycle management
- Testing and validating chart templates
- Packaging and distributing charts via repositories
- Using Helmfile for multi-chart orchestration
Core Concepts
Chart Types
- Application charts: Standard deployable charts for your services
- Library charts: Reusable template helpers (not directly installable)
Key Files
| File | Purpose |
|------|---------|
| Chart.yaml | Metadata, version, dependencies |
| values.yaml | Default configuration |
| values.schema.json | Input validation |
| templates/_helpers.tpl | Reusable template functions |
| templates/*.yaml | Kubernetes manifests |
Template Essentials
- Quote strings:
{{ .Values.name | quote }} - Indent properly:
{{- toYaml . | nindent 4 }} - Use helpers:
{{ include "my-app.fullname" . }} - Check nil:
{{- if .Values.optional }}
Quick Reference
| Task | Load reference |
| --- | --- |
| Chart structure & Chart.yaml | skills/helm-chart-patterns/references/chart-structure.md |
| Values file patterns | skills/helm-chart-patterns/references/values-patterns.md |
| Template patterns & functions | skills/helm-chart-patterns/references/template-patterns.md |
| Dependencies & subcharts | skills/helm-chart-patterns/references/dependencies.md |
| Hooks & lifecycle | skills/helm-chart-patterns/references/hooks.md |
| Testing patterns | skills/helm-chart-patterns/references/testing.md |
| Packaging & distribution | skills/helm-chart-patterns/references/packaging.md |
| Helmfile multi-chart | skills/helm-chart-patterns/references/helmfile.md |
| Best practices checklist | skills/helm-chart-patterns/references/best-practices.md |
Workflow
- Structure - Set up chart directory with Chart.yaml and values.yaml
- Template - Create Kubernetes manifests with Go templating
- Helpers - Extract common patterns into _helpers.tpl
- Validate - Use values.schema.json for input validation
- Test - Lint, template, and run chart tests
- Package - Create .tgz and publish to repository
Essential Commands
# Development
helm create my-app # Scaffold new chart
helm lint ./my-app # Validate chart
helm template my-app ./my-app # Render templates
# Dependencies
helm dependency update # Download dependencies
helm dependency list # Show dependencies
# Testing
helm install my-app ./my-app --dry-run --debug
helm test my-app
# Distribution
helm package ./my-app
helm repo index . --url https://charts.example.com
helm push my-app-1.0.0.tgz oci://registry.example.com/charts
Common Mistakes
- Forgetting to quote strings in templates
- Not using
nindentfor proper YAML formatting - Committing secrets to values files
- Missing security contexts (runAsNonRoot, drop capabilities)
- Not pinning dependency versions
- Skipping values.schema.json validation
- Not testing upgrades from previous versions
Resources
- Helm Documentation: https://helm.sh/docs/
- Chart Template Guide: https://helm.sh/docs/chart_template_guide/
- Best Practices: https://helm.sh/docs/chart_best_practices/
- Helmfile: https://github.com/helmfile/helmfile
- Chart Testing: https://github.com/helm/chart-testing