manifest-validator
Validates Kubernetes manifests using kubeconform, kube-score, and custom homelab policies. Use when creating or modifying YAML files, Helm values, or ArgoCD applications.
Installation
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
Voir la source ↗GuidesInstructions
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
# Basic YAML syntax
yamllint -d relaxed <file.yaml>
# Or with yq
yq eval '.' <file.yaml> > /dev/null && echo "Valid YAML"
2. Kubernetes Schema Validation (kubeconform)
# Single file
kubeconform -summary -output pretty <file.yaml>
# Directory
kubeconform -summary -output pretty platform/stacks/**/*.yaml
# With CRD schemas
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)
# Score a manifest
kube-score score <file.yaml>
# With specific checks
kube-score score --ignore-test container-resources <file.yaml>
4. Helm Template Validation
# Render and validate
helm template <release> <chart> -f values.yaml | kubeconform -summary
# With helmfile
cd bootstrap && helmfile -e home template | kubeconform -summary
Homelab Policy Checks
Required Fields
# Every Deployment/StatefulSet must have:
spec:
template:
spec:
containers:
- resources: # REQUIRED
requests:
cpu: "..."
memory: "..."
limits:
cpu: "..."
memory: "..."
securityContext: # REQUIRED
runAsNonRoot: true
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
Label Requirements
metadata:
labels:
app.kubernetes.io/name: <app> # REQUIRED
app.kubernetes.io/instance: <app> # REQUIRED
app.kubernetes.io/managed-by: argocd # REQUIRED for platform apps
GPU Workload Checks
# If nvidia.com/gpu is requested:
tolerations:
- key: nvidia.com/gpu # REQUIRED
operator: Exists
effect: NoSchedule
nodeSelector:
nvidia.com/gpu.present: "true" # RECOMMENDED
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> # REQUIRED
namespace: <namespace> # REQUIRED
chart: <chart> # REQUIRED (or path for kustomize)
repoURL: <url> # REQUIRED
targetRevision: "<version>" # REQUIRED, must be quoted string
Values Validation
# Extract and validate values
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
# Pre-commit hook
#!/bin/bash
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
- @.claude/rules/kubernetes.md
- @.claude/rules/argocd-apps.md
- https://github.com/yannh/kubeconform
- https://github.com/zegl/kube-score
Exemples
Consultez les exemples du dépôt source.
Voir la source ↗Historique source
- Date d’indexation
- 2026-01-20
- Mise à jour de l’index
- 2026-01-26
- Branch
- main
Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!