Un Custom Resource (CR) es una extensión de la API de Kubernetes que permite a los usuarios definir sus propios tipos de objetos. A diferencia de los recursos built-in como Pods, Deployments o Services, los CRs no están disponibles por defecto en una instalación estándar de Kubernetes. Se definen mediante un CustomResourceDefinition (CRD), que es un recurso de Kubernetes que describe el esquema y la validación de un nuevo tipo de objeto. Una vez que un CRD se aplica a un clúster, los usuarios pueden crear, actualizar y eliminar objetos de ese nuevo tipo utilizando las herramientas estándar de Kubernetes (kubectl, clientes API), y el control plane los almacenará en etcd.
La implementación de Custom Resources es fundamental en el ecosistema de Kubernetes para extender su funcionalidad. Por ejemplo, operadores como el de Prometheus o el de Apache Kafka utilizan CRs para definir recursos como 'Prometheus' o 'KafkaTopic', permitiendo a los usuarios declarar el estado deseado de estas aplicaciones complejas directamente a través de la API de Kubernetes. Otro ejemplo es Crossplane, que utiliza CRs para representar y gestionar recursos de infraestructura cloud (bases de datos, colas, etc.) de proveedores como AWS, GCP o Azure, permitiendo a los desarrolladores aprovisionar infraestructura declarativamente desde Kubernetes.
Para un arquitecto, los Custom Resources son cruciales porque permiten modelar y gestionar la complejidad de las aplicaciones y la infraestructura de manera declarativa dentro de Kubernetes. Esto facilita la automatización, la estandarización y la observabilidad. Sin embargo, su uso implica trade-offs: la definición de CRDs requiere un diseño cuidadoso del esquema para asegurar la estabilidad y la compatibilidad futura. Además, la lógica para actuar sobre estos CRs debe ser implementada por un 'controller' o 'operator' separado, lo que añade complejidad al desarrollo y mantenimiento. La elección de cuándo usar un CR frente a una configuración externa o un patrón de diseño diferente es una decisión estratégica que impacta la mantenibilidad, la escalabilidad y la integración del sistema.