Saltar al contenido principal

recursos_personalizados

La definición de recursos personalizados o (CRD, Custom Resource Definition) es una de las características más potentes de Kubernetes. Nos permite extender la funcionalidad de Kubernetes añadiendo nuevos tipos de recursos. Estos recursos pueden ser usados por los desarrolladores para definir sus propias abstracciones de alto nivel.

Consultar recursos personalizados

Podemos consultar los recursos personalizados usando el comando kubectl get:

kubectl get crd --all-namespaces

Es muy normal que aparecen recursos personalizados que no hemos definido nosotros. Estos recursos son definidos por otros componentes de Kubernetes. Por ejemplo, el componente metrics-server define el recurso pods.metrics.k8s.io. O por ejemplo, los componentes de calico definen el recurso networkpolicies.crd.projectcalico.org.

Podemos obtener detalles de un recurso personalizado usando el comando kubectl describe:

kubectl describe crd <nombre del recurso>

Definir un recurso personalizado

Para definir un recurso personalizado, debemos crear un fichero YAML con la definición del recurso. Por ejemplo, para definir un recurso personalizado de ejemplo:

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: crontab.example.com
spec:
group: 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

Podemos crear el recurso personalizado usando el comando kubectl create:

kubectl create -f crontab.yaml

Crear un objeto de un recurso personalizado

Para crear un objeto de un recurso personalizado, debemos crear un fichero YAML con la definición del objeto. Por ejemplo, para crear un objeto de ejemplo:

apiVersion: "example.com/v1"
kind: CronTab
metadata:
name: my-new-cron-object
spec:
cronSpec: "* * * * */5"
image: my-awesome-cron-image

A partir de aquí, podemos usar el recurso personalizado como si fuera un recurso nativo de Kubernetes. Por ejemplo, podemos consultar los objetos de un recurso personalizado usando el comando kubectl get:

kubectl get crontab --all-namespaces # Listar todos los objetos crontab de todos los namespaces
kubectl get crontab -n <namespace> # Listar todos los objetos crontab de un namespace
kubectl get crontab <nombre del objeto> -n <namespace> # Obtener detalles de un objeto crontab
kubectl describe crontab <nombre del objeto> -n <namespace> # Obtener detalles de un objeto crontab