¿Qué es Kubernetes y Openshift?


Intentar explicar en 5 lineas que hace exactamente un producto no es siempre una tarea sencilla y para explicar que es Kubernetes y Openshift quizás sería una tarea sencilla si hubiese nacido con el don de la oratoria pero no ha sido así. Quizás  la forma más intuitiva de entender estos dos productos es explicar primero cuales son las problemáticas actuales y una vez puestas sobre la mesa, ver como podemos dar solución con los productos comentados.

En este post nos hemos de poner la gorra de aquellas personas que se encargan de mantener en producción los sistemas y desgraciadamente acostumbran a encontrarse en el punto de mira de todo el mundo.

El fin de cualquier proyecto se da cuando se finaliza el desarrollo y se promociona al entorno productivo, momento en el cual se entrega las llaves del sistema desarrollado a un equipo de producción para su mantenimiento. En esta entrega normalmente se debe documentar que hace el sistema, que integraciones tiene y un manual de operación que detalla como arrancarlo y pararlo, así como un FAQ sobre problemas típicos en que los operadores pueden encontrarse y como actuar en caso que los problemas explicados ocurran.

Todo esto parece muy lógico y razonable, y cualquier persona ajena al gremio pensaría que con ese traspaso se solucionan todos los problemas habidos y por haber. La realidad es muy distinta y en el momento en que un sistema entra en producción pueden pasar miles de cosas imprevisibles.

Uno de los principales problemas que nos podemos encontrar con nuestro sistema es que una modificación en la configuración del sistema donde tenemos desplegada nuestra aplicación o incluso del propio sistema operativo, inicia un efecto en cadena de caos y destrucción. Un simple cambio que a simple vista puede parecer inofensivo, puede llegar a desatar una caída en cascada de todos los sistemas y estoy más que seguro que muchos de los que estáis leyendo esto, en estos momento estáis rememorando alguna situación similar.

La llegada de la tecnología basada en Containers soluciono gran parte del problema comentado, más concretamente la implementación de Docker, que permitió aislar las aplicaciones dentro de Containers y blindarlas de daños colaterales provocados por configuraciones en otros sistemas compartidos o de sistema operativo.

De todas formas, hay otros problemas que los Containers no han sido capaces de resolver, como por ejemplo, la detección y reacción ante caídas parciales o totales del sistema. Por mucho que los Containers sean muy sencillos de parar y arrancar, nos encontramos que cada departamento de producción requiere de implantar su propio sistema para monitorizar el correcto estado de cada uno de los sistemas que se encuentran desplegados. Los Containers no ofrecen ninguna solución a que hacer cuando estos se mueren repentinamente, por lo que se requiere del factor humano para detectar y reaccionar ante una caída.

Y por meter más leña al fuego, si no tuviéramos suficientes problemas, debemos sumarle a todos ellos los problemas de escalabilidad de las aplicaciones, las cuales cuando requieren de un scale up muchas veces hay que volver a diseñar o añadir piezas de infraestructura para poderse dimensionar adecuadamente y considerar minuciosamente posibles adversidades como rangos de ips, conectividades, balanceadores, resolución de DNS.... sin tener en cuenta la propia infraestructura.

Quizás, llegados a este punto donde cualquiera se plantearía porque formar parte de un equipo de producción, es un buen momento para empezar a explicar el motivo por el que Kubernetes y Openshift nos resuelven todos estos problemas.

Openshift es un PaaS que su core está basado en Kubernetes y ofrece las funcionalidades de Kubernetes más alguna funcionalidad extra de su propia cosecha, por lo que no profundizaremos en el caso de Openshift porque entendiendo que es Kubernetes de forma directa se entiende que es Openshift.

¿Qué es Kubernetes?

Kubernetes es un orquestrador de Docker Containers que nos gestiona todo el ciclo de vida de estos. Para entender mejor esta definición, será mejor que expliquemos que hace.


  • Kubernetes nos permite definir que Docker Containers queremos ejecutar y con que configuración de arranque y él se encarga de iniciarlos por nosotros.
  • Kubernetes nos permite definir reglas de Health Check sobre cada uno de los Docker Containers arrancados y se encarga periódicamente de validar si la aplicación responde OK a estas reglas. En caso que las reglas no pasen el test, entonces Kubernetes nos reinicia la aplicación por nosotros.
  • Kubernetes permite escalar nuestra aplicación de forma manual o de forma automática a partir de los consumos de CPU y cuando estos superan un umbral el cual se considera que puede haber degradación de servicio.
  • Kubernetes nos permite montar volúmenes dentro de nuestros Docker Container de forma homogénea entre diferentes tipos de Remote Storage (GlusterFS, NFS, S3, ELB, iSCSI...)
  • Kubernetes nos permite la gestión de Secrets en nuestras aplicaciones para que los desarrolladores no hayan de tener contacto con datos sensibles como passwords de producción.
  • Kubernetes nos ofrece la configuración de nombres de DNS sobre nuestras aplicaciones.
  • Kubernetes nos ofrece la creación de balanceadores cuando nuestras aplicaciones deben escalar en varias instancias.
  • Kubernetes gestiona un pool de máquinas y despliega sobre estas nuestros Docker Containers, ofreciendo una subnet virtual y asignando IPs de esta subnet sobre los Docker Containers, permitiendo así una independencia a nivel de red sobre la infraestructura, pudiendo esta escalar según necesidades.
  • Kubernetes detecta caídas de las máquinas de su pool y se encarga automáticamente de redesplegar todo lo que había en la máquina caída en otras máquinas disponibles del pool que gestiona.
  • Kubernetes permite la gestión de seguridad de acceso a los elementos desplegados en él, permitiendo definir que y quien puede o no acceder a cada Docker Container.


El listado indicado es solo la punta del iceberg de todo lo que nos permite realizar Kubernetes, pero ya adelanto que Kubernetes simplifica muchos de los problemas que nos encontramos actualmente en la producción de los sistemas.

Este post es únicamente una introducción a Kubernetes y en los siguientes posts iremos descubriendo de forma práctica las principales funcionalidades que nos ofrece.

No hay comentarios