kubeval Deprecated: Migrating to kubeconform
kubeval is no longer maintained; replace it with kubeconform, which tracks current Kubernetes schemas, runs in parallel, and supports CRDs via -schema-location.
If a pipeline still calls kubeval and is failing on recent apiVersions, the fix is usually to migrate to kubeconform rather than to wrestle with kubeval schemas.
Why migrate
kubeval is archived and ships schemas that trail current Kubernetes, so manifests using newer apiVersions fail with could not find schema. kubeconform is actively maintained, faster (it parallelizes), supports CRD schemas through -schema-location, and offers junit/tap/json output for CI.
Flag mapping
| kubeval | kubeconform |
|---|---|
| --strict | -strict |
| --kubernetes-version 1.x | -kubernetes-version 1.x |
| --ignore-missing-schemas | -ignore-missing-schemas |
| --skip-kinds A,B | -skip A,B |
| -o json | -output json |
Migration example
# before
kubeval --strict --kubernetes-version 1.29.0 manifests/
# after
kubeconform -strict -kubernetes-version 1.29.0 -summary manifests/In CI
kubeconform reads stdin with -, so the kustomize pipeline becomes kustomize build overlay | kubeconform -strict -. Both tools exit non-zero on failure, so the pipeline gate behaves the same after swapping the binary and renaming flags.
Common errors in CI
After migrating, could not find schema for <CRD-Kind> appears for custom resources kubeval happened to skip; add their schemas with -schema-location or -ignore-missing-schemas. A double-dash flag like --strict passed to kubeconform errors with flag provided but not defined; kubeconform uses single-dash flags.