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: