Custom Resources

Custom Resource Definition

Let us define a CRD (custom resource definition) for our object:

crd.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: ephemeralvolumeclaims.kopf.dev
spec:
  scope: Namespaced
  group: kopf.dev
  names:
    kind: EphemeralVolumeClaim
    plural: ephemeralvolumeclaims
    singular: ephemeralvolumeclaim
    shortNames:
      - evcs
      - evc
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              x-kubernetes-preserve-unknown-fields: true
            status:
              type: object
              x-kubernetes-preserve-unknown-fields: true

Note the short names: you can use them as aliases on the command line when getting a list or an object of that kind.

And apply the definition to the cluster:

kubectl apply -f crd.yaml

If you want to revert this operation (e.g., to try it again):

kubectl delete crd ephemeralvolumeclaims.kopf.dev
kubectl delete -f crd.yaml

Custom Resource Objects

We can already create objects of this kind, apply them to the cluster, and modify or delete them. Nothing will happen yet, since there is no logic implemented behind these objects.

Let us make a sample object:

obj.yaml
apiVersion: kopf.dev/v1
kind: EphemeralVolumeClaim
metadata:
  name: my-claim

This is the minimal YAML file needed, with no spec or fields inside. We will add them later.

Apply it to the cluster:

kubectl apply -f obj.yaml

Get a list of the existing objects of this kind with one of the commands:

kubectl get EphemeralVolumeClaim
kubectl get ephemeralvolumeclaims
kubectl get ephemeralvolumeclaim
kubectl get evcs
kubectl get evc

Note that the short names are those specified in the custom resource definition.

See also

  • kubectl imperative style (create/edit/patch/delete)

  • kubectl declarative style (apply)