A logo showing the text blog.marcnuri.com
English
Inicio»Operaciones»Kubernetes: Operador vs. Controller

Entradas Recientes

  • Fabric8 Kubernetes Client 7.2.0 está disponible!
  • Conectarse a un servidor MCP con JavaScript y AI SDK
  • Conectarse a un servidor MCP con JavaScript y LangChain.js
  • El Futuro de las Herramientas para Desarrolladores en la era de la IA
  • Conectarse a un servidor Model Context Protocol (MCP) con Java y LangChain4j

Categorías

  • Antiguo
  • Front-end
  • Go
  • Herramientas
  • Industria y negocios
  • Inteligencia Artificial
  • Java
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales

Archivos

  • mayo 2025
  • abril 2025
  • marzo 2025
  • febrero 2025
  • enero 2025
  • diciembre 2024
  • noviembre 2024
  • agosto 2024
  • junio 2024
  • mayo 2024
  • abril 2024
  • marzo 2024
  • febrero 2024
  • enero 2024
  • diciembre 2023
  • noviembre 2023
  • octubre 2023
  • septiembre 2023
  • agosto 2023
  • julio 2023
  • junio 2023
  • mayo 2023
  • abril 2023
  • marzo 2023
  • febrero 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • agosto 2022
  • julio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • diciembre 2020
  • octubre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • octubre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • enero 2017
  • julio 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • marzo 2014
  • febrero 2011
  • junio 2008
  • mayo 2008
  • abril 2008
  • enero 2008
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007

Kubernetes: Operador vs. Controller

2020-12-28 en Operaciones etiquetado Kubernetes / Operadores / Controladores / DevOps / OpenShift por Marc Nuri | Última actualización: 2025-01-29
English version

Introducción

Los términos Kubernetes Operator y Kubernetes Controller a menudo se usan indistintamente o se malinterpretan, lo que lleva a confusión entre desarrolladores y operadores por igual. Si bien ambos son fundamentales para la extensibilidad y las capacidades de automatización de Kubernetes, cumplen propósitos distintos.

En este artículo, aclararé las diferencias entre estos dos patrones, destacaré sus casos de uso y proporcionaré ejemplos actualizados para ayudarte a comprender mejor sus roles en los entornos de Kubernetes modernos.

Kubernetes Controllers

Los Kubernetes Controllers son la columna vertebral de su modelo declarativo. Implementan un bucle de control (control loop), un concepto tomado de los sistemas de control industrial, donde monitorean continuamente el estado del clúster y lo reconcilian con el estado deseado definido en las especificaciones de recursos.

Consejo

Un bucle de control es el bloque de construcción fundamental de los sistemas de control industrial.

Consiste en todos los componentes físicos y funciones de control necesarios para ajustar automáticamente el valor de una variable de proceso medida (PV) para que sea igual al valor de un punto de ajuste deseado (SP).

Un Kubernetes Controller es un bucle de control que monitorea el estado de los recursos del clúster y toma las medidas necesarias para llevarlos a un estado deseado. Según la documentación de Kubernetes, los controladores siguen este patrón:

  1. Observar el estado actual de los recursos del clúster.
  2. Compararlo con el estado deseado definido en la especificación de un objeto de Kubernetes.
  3. Actuar para reconciliar las diferencias, si es necesario.

Ejemplos de Controladores integrados en Kubernetes

  • Controlador ReplicaSet: Asegura que el número de Pods coincida con las réplicas deseadas especificadas en un ReplicaSet.
  • Controlador StatefulSet: Gestiona aplicaciones con estado asegurando un despliegue y escalado ordenado.
  • Controlador DaemonSet: Garantiza que un Pod se ejecute en todos (o nodos específicos) de un clúster.

Casos de uso personalizados

