| name | manifest-validator |
| description | Validates Kubernetes manifests using kubeconform, kube-score, and custom homelab policies. Use when creating or modifying YAML files, Helm values, or ArgoCD applications. |
| allowed-tools | Bash, Read, Grep, Glob, Write |
Manifest Validator
Validate Kubernetes manifests against schemas, best practices, and homelab standards.
Trigger Phrases
- "validate", "검증해줘", "체크해줘"
- "manifest 확인", "yaml 검사"
- Before committing K8s YAML changes
Validation Pipeline
1. YAML Syntax Check
yamllint -d relaxed <file.yaml>
yq eval '.' <file.yaml> > /dev/null && echo "Valid YAML"
2. Kubernetes Schema Validation (kubeconform)
kubeconform -summary -output pretty <file.yaml>
kubeconform -summary -output pretty platform/stacks/**/*.yaml
kubeconform -summary \
-schema-location default \
-schema-location 'https://raw.githubusercontent.com/datreeio/CRDs-catalog/main/{{.Group}}/{{.ResourceKind}}_{{.ResourceAPIVersion}}.json' \
<file.yaml>
3. Best Practices (kube-score)
kube-score score <file.yaml>
kube-score score --ignore-test container-resources <file.yaml>
4. Helm Template Validation
helm template <release> <chart> -f values.yaml | kubeconform -summary
cd bootstrap && helmfile -e home template | kubeconform -summary
Homelab Policy Checks
Required Fields
spec:
template:
spec:
containers:
- resources:
requests:
cpu: "..."
memory: "..."
limits:
cpu: "..."
memory: "..."
securityContext:
runAsNonRoot: true
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
Label Requirements
metadata:
labels:
app.kubernetes.io/name: <app>
app.kubernetes.io/instance: <app>
app.kubernetes.io/managed-by: argocd
GPU Workload Checks
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
nodeSelector:
nvidia.com/gpu.present: "true"
Secret Validation
- No hardcoded secrets in values
- Must use Infisical or external secrets
- No base64-encoded sensitive data in manifests
ArgoCD Application Validation
Required Structure
apps:
- name: <app-name>
namespace: <namespace>
chart: <chart>
repoURL: <url>
targetRevision: "<version>"
Values Validation
yq '.apps[].values' <app.yaml> | kubeconform -summary
Output Format
## Validation Results
### ✅ Passed
- YAML syntax valid
- Kubernetes schema valid
- Labels present
### ⚠️ Warnings
- [kube-score] Container has no readiness probe
- [policy] Missing recommended nodeSelector
### ❌ Errors
- [kubeconform] Invalid apiVersion: apps/v1beta1
- [policy] Missing required resource limits
### Fixes Required
1. Update apiVersion to apps/v1
2. Add resource limits to container spec
Integration with CI
set -e
changed_yamls=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.ya?ml$' || true)
if [ -n "$changed_yamls" ]; then
echo "$changed_yamls" | xargs kubeconform -summary -output pretty
fi
Reference