57

I recently applied this CRD file

https://raw.githubusercontent.com/jetstack/cert-manager/release-0.11/deploy/manifests/00-crds.yaml

With kubectl apply to install this: https://hub.helm.sh/charts/jetstack/cert-manager

I think I managed to apply it successfully:

xetra11@x11-work configuration]$ kubectl apply -f ./helm-charts/certificates/00-crds.yaml --validate=false
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created

But now I would like to "see" what I just applied here. I have no idea how to list those definitions or for example remove them if I think they will screw up my cluster somehow.

I was not able to find any information to that here: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#preparing-to-install-a-custom-resource

xetra11
  • 7,671
  • 14
  • 84
  • 159

6 Answers6

63

kubectl get customresourcedefinitions, or kubectl get crd.

You can then use kubectl describe crd <crd_name> to get a description of the CRD. And of course kubectl get crd <crd_name> -o yaml to get the complete definition of the CRD.

To remove you can use kubectl delete crd <crd_name>.

t3ng1l
  • 895
  • 9
  • 23
  • `kubectl get customresourcedefinitions` and `kubectl get crd` lists all Custom Resource Definitions scoped with `cluster` (and perhaps the the CRDs in the namespace you have in your context at the moment? Not sure...). I'm guessing you can run `kubectl get crd --all-namespaces` (I haven't tried using a namespace scoped CRD myself) to get the CRD's scoped to specific namespaces. – t3ng1l Mar 10 '21 at 17:57
  • I would like to do: `kubectl get all --all-namespaces` and see CRDs – Alexander Oh Mar 10 '21 at 19:08
10

Custom Resources are like any other native Kubernetes resource.

All the basic kubeclt CRUD operations work fine for CRDs. So just use any of the below commands.

kubectl get crd <name of crd>
kubectl describe crd <name of crd>
kubectl get crd <name of crd> -o yaml 
Ivan Aracki
  • 4,861
  • 11
  • 59
  • 73
3

First, you can list all your CRD's with kubectl get crd for example:

$ kubectl get crd
  NAME                                                        CREATED AT
  secretproviderclasses.secrets-store.csi.x-k8s.io            2022-07-06
  secretproviderclasspodstatuses.secrets-store.csi.x-k8s.io   2022-07-06

This is the list of available CRD's definitions, then you take the name of one and launch a kubectl get <crd_name> to get a list of applied resources from this CRD. For example:

$ kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io
  NAME       AGE
  azure-kv   5d

Note: Use -A to target all namespaces or -n <namespace>

Juan-Kabbali
  • 1,961
  • 15
  • 20
3

List the crds (no namespace as crds are cluster scoped):

kubectl get crds

Describe the crd:

kubectl describe crd challenges.acme.cert-manager.io
Murari Goswami
  • 188
  • 1
  • 7
2

You may arrive here confused about why you see your CRDs in kubectl get api-resources, e.g. this Istio Telemetry resource:

kubectl api-resources --api-group=telemetry.istio.io
NAME          SHORTNAMES   APIVERSION                    NAMESPACED   KIND
telemetries   telemetry    telemetry.istio.io/v1alpha1   true         Telemetry

but then attempting to kubectl describe them yields an error like

kubectl describe crd Telemetry.telemetry.istio.io
Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "Telemetry.telemetry.istio.io" not found

or

kubectl describe crd telemetry.istio.io/v1alpha1
error: there is no need to specify a resource type as a separate argument when passing arguments in resource/name form (e.g. 'kubectl get resource/<resource_name>' instead of 'kubectl get resource resource/<resource_name>'

That's because you must use the plural form of the full name of the CRD. See kubectl get crd for the names, e.g.:

$ kubectl get crd |grep -i telemetry
telemetries.telemetry.istio.io                                     2022-03-21T08:49:29Z

So kc describe crd telemetries.telemetry.istio.io will work for this CRD.

Craig Ringer
  • 307,061
  • 76
  • 688
  • 778
1

Since CRDs are not namespaced (but in cluster scope), you'll probably want to list all the custom resources that were created in a specific namespace:

kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>

You can read more about it here https://github.com/kubernetes/kubectl/issues/151

Noam Manos
  • 15,216
  • 3
  • 86
  • 85