Help us improve
Share bugs, ideas, or general feedback.
From kubernetes-plugin
Debugs Helm deployment failures, template errors, YAML parse issues, value type errors, and resource conflicts using helm lint, template, dry-run, and kubectl inspection. For Helm errors or troubleshooting deployments.
npx claudepluginhub laurigates/claude-plugins --plugin kubernetes-pluginHow this skill is triggered — by the user, by Claude, or both
Slash command
/kubernetes-plugin:helm-debugginghaikuThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Comprehensive guidance for diagnosing and fixing Helm deployment failures, template errors, and configuration issues.
Provides quick reference for Helm chart structure, Chart.yaml config, Go templating, values patterns, commands, dependencies, testing, and security best practices. Activates on Chart.yaml, values.yaml, templates/.
Validates and audits Helm charts with linting, template rendering, YAML/schema checks, CRD verification, dry-runs, and security best practices.
Creates, tests, validates, and packages Helm charts for Kubernetes using helm create, lint, template, package commands on Chart.yaml, values.yaml, templates, and dependencies.
Share bugs, ideas, or general feedback.
Comprehensive guidance for diagnosing and fixing Helm deployment failures, template errors, and configuration issues.
Use this skill automatically when:
Always specify --context explicitly in all kubectl and helm commands. Never rely on the current context.
# CORRECT: Explicit context
kubectl --context=prod-cluster get pods -n prod
helm --kube-context=prod-cluster status myapp -n prod
# WRONG: Relying on current context
kubectl get pods -n prod # Which cluster?
This prevents accidental operations on the wrong cluster.
ALWAYS follow this progression for robust deployments:
# 1. LINT - Static analysis (local charts only)
helm lint ./mychart --strict
# 2. TEMPLATE - Render templates locally
helm template myapp ./mychart \
--debug \
--values values.yaml
# 3. DRY-RUN - Server-side validation
helm install myapp ./mychart \
--namespace prod \
--values values.yaml \
--dry-run --debug
# 4. INSTALL - Actual deployment
helm install myapp ./mychart \
--namespace prod \
--values values.yaml \
--atomic --wait
# 5. TEST - Post-deployment validation (if chart has tests)
helm test myapp --namespace prod --logs
# Render all templates locally
helm template myapp ./mychart \
--debug \
--values values.yaml
# Render specific template file
helm template myapp ./mychart \
--show-only templates/deployment.yaml \
--values values.yaml
# Render with debug output (shows computed values)
helm template myapp ./mychart \
--debug \
--values values.yaml \
2>&1 | less
# Validate against Kubernetes API (dry-run)
helm install myapp ./mychart \
--namespace prod \
--values values.yaml \
--dry-run \
--debug
# Get deployed manifest (actual YAML in cluster)
helm get manifest myapp --namespace prod
# Get deployed values (what was actually used)
helm get values myapp --namespace prod
# Get ALL values (including defaults)
helm get values myapp --namespace prod --all
# Get release status with resources
helm status myapp --namespace prod --show-resources
# Get everything about a release
helm get all myapp --namespace prod
# Lint chart structure and templates
helm lint ./mychart
# Lint with strict mode (treats warnings as errors)
helm lint ./mychart --strict
# Lint with specific values
helm lint ./mychart --values values.yaml --strict
# Validate chart against Kubernetes API
helm install myapp ./mychart \
--dry-run --validate --namespace prod
# Enable Helm debug logging
helm install myapp ./mychart \
--namespace prod \
--debug \
--dry-run
# Enable Kubernetes client logging
helm install myapp ./mychart \
--namespace prod \
--v=6 # Verbosity level 0-9
| Scenario | Symptom | Quick Fix |
|---|---|---|
| YAML parse error | error converting YAML to JSON | Check indentation, use {{- ... }} for whitespace chomping |
| Template rendering error | nil pointer evaluating interface | Add defaults: {{ .Values.key | default "value" }} |
| Value type error | cannot unmarshal string into Go value of type int | Use {{ .Values.port | int }} in template |
| Resource already exists | resource that already exists | helm uninstall conflicting release or adopt resource |
| Image pull failure | ImagePullBackOff | Fix image name/tag, create pull secret |
| CRD not found | no matches for kind | Install CRDs first: kubectl apply -f crds/ |
| Timeout | timed out waiting for the condition | Increase --timeout, check readiness probes |
| Hook failure | pre-upgrade hooks failed | Delete failed hook job, retry with --no-hooks |
For detailed debugging steps, fixes, and examples for each failure scenario, see REFERENCE.md.
| Context | Command |
|---|---|
| Release status (JSON) | helm status <release> -n <ns> -o json |
| All values (JSON) | helm get values <release> -n <ns> --all -o json |
| Pod status (compact) | kubectl get pods -n <ns> -l app.kubernetes.io/instance=<release> -o wide |
| Events (sorted) | kubectl get events -n <ns> --sort-by='.lastTimestamp' -o json |
| Render + validate | helm template <release> ./chart --debug 2>&1 | head -100 |