derailed/k9s · warning

CRD %s is no longer served by the api server

Error message

CRD %s is no longer served by the api server

What it means

CRD diagnose message when no entry in spec.versions has served: true. A CRD in this state cannot be served at all — every version is disabled — so all its custom resources are unreachable even though the CRD object remains.

Source

Thrown at internal/render/crd.go:121

	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. Patch the CRD so the current version has served: true and exactly one storage: true
  2. Check the managing operator's logs/status for a stalled upgrade
  3. If the CRD is obsolete, delete it instead of leaving an unservable shell

Example fix

# before: all versions served:false
# after
versions:
- name: v1
  served: true
  storage: true
Defensive patterns

Strategy: fallback

Validate before calling

served := slices.ContainsFunc(crd.Spec.Versions, func(v v1.CustomResourceDefinitionVersion) bool {
	return v.Served
})
if !served {
	// exclude CRD from automation; needs operator fix
}

Prevention

When it happens

Trigger: Flipping served: false on every version (e.g. staged migration gone wrong); an operator reconciliation that disabled versions before enabling replacements; CRDs left mid-edit.

Common situations: Version migrations that un-serve old versions before the new one is marked served; manual YAML surgery on CRDs; interrupted operator upgrades.

Related errors


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