Helm Charts
Understanding and creating Helm charts for Kubernetes applications.
Chart Structure
mychart/ ├── Chart.yaml # Chart metadata ├── values.yaml # Default values ├── charts/ # Chart dependencies ├── templates/ # Template files │ ├── NOTES.txt # Usage notes │ ├── deployment.yaml │ ├── service.yaml │ ├── _helpers.tpl # Template helpers │ └── tests/ # Test files └── .helmignore # Files to ignore
Chart.yaml
apiVersion: v2 name: my-app user-invocable: false description: A Helm chart for my application type: application version: 1.0.0 appVersion: "1.0.0" keywords:
- web
- api maintainers:
- name: Your Name email: you@example.com dependencies:
- name: postgresql version: "12.1.0" repository: "https://charts.bitnami.com/bitnami" condition: postgresql.enabled
values.yaml
replicaCount: 3
image: repository: myapp pullPolicy: IfNotPresent tag: "1.0.0"
service: type: ClusterIP port: 80
ingress: enabled: false className: "nginx" hosts: - host: myapp.local paths: - path: / pathType: Prefix
resources: limits: cpu: 500m memory: 512Mi requests: cpu: 250m memory: 256Mi
autoscaling: enabled: false minReplicas: 2 maxReplicas: 10 targetCPUUtilizationPercentage: 80
Common Commands
Create Chart
helm create mychart
Install Chart
Install from directory
helm install myrelease ./mychart
Install with custom values
helm install myrelease ./mychart -f custom-values.yaml
Install with value overrides
helm install myrelease ./mychart --set image.tag=2.0.0
Upgrade Chart
helm upgrade myrelease ./mychart
Upgrade or install
helm upgrade --install myrelease ./mychart
Validate Chart
Lint chart
helm lint ./mychart
Dry run
helm install myrelease ./mychart --dry-run --debug
Template rendering
helm template myrelease ./mychart
Manage Releases
List releases
helm list
Get release status
helm status myrelease
Get release values
helm get values myrelease
Rollback
helm rollback myrelease 1
Uninstall
helm uninstall myrelease
Dependencies
Chart.yaml
dependencies:
- name: redis
version: "17.0.0"
repository: "https://charts.bitnami.com/bitnami"
condition: redis.enabled
tags:
- cache
Update Dependencies
helm dependency update ./mychart helm dependency build ./mychart helm dependency list ./mychart
Chart Repositories
Add repository
helm repo add bitnami https://charts.bitnami.com/bitnami
Update repositories
helm repo update
Search charts
helm search repo nginx
Search hub
helm search hub wordpress
Best Practices
Version Conventions
-
Chart version: Semantic versioning (1.2.3)
-
App version: Application version (v1.0.0)
Default Values
Provide sensible defaults in values.yaml:
Good defaults
resources: limits: cpu: 100m memory: 128Mi requests: cpu: 100m memory: 128Mi
Allow customization
config: {} env: {}
Documentation
Include NOTES.txt for post-installation instructions:
Thank you for installing {{ .Chart.Name }}.
Your release is named {{ .Release.Name }}.
To learn more about the release, try:
$ helm status {{ .Release.Name }} $ helm get all {{ .Release.Name }}