Skip to main content

Deprecated APIs Dashboard

The Deprecated APIs Dashboard provides a list of deprecated Kubernetes APIs and important details:

  • API Version & Kind: The full name of the deprecated API and its resource kind.
  • Kubernetes Version: The current version of the cluster where the API was found.
  • Deprecated In: The Kubernetes version in which the API was officially marked as deprecated.
  • Unavailable In: The future Kubernetes version in which the API will no longer be available.
  • Migrate To: The recommended new API version that you should migrate your resources to.
  • Resource Count: The number of live resources currently using this deprecated API. A count greater than zero indicates that action is required.

Deprecated APIs

This dashboard provides the insights to let teams know where and how to prioritize the proper migration. There are 4 different severities:

  • Critical: already deprecated in current kubernetes version and resource count > 0
  • High: already deprecated in current kubernetes version and resource count is 0
  • Medium: will be deprecated in next kubernetes minor version and resource count > 0
  • Info: will be deprecated in next kubernetes minor version and resource count is 0

Understanding the Resource Count

The Resource Count is based on the API version Kubernetes uses to store each resource in etcd, not the apiVersion written in your Git manifests or displayed in Argo CD. These can differ.

Kubernetes APIs, including those defined by Custom Resource Definitions (CRDs), can be served under several versions at the same time, but every object is persisted under a single storage version, usually the newest, non-deprecated one. When you apply a resource using a deprecated apiVersion, Kubernetes converts it to the storage version before saving it. Argo CD, by contrast, treats the apiVersion in your Git manifest as the source of truth and displays that.

Because of this, a resource can show a deprecated apiVersion in Argo CD while still contributing zero to the Resource Count: the live object is actually stored under a newer version. This is expected behavior. A Resource Count of zero means no live objects are stored under the deprecated API, so no migration is required for it.

note

To check the storage version of a CRD, run:

kubectl get crd <crd-name> -o jsonpath='{.spec.versions[?(@.storage==true)].name}'

If the storage version is already a non-deprecated version, a deprecated apiVersion in your manifests is harmless. Kubernetes never persists an object under it.