Skip to content

Czym jest CustomResourceDefinition w Kubernetes?

Jest to rodzaj mechanizmu pozwalający na definiowanie własnych typów obiektów na klastrze, na przykład Osoba lub Miasto, ustalamy własny rodzaj obiektu, co się ma z nim dziać, oraz jakie pola ma mieć tak tworzony obiekt.

Później, po utworzeniu takiego obiektu można zarządzać nim z poziomu API Kubernetesa (i kubectl), tak samo jak Podem, Deploymentem, itd...

Przykładowa definicja CRD dla typu Person

Definicja Resource

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
    name: person.society.com # nazwa naszego Resource
spec:
    scope: Namespaced # czy ma być namespaced, czy nie
    group: society.com # cały zbiór resource, będzie w apiVersion
    names:
        kind: Person # kind dla obiektów, jak Pod
        singular: person # liczba pojedyn
        plural: persons # liczba mnoga
        shortNames:
            - per # skrót
    versions:
        - name: v1 # wersja API
          served: true  # czy widoczna dla klientow (po kubectl np.)
          storage: true # ta wersj API będzie trzymana w etcd
          schema:
              openAPIV3Schema:
                  type: object
                  properties:
                      spec:
                          type: object
                          properties:
                                name: # własne pole
                                    type: string # określamy typ
                                surname:
                                    type: string
                                age:
                                    type: integer
                                    minimum: 1 # minimalna wartość
                         required: ["name", "surname"] # wymagane pola

Definicja Obiektu Person

apiVersion: society.com/v1
kind: Person
metadata:
    name: my-own-person
spec:
    name: Janusz
    surname: Kowalski
    age: 44

i tworzymy taki obiekt:

kubectl apply -f person-definition.yaml