Saltar a contenido

CRDs, Custom Resources y Operators

CRD (Custom Resource Definition): Ampliando el Vocabulario

Por defecto, el kube-apiserver (el cerebro de Kubernetes) conoce un vocabulario limitado: Pods, Deployments, Services, Secrets, etc.

Pero, ¿qué pasa si quieres que Kubernetes entienda qué es una BaseDeDatosMySQL, un CertificadoSSL o un BackupProgramado? Para eso usamos los CRDs.

  • CRD (El Molde): Es una definición que le dice a Kubernetes: "A partir de hoy, vas a aceptar recursos de tipo BaseDeDatosMySQL". Define el esquema y las validaciones.

  • CR (Custom Resource - El Objeto): Es la instancia real. Una vez creado el CRD, tú puedes crear un archivo YAML de tipo Kind: BaseDeDatosMySQL (este es tu CR) y enviarlo al clúster.

Operators (Operadores): Poniéndole Cerebro al Molde

Hay un problema: si tú creas un CRD y luego creas un CR, no pasa absolutamente nada. Kubernetes guarda tu YAML en etcd y dice "Ok, lo guardé", pero no sabe cómo instalar un MySQL.

Aquí entra el Operador.

  • La Fórmula Mágica: Operador = CRD + Controlador Personalizado

  • ¿Qué es en la práctica? Un Operador es simplemente una aplicación (usualmente un Deployment con uno o más Pods corriendo en tu clúster) que está programada para vigilar (watch) los Custom Resources que creaste.

  • ¿Cómo funciona? El Operador lee tu YAML de BaseDeDatosMySQL (que dice que quieres 3 réplicas y X GB de disco) y él mismo se encarga de hablar con la API de Kubernetes para crear los Pods, los StatefulSets y los Servicios necesarios por debajo para cumplir ese estado deseado. ¡Es como tener a un administrador humano automatizado en código!

Instalación y Configuración (Pasos Clave)

Ya sea en un examen o en la vida real, el despliegue de un Operador (como Prometheus Operator, Cert-Manager, o ArgoCD) siempre sigue esta secuencia lógica:

  1. Instalar los CRDs: Primero debes enseñarle el nuevo vocabulario al clúster.
kubectl apply -f mis-crds.yaml
  1. Configurar RBAC (Permisos): El Operador va a necesitar permisos para crear cosas en tu clúster. Se le debe crear una ServiceAccount, un ClusterRole y un ClusterRoleBinding.

  2. Desplegar el Controlador (El Operador): Despliegas el Pod que contiene la lógica.

kubectl apply -f operator-deployment.yaml
  1. Crear el Custom Resource (CR): Ahora sí, le pasas tu YAML personalizado y dejas que el Operador trabaje.

Troubleshooting y Tips de Velocidad (Modo Examen)

  • ¿Cómo saber qué CRDs existen en el clúster?
    kubectl get crd (Si no ves el CRD aquí, el clúster rechazará tus Custom Resources con un error de "the server doesn't have a resource type").

  • ¿Cómo ver los Custom Resources?
    Si el CRD se llama certificados.midominio.com, puedes listar los recursos creados con: kubectl get certificados.

  • El CR no hace nada (Atascado): Si aplicas un Custom Resource y no pasa nada, el problema no es el CR. El problema es que el Pod del Operador (el cerebro) está caído, crasheando (CrashLoopBackOff), o sus permisos RBAC están mal configurados y no puede leer tu CR. Revisa los logs de ese Pod: kubectl logs deploy/mi-operador.