Cloud / HELM Interview Questions
What are the common Helm anti-patterns and how to avoid them?
Recognizing Helm anti-patterns helps maintain production-grade charts.
1. Anti-pattern: Hardcoding values in templates # BAD image: nginx:1.21 replicas: 3 # GOOD image: {{ .Values.image.repository }}:{{ .Values.image.tag }} replicas: {{ .Values.replicaCount }}
2. Anti-pattern: Storing secrets in values.yaml # BAD - values.yaml database_password: "SuperSecret123" # GOOD - Use external secrets manager env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: {{ .Values.dbSecretName }} key: password
3. Anti-pattern: Ignoring .helmignore # BAD - Large files, binaries, test data packaged in chart # GOOD - .helmignore should exclude: .git/ .gitignore *.tgz *.swp *~ tests/ venv/ __pycache__/ *.log
4. Anti-pattern: Overly complex conditionals # BAD - Nested conditionals deep {{- if .Values.features.advanced }} {{- if .Values.features.advanced.monitoring }} {{- if .Values.features.advanced.monitoring.prometheus }} # Only here # GOOD - Use helper functions {{- define "monitoring.enabled" -}} {{- and .Values.features.advanced .Values.features.advanced.monitoring .Values.features.advanced.monitoring.prometheus }} {{- end }} {{- if include "monitoring.enabled" . }}
5. Anti-pattern: Not handling required values # BAD - fails silently when value missing host: {{ .Values.database.host }} # GOOD host: {{ required "database.host is required" .Values.database.host }}
6. Anti-pattern: Using latest tag for images # BAD image: tag: latest # GOOD image: tag: {{ .Values.image.tag | default "1.2.3" }}
7. Anti-pattern: Ignoring resource limits # GOOD - always include resources: limits: cpu: {{ .Values.resources.limits.cpu | default "500m" }} memory: {{ .Values.resources.limits.memory | default "512Mi" }} requests: cpu: {{ .Values.resources.requests.cpu | default "250m" }} memory: {{ .Values.resources.requests.memory | default "256Mi" }}
8. Anti-pattern: No upgrade strategy defined # GOOD spec: strategy: type: RollingUpdate rollingUpdate: maxSurge: 25% maxUnavailable: 0
9. Anti-pattern: Chart name collisions # Use naming helpers consistently: {{ include "myapp.fullname" . }}
10. Anti-pattern: Missing documentation # Include README.md with all configurable values and examples
More Related questions...