| name | helm-values |
| user-invocable | false |
| description | Use when managing Helm values files and configuration overrides for customizing Kubernetes deployments. |
| allowed-tools | [] |
Helm Values
Managing values files and configuration overrides in Helm.
Values Hierarchy
Helm merges values from multiple sources (lower precedence first):
- Built-in default values
- Chart's
values.yaml
- Parent chart's values
- Values files specified with
-f (can be multiple)
- Individual parameters with
--set
values.yaml Structure
Organize by Resource
global:
environment: production
domain: example.com
app:
name: myapp
version: "1.0.0"
image:
repository: myregistry/myapp
pullPolicy: IfNotPresent
tag: ""
service:
type: ClusterIP
port: 80
targetPort: 8080
ingress:
enabled: false
className: nginx
annotations: {}
hosts:
- host: myapp.example.com
paths:
- path: /
pathType: Prefix
tls: []
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
persistence:
enabled: false
storageClass: ""
accessMode: ReadWriteOnce
size: 8Gi
Override Strategies
Override with File
helm install myrelease ./mychart -f custom-values.yaml
helm install myrelease ./mychart \
-f values-base.yaml \
-f values-production.yaml
Override with --set
helm install myrelease ./mychart --set image.tag=2.0.0
helm install myrelease ./mychart \
--set image.tag=2.0.0 \
--set replicaCount=5
helm install myrelease ./mychart \
--set ingress.enabled=true \
--set ingress.hosts[0].host=myapp.com
Override with --set-string
helm install myrelease ./mychart \
--set-string version="1.0"
Override with --set-file
helm install myrelease ./mychart \
--set-file config=./config.json
Environment-Specific Values
values-development.yaml
replicaCount: 1
image:
tag: "dev-latest"
pullPolicy: Always
resources:
limits:
cpu: 200m
memory: 256Mi
ingress:
enabled: true
hosts:
- host: dev.myapp.com
postgresql:
enabled: true
values-production.yaml
replicaCount: 5
image:
tag: "1.0.0"
pullPolicy: IfNotPresent
resources:
limits:
cpu: 1000m
memory: 1Gi
ingress:
enabled: true
hosts:
- host: myapp.com
tls:
- secretName: myapp-tls
hosts:
- myapp.com
postgresql:
enabled: false
external:
host: prod-db.example.com
Global Values
Parent Chart values.yaml
global:
environment: production
storageClass: fast-ssd
postgresql:
auth:
existingSecret: db-credentials
Subchart Access
environment: {{ .Values.global.environment }}
Schema Validation
values.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["image"],
"properties": {
"replicaCount": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"image": {
"type": "object",
"required": ["repository"],
"properties": {
"repository": {
"type": "string"
},
Secrets in Values
Don't Commit Secrets
database:
host: ""
username: ""
password: ""
database:
host: "prod-db.example.com"
username: "dbuser"
password: "super-secret"
Use External Secrets
database:
useExistingSecret: true
existingSecretName: db-credentials
{{- if .Values.database.useExistingSecret }}
secretKeyRef:
name: {{ .Values.database.existingSecretName }}
key: password
{{- else }}
value: {{ .Values.database.password | quote }}
{{- end }}
Complex Value Structures
Lists
extraEnvVars:
- name: LOG_LEVEL
value: info
- name: API_KEY
valueFrom:
secretKeyRef:
name: api-secret
key: key
{{- range .Values.extraEnvVars }}
- name: {{ .name }}
{{- if .value }}
value: {{ .value | quote }}
{{- else if .valueFrom }}
valueFrom:
{{- toYaml .valueFrom | nindent 4 }}
{{- end }}
{{- end }}
Maps
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9090"
labels:
team: platform
environment: production
annotations:
{{- range $key, $value := .Values.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
Best Practices
Document Values
replicaCount: 3
image:
repository: myapp
tag: ""
Sensible Defaults
replicaCount: 3
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 500m
memory: 512Mi
Feature Flags
features:
metrics:
enabled: true
port: 9090
tracing:
enabled: false
endpoint: ""
View Computed Values
helm get values myrelease
helm get values myrelease --all
helm template myrelease ./mychart -f custom-values.yaml