Skip to content
LatchkeyLatchkey home

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

kubevalkubeconform
--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

Terminal
# 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.

Using this in CI

A runner has no kubeconfig, no cached context, and no interactive auth. Every kubectl invocation in CI needs the context supplied explicitly, and most confusing CI failures here are the command running against the wrong cluster or no cluster at all.

Terminal
# never rely on the ambient context on a runner
kubectl --context "$KUBE_CONTEXT" -n "$NAMESPACE" get pods

# confirm what you are actually connected to before mutating anything
kubectl config current-context
kubectl cluster-info

# fail fast instead of hanging on an unreachable API server
kubectl --request-timeout=30s get nodes

Frequently asked questions

kubeval Deprecated: Migrating to kubeconform?
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.
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.

Related guides

References

Run this faster and cheaper on Latchkey managed runners - self-healing included. Start free → 30-day trial · No credit card