Kubernetes reports different apiVersion for the same Deployment

5/22/2020

Due to Kubernetes removing deprecated API I am trying to figure out an apiVersion of resources in a cluster and came across the following behavior.

When requesting definition for specific deployment, it reports an old api version:

> kubectl get deployment/some-deployment -o yaml
apiVersion: extensions/v1beta1
kind: Deployment
...

Bud when requesting it for all resources api version reported as new for the same resource:

> kubectl get all -o yaml
...
- apiVersion: apps/v1
  kind: Deployment
...

Same goes when checking selfLink in metadata:

kubectl get all -o=custom-columns=NAME:.metadata.name,API-version:.metadata.selfLink
and
kubectl get deployment/some-deployment -o=custom-columns=NAME:.metadata.name,API-version:.metadata.selfLink

How should this be interpreted?

Kubernetes version is 1.15.7.

-- Aleksandr Erokhin
kubernetes

1 Answer

5/22/2020

Quoted from here

kubectl get deployment foo is ambiguous, since the server has deployments in multiple api groups. When a resource exists in multiple api groups, kubectl uses the first group listed in discovery docs published by the server which contains the resource. For backwards compatibility, that is the extensions api group.

If you want to ensure you get a deployment in the apps api group, fully qualify the resource you are requesting by running kubectl get deployments.apps test-nginx

If you want a specific version, like v1, in the apps api group, include that as well: kubectl get deployments.v1.apps test-nginx

Also from here

What stored version is used for?

It is the serialized version in etcd. Whenever you fetch an object, the api server reads it from etcd, converts it into an internal version, then converts it to the version you requested.

So, If you run

$ kubectl get deployments nginx -o name
deployment.extensions/nginx

As you can see requested version for above command is deployment.extensions

And If you run

$ kubectl get all -o name
...
deployment.apps/nginx

The requested version is deployment.apps. so, it returns the version with apps/v1

Ref: https://github.com/kubernetes/kubernetes/issues/58131

-- hoque
Source: StackOverflow