derailed/k9s · warning

%s

Error message

%s

What it means

Not a failure per se: the CRD diagnose pass-through. When a served CRD version has deprecated: true and a deprecationWarning string set, that warning text is surfaced verbatim as the row status so users see the upstream deprecation reason.

Source

Thrown at internal/render/crd.go:114

	return nil
}

func (CustomResourceDefinition) diagnose(n string, vv []v1.CustomResourceDefinitionVersion) error {
	if len(vv) == 0 {
		return fmt.Errorf("unable to assert CRD servers versions for %s", n)
	}

	var (
		ee     []error
		served bool
	)
	for _, v := range vv {
		if v.Served {
			served = true
		}
		if v.Deprecated {
			if v.DeprecationWarning != nil {
				ee = append(ee, fmt.Errorf("%s", *v.DeprecationWarning))
			} else {
				ee = append(ee, fmt.Errorf("%s[%s] is deprecated", n, v.Name))
			}
		}
	}
	if !served {
		ee = append(ee, fmt.Errorf("CRD %s is no longer served by the api server", n))
	}

	if len(ee) == 0 {
		return nil
	}
	errs := make([]string, 0, len(ee))
	for _, e := range ee {
		errs = append(errs, e.Error())
	}

	return errors.New(strings.Join(errs, " - "))

View on GitHub (pinned to 2d3ccc6ba2)

Solutions

  1. Follow the warning: migrate manifests/CRs off the deprecated version
  2. Bump the operator to a release where the version is either supported or removed cleanly
  3. Treat as informational if you already migrated — suppress by removing the deprecated version from the CRD
  4. Track the operator's release notes for removal timelines

Example fix

# before
apiVersion: monitoring.example.com/v1beta1
# after
apiVersion: monitoring.example.com/v1
Defensive patterns

Strategy: fallback

Validate before calling

for _, v := range crd.Spec.Versions {
	if v.Deprecated && v.DeprecationWarning != nil {
		log.Printf("deprecation: %s", *v.DeprecationWarning)
	}
}

Prevention

When it happens

Trigger: Listing CRDs where an installed operator marked a version deprecated with a custom deprecationWarning, e.g. 'example.com/v1beta1 will be removed in v3.0; migrate to v1'.

Common situations: After upgrading operators (cert-manager, prometheus-operator, etc.) that deprecate old API versions with explicit migration warnings.

Related errors


AI-assisted analysis of derailed/k9s@2d3ccc6ba2 (2026-08-15). Data as JSON: /api/errors/082b962246e6a5a6. Report an issue: GitHub.