Los Controllers no se limitan a los recursos integrados de Kubernetes. Los desarrolladores pueden crear Controllers personalizados para necesidades específicas:

  • Controlador de Anotaciones: Asegura que todos los Pods tengan una anotación con un valor específico. El controlador monitorea los recursos tipo Pod y agrega automáticamente la anotación a todos los Pods al crearse o modificarse. Por ejemplo, el controlador podría agregar automáticamente la anotación controlled-by: dumb a todos los Pods.
  • Controlador de Seguridad de Servicios: Elimina cualquier recurso de tipo Service que sea de tipo NodePort. El controlador monitorea los recursos de tipo Service y elimina cualquier Service creado o modificado para ser de tipo NodePort.

Estos ejemplos demuestran que el ámbito principal de un Controller es hacer cumplir un estado deseado, independientemente de si implica lógica integrada o personalizada.

Kubernetes Operators

Un Operador de Kubernetes es un controlador especializado que extiende las APIs de Kubernetes utilizando Custom Resource Definitions (CRDs) para gestionar aplicaciones complejas. El término fue acuñado por CoreOS y desde entonces ha evolucionado hasta convertirse en un patrón fundamental en Kubernetes.

Los Operadores esencialmente actúan como "operadores humanos" codificados en software. Automatizan tareas que tradicionalmente requerirían intervención manual por parte de un administrador.

Principales características de un Operator

  • Utiliza el controller-pattern para reconciliar el estado.
  • Extiende la API de Kubernetes con CRDs para introducir nuevos tipos de recursos.
  • Codifica conocimientos operativos para automatizar tareas como copias de seguridad, actualizaciones y escalado.
  • Gestiona una única aplicación y su ciclo de vida. A diferencia de los controladores genéricos, los Operadores son específicos de la aplicación y se centran en gestionar una única aplicación o componente.

Ejemplos de Operadores

  • Strimzi Operator: Gestiona clústeres de Apache Kafka en Kubernetes.
  • Prometheus Operator: Implementa y gestiona instancias de monitorización de Prometheus.
  • PostgreSQL Operator: Automatiza el despliegue y la gestión de bases de datos PostgreSQL.

Los Operadores se crean comúnmente utilizando el Operator SDK y se despliegan con el Operator Lifecycle Manager (OLM).

Cuándo usar un Controller vs. un Operator

Un Controller básico puede ser suficiente si:

  • Tu automatización solo requiere observar recursos integrados de Kubernetes.
  • Tu lógica no requiere una nueva abstracción de la API de Kubernetes.

Utiliza un Operator cuando:

  • Necesitas introducir un nuevo tipo de recurso específico para tu aplicación.
  • La aplicación requiere conocimientos operativos específicos del dominio, como actualizaciones, escalado y manejo de fallos.
  • Quieres proporcionar a los usuarios una experiencia nativa de Kubernetes para gestionar la aplicación.

Conclusión

Todos los Operadores son Controllers, pero no todos los controladores son Operadores. Los Controllers se centran en hacer cumplir comportamientos nativos de Kubernetes, mientras que los Operadores extienden Kubernetes para gestionar aplicaciones complejas con conocimientos específicos del dominio.

Si bien los controladores pueden escribirse en cualquier lenguaje, el uso de frameworks como el Operator SDK simplifica el desarrollo y reduce el código repetitivo. Entender cuándo usar un Controller frente a un Operador puede ayudar a los desarrolladores a construir mejores soluciones de automatización para las cargas de trabajo de Kubernetes.

Referencias

  • Stack Overflow: What is the difference between a Kubernetes Controller and a Kubernetes Operator?
  • Kubernetes.io:
    • Controllers
    • Operators Pattern
  • GitHub: [Discussion] Operators vs. controller pattern
  • CoreOS: Operators
  • InfoQ: Kubernetes Operators in Depth
Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

Navegador de artículos
Cómo instalar Prometheus y Grafana en MinikubeEclipse JKube: Herramientas y plugins de Java para Kubernetes y OpenShift
© 2007 - 2025 Marc Nuri