Comprehensive toolkit for validating, linting, and testing Kubernetes YAML resources. Use this skill when validating Kubernetes manifests, debugging YAML syntax errors, performing dry-run tests on clusters, or working with Custom Resource Definitions (CRDs) that require documentation lookup.
Overall
score
93%
Does it follow best practices?
Validation for skill structure
This skill provides a comprehensive validation workflow for Kubernetes YAML resources, combining syntax linting, schema validation, cluster dry-run testing, and intelligent CRD documentation lookup. Validate any Kubernetes manifest with confidence before applying it to the cluster.
IMPORTANT — REPORT-ONLY: Do NOT modify files, use the Edit tool, or offer to apply fixes. Generate a comprehensive validation report with suggested fixes shown as before/after code blocks, then let the user decide what to do next.
Follow this sequential validation workflow. Each stage catches different types of issues:
Before running any validation tools, check the file complexity:
--- document separators or parsing the filereferences/validation_workflow.md:
Read references/validation_workflow.mdbash scripts/setup_tools.shRequired tools: yamllint, kubeconform, kubectl (optional). If tools are missing, display installation instructions from script output and document missing tools in the validation report.
yamllint -c assets/.yamllint <file.yaml>Report all syntax issues with file:line references. Show suggested before/after code blocks. Continue to the next stage to collect all issues before reporting.
bash scripts/detect_crd_wrapper.sh <file.yaml>The wrapper script automatically handles Python dependencies via a temporary virtual environment if PyYAML is not available.
Resilient Parsing: The script parses valid documents and reports errors for invalid ones — continuing processing rather than aborting. This matches kubeconform's behavior of validating 2/3 resources when 1/3 has syntax errors.
Script outputs JSON with resource information and parse status:
{
"resources": [
{
"kind": "Certificate",
"apiVersion": "cert-manager.io/v1",
"group": "cert-manager.io",
"version": "v1",
"isCRD": true,
"name": "example-cert"
}
],
"parseErrors": [
{
"document": 1,
"start_line": 2,
"error_line": 6,
"error": "mapping values are not allowed in this context"
}
],
"summary": {
"totalDocuments": 3,
"parsedSuccessfully": 2,
"parseErrors": 1,
"crdsDetected": 1
}
}For each detected CRD:
Try context7 MCP first (preferred):
Use mcp__context7__resolve-library-id with the CRD project name
Example: "cert-manager" for cert-manager.io CRDs
Then use mcp__context7__get-library-docs with:
- context7CompatibleLibraryID from resolve step
- topic: The CRD kind (e.g., "Certificate")
- tokens: 5000 (adjust based on need)Fallback to WebSearch if context7 fails:
"<kind>" "<group>" kubernetes CRD "<version>" documentation specExtract required spec fields, field types, validation rules, and version-specific changes.
Secondary CRD Detection: If detect_crd_wrapper.sh fails (e.g., all documents have syntax errors) but kubeconform validates a CRD resource, parse kubeconform output to identify those CRDs and perform context7/WebSearch lookups.
kubeconform \
-schema-location default \
-schema-location 'https://raw.githubusercontent.com/datreeio/CRDs-catalog/main/{{.Group}}/{{.ResourceKind}}_{{.ResourceAPIVersion}}.json' \
-strict \
-ignore-missing-schemas \
-summary \
-verbose \
<file.yaml>For CRDs where kubeconform reports "no schema found", use the documentation from Stage 3 to manually validate spec fields.
Try server-side dry-run first:
kubectl apply --dry-run=server -f <file.yaml>Fallback logic:
--dry-run=client and document "Limited validation (no cluster access)"For updates:
kubectl diff -f <file.yaml>Constraint: Present the report and let the user take action — do NOT use the Edit tool or prompt the user to apply fixes.
Report structure:
Example issue format:
**Issue 1: deployment.yaml:21 - Wrong field type (Error) [Simple]**
Current:
```yaml
- containerPort: "80"Suggested Fix:
- containerPort: 80## Best Practices Reference
Load when schema validation fails with type errors, reports missing required fields, or dry-run fails with validation errors:Read references/k8s_best_practices.md
## Detailed Validation Workflow Reference
Load when the file contains 3+ resources, or validation produces unfamiliar errors spanning multiple stages:Read references/validation_workflow.md
## Working with Multiple Resources
When a YAML file contains multiple resources (separated by `---`):
1. Validate the entire file first with yamllint and kubeconform
2. Identify which resource has issues by checking line numbers
3. For dry-run, the file is tested as a unit
4. Track issues per-resource in the report
**Partial parsing:** Tools parse valid documents and continue when some documents have syntax errors:
| Document | Resource | Parsing | Validation |
|----------|----------|---------|------------|
| 1 | Deployment | ❌ Syntax error (line 6) | Skipped |
| 2 | Service | ✅ Parsed | ✅ Valid |
| 3 | Certificate | ✅ Parsed | ✅ Valid |
**Always use file-absolute line numbers** (relative to the start of the entire file) — this matches what yamllint, kubeconform, and kubectl report, and lets users navigate directly to errors in their editor.
## Error Handling Strategies
### Tool Not Available
- Run `scripts/setup_tools.sh` to check availability and get installation instructions
- Skip optional stages but document what was skipped
### Cluster Access Issues
- Fall back to client-side dry-run
- Document limitations in validation report
### CRD Documentation Not Found
- Document the failed lookup
- Attempt validation with kubeconform CRD schemas
- Suggest manual inspection:
```bash
kubectl get crd <crd-name>.group -o yaml
kubectl explain <kind>extensions/v1beta1 → apps/v1)kubectl api-versions to list available API versionsdetect_crd_wrapper.sh — Wrapper that manages Python dependencies (auto-creates venv if PyYAML unavailable) and calls detect_crd.py.
Usage: bash scripts/detect_crd_wrapper.sh <file.yaml>
detect_crd.py — Parses YAML files to identify CRDs; extracts kind, apiVersion, group, version; outputs JSON.
Usage: python3 scripts/detect_crd.py <file.yaml>
setup_tools.sh — Checks for required validation tools, reports versions, provides installation instructions.
Usage: bash scripts/setup_tools.sh
k8s_best_practices.md — Kubernetes YAML best practices: metadata, labels, resource limits, security context, common validation issues.
validation_workflow.md — Detailed workflow, command options, error handling strategies, complete workflow diagram.
.yamllint — Pre-configured yamllint rules following Kubernetes conventions (2-space indentation, line length, etc.).
Usage: yamllint -c assets/.yamllint <file.yaml>
Install with Tessl CLI
npx tessl i pantheon-ai/k8s-yaml-validator