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:
- Instalar los CRDs: Primero debes enseñarle el nuevo vocabulario al clúster.
-
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.
-
Desplegar el Controlador (El Operador): Despliegas el Pod que contiene la lógica.
- 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 llamacertificados.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.