Note_Tech

All technological notes.


Project maintained by simonangel-fong Hosted on GitHub Pages — Theme by mattgraham

Kubernetes - Custom Resource Definition(CRD)

Back


Custom Resource Definition(CRD)

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: flighttickets.com
spec:
  # if a namespaced object
  scope: Namespaced
  # group in the apiVersion section
  group: flight.com
  names:
    # resouce kind
    kind: FlightTicket
    # singular name
    singular: flightticket
    # plural name; used by API server, e.g., k api-resources
    plural: flightticket
    # short version name:
    shortNames:
      - ft
  versions:
    # version name in the apiVersion section
    - name: v1
      served: true
      storage: true
      # the parameters can be define in the spec section
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                from:
                  type: string
                to:
                  type: string
                number:
                  type: integer
                  minimum: 1
                  maximum: 10
      selectableFields:
        - jsonPath: .spec.from
        - jsonPath: .spec.to
        - jsonPath: .spec.number
      additionalPrinterColumns:
        - jsonPath: .spec.from
          name: From
          type: string
        - jsonPath: .spec.to
          name: To
          type: string
        - jsonPath: .spec.number
          name: Number
          type: integer
apiVersion: flights.com/v1
kind: FlightTicket
metadata:
  name: my-ticket
spec:
  from: London
  to: Paris
  number: 2

Custom Controller


Operator Framework


Imperative Commands

CMD DESC
kubectl get crd List crd

Lab: Create CRD

# crd-crontab.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: crontabs.stable.example.com
spec:
  group: stable.example.com
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                image:
                  type: string
                replicas:
                  type: integer
  scope: Namespaced
  names:
    plural: crontabs
    singular: crontab
    kind: CronTab
    shortNames:
      - ct
kubectl apply -f crd-crontab.yaml
# customresourcedefinition.apiextensions.k8s.io/crontabs.stable.example.com created

kubectl get crd
# NAME                          CREATED AT
# crontabs.stable.example.com   2026-01-16T03:22:35Z
# my-crontab.yaml
apiVersion: "stable.example.com/v1"
kind: CronTab
metadata:
  name: my-new-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-awesome-cron-image
  replicas: 3
kubectl apply -f my-crontab.yaml
# crontab.stable.example.com/my-new-cron-object created

kubectl get ct
# NAME                 AGE
# my-new-cron-object   48s