¿Cuál es la diferencia entre OpenShift y Kubernetes?

Kubernetes es un proyecto de código abierto (o incluso un framework), mientras que OpenShift es un producto empresarial y un Kubernetes totalmente certificado en el backend. OKD es la versión de código abierto que es el proyecto upstream de Red Hat OpenShift.

Podemos imaginar la diferencia entre un motor y un coche. OpenShift no es una alternativa a Kubernetes sino que OpenShift está construido sobre Kubernetes. Kubernetes fue originalmente desarrollado y diseñado por Google pero OpenShift es desarrollado por Red Hat. OpenShift ha agregado un montón de características que faltaban en Kubernetes y lo hizo como una plataforma de contenedores lista para usar.

Container as a Service (CaaS) vs Platform as a service (PaaS)

Kubernetes es una plataforma más similar a Container as a Service (CaaS), ya que Kubernetes por sí solo no proporciona ningún soporte para construir la imagen del contenedor que ejecuta. Los usuarios tienen que instalar herramientas y plugins adicionales para construir imágenes de contenedores, mantener las imágenes de contenedores, etc. Por otro lado, OpenShift es una plataforma con todas las funciones para desplegar y gestionar sus aplicaciones en contenedores y por ello se denomina Plataforma como Servicio (PaaS). OpenShift tiene herramientas incorporadas para construir las imágenes, registro interno para almacenar imágenes, pipelines de OpenShift para operaciones CI/CD nativas de la nube, etc.

Consola web

Sí, tanto OpenShift como Kubernetes tienen la interfaz gráfica de usuario web, pero conocemos las limitaciones, los pros y los contras.

El dashboard de Kubernetes no se instala por defecto, hay que instalarlo adicionalmente según las necesidades. La consola web de OpenShift es amigable para los desarrolladores y muy fácil de usar. Podés hacer casi todas las operaciones desde la propia consola web, incluyendo el monitoreo, la visualización de tus pipelines, la construcción de imágenes, la visión general del estado de la aplicación, etc.

Automatización del flujo de trabajo

Todos sabemos que vamos a tener flujos de trabajo complejos para desplegar aplicaciones en contenedores en plataformas Kubernetes. Necesitamos construir las imágenes de los contenedores, integrarlas con los flujos de trabajo de prueba, desplegarlas en dev o producción, y luego monitorear y retroalimentar el ciclo de vida de la aplicación. La mayoría de estas operaciones son manuales en Kubernetes o es necesario desplegar e integrar herramientas adicionales para estas tareas automatizadas.

Por otro lado, OpenShift tiene características y herramientas incorporadas para apoyar el despliegue de aplicaciones de extremo a extremo y la gestión del ciclo de vida. Por ejemplo: hay plantillas pre creadas disponibles en OpenShift y puede utilizarlas para poner en marcha una aplicación muy rápidamente. Gracias a la tecnología Source to Image (S2I), puede desplegar una aplicación a partir de su código fuente sin necesidad de conocer los detalles del contenedor; OpenShift detectará el lenguaje del código fuente, elegirá una imagen constructora para construir la imagen del contenedor y, a continuación, desplegará la aplicación utilizando la imagen del contenedor creada. También dispone de herramientas CI/CD integradas para crear sus pipelines y flujos de trabajo.

Despliegue de aplicaciones y CI/CD

El despliegue de una aplicación en Kubernetes no es tan simple – no me refiero a un simple pod nginx, sino a una aplicación completa con múltiples flujos de trabajo. Las características de OpenShift como S2i, CI/CD incorporado, plantillas y catálogos, etc. harán que el despliegue de la aplicación sea muy fácil.

Cloud Agnostic

Se pueden desplegar Kubernetes en la mayoría de las plataformas en la nube, pero esos Kubernetes gestionados son diferentes de uno a otro en términos de características y soporte. Existen opciones como Amazon Elastic Kubernetes Service (Amazon EKS), Azure Kubernetes Service o AKS, Google Kubernetes Engine o GKE, IBM Cloud Kubernetes Service o CKS y otros servicios Kubernetes gestionados de DigitalOcean, Linode, etc. 

Hay una solución similar de Red Hat para OpenShift llamada Hosted o Managed OpenShift, pero la plataforma OpenShift, la experiencia del usuario y las características son las mismas en todas las plataformas de nube y nubes privadas.

Sistemas operativos compatibles

Lo ideal es desplegar Kubernetes en la mayoría de los sistemas operativos Linux de uso general, como CentOS, Red Hat Enterprise Linux, Ubuntu, Debian, Fedora, etc.

Pero para OpenShift necesitás Red Hat Enterprise Linux (RHEL) o Red Hat Enterprise Linux CoreOS (RHCOS). Y si está utilizando OKD, entonces alternativas como Fedora, CentOS, etc. Debés utilizar máquinas RHCOS para el plano de control de OpenShift, y puede utilizar tanto RHCOS como RHEL para las máquinas de procesamiento.

Instalación del clúster

Se puede instalar Kubernetes en cualquier plataforma de tu elección. Puede ser la nube pública, la nube privada, bare-metal, tu estación de trabajo o portátil o incluso una pequeña placa Raspberry Pi. Y hay muchas herramientas y métodos disponibles para instalar Kubernetes como kubeadm, kubespray, kops o puedes usar servicios gestionados de Kubernetes de la nube pública como GKE, EKS o AKS. 

Por otro lado, OpenShift tiene algunas limitaciones en términos de plataforma, soporte, requisitos, etc. Necesitás una cantidad mínima de recursos para desplegar clusters de OpenShift y no es fácil de desplegar en laboratorios caseros. No hay que preocuparse ya que tenemos otras soluciones para los laboratorios caseros y para practicar. La instalación de OpenShift es bastante sencilla si se utiliza el método Installer Provisioned Infrastructure o IPI. El instalador se encargará de crear todas las máquinas virtuales y otros recursos en la nube pública, la nube privada o la plataforma bare metal. También puede seguir el método de infraestructura aprovisionada por el usuario o UPI si tiene las máquinas ya aprovisionadas con sus propias personalizaciones y normas.

Entorno de desarrollo

Cuando hablamos del entorno de desarrollo, podemos instalar y utilizar minikube en un laptop o estación de trabajo muy rápidamente. La instalación es bastante sencilla y tendrás las mismas características de un cluster de kubernetes. Para un entorno de desarrollo OpenShift tenés una opción similar llamada CodeReady Containers o CRC y la instalación también es bastante sencilla. Tené en cuenta que antes minishift servía para lo mismo, pero a partir de la versión 4 de OpenShift tenés que usar CRC. Si tenés dificultades para configurar tu propio entorno de desarrollo, entonces puedes utilizar el servicio gratuito de Red Hat que se llama Developer Sandbox for Red Hat OpenShift. 

Gestión de las imágenes de los contenedores

En Kubernetes, tenés la responsabilidad de manejar las imágenes de tus contenedores para el despliegue. No hay un registro interno en Kubernetes por el momento y necesitás sacar tus imágenes de un registro externo; puede ser un registro de empresa o tu propio registro privado. Sin embargo, en OpenShift se dispone de un registro interno y OpenShift gestiona el ciclo de vida de las imágenes de los contenedores. Los flujos de imágenes son referencias con nombre a las imágenes de contenedores. La característica Imagestream en OpenShift ayuda a manejar múltiples versiones de sus imágenes de contenedores con etiquetas. Puede configurar las compilaciones y las implementaciones para observar un flujo de imágenes en busca de notificaciones cuando se añaden nuevas imágenes y reaccionar realizando una compilación o una implementación, respectivamente. 

Seguridad

Las reglas de seguridad de Kubernetes son flexibles pero lo suficientemente fuertes como para cumplir con los requisitos de seguridad estándar. Por otro lado, las políticas de seguridad de OpenShift son muy estrictas en comparación con Kubernetes. Es necesario aprender las políticas de seguridad y aplicarlas correctamente para desplegar su aplicación. Sí, es un poco difícil, pero te garantiza que es más seguro.

Redes

La red es un gran apartado pero básicamente Kubernetes utiliza plugins CNI para su red y OpenShift utiliza una red definida por software (SDN) llamada OpenShift SDN, que configura una red superpuesta utilizando Open vSwitch (OVS).

Entrada y rutas

En Kubernetes hay una gestión de tráfico de red múltiple. Ingress gestiona el acceso externo a los servicios de un clúster con soporte para SSL, balanceo de carga, alojamiento virtual, etc. En OpenShift se puede lograr el mismo propósito utilizando el recurso llamado rutas pero con capacidades adicionales como dividir el tráfico entre múltiples backends, sesiones pegajosas y más.

Soporte para empresas

Como todos sabemos, Kubernetes es un proyecto de código abierto y se puede desplegar gratuitamente en las plataformas que elijas. A pesar de que la comunidad activa es bastante grande, las empresas no suelen optar por un producto sin soporte.

Aquí es donde los sabores de kubernetes gestionados y soportados son útiles, pero todavía los errores y las correcciones dependen de la comunidad.

Una plataforma Kubernetes gestionada por un proveedor, como Red Hat OpenShift, puede proporcionar soporte comercial, gestionar actualizaciones y parches, y aumentar la seguridad de Kubernetes y de las aplicaciones nativas de Kubernetes.

¿Por qué Red Hat?

Para todo lo que Kubernetes puede hacer, los usuarios todavía necesitan integrar otros componentes como la red, el balanceo de entrada y de carga, el almacenamiento, el monitoreo, el registro y más.

Red Hat OpenShift ofrece estos componentes con Kubernetes en su core porque por sí mismo, Kubernetes no es suficiente.

Como plataforma de contenedores global, Red Hat OpenShift es más que un producto de software. Puede ser la clave para adoptar una cultura DevOps, automatizando las tareas operativas rutinarias y estandarizando los entornos a lo largo del ciclo de vida de una aplicación.

¿Querés saber más? Comunicate con nosotros y podemos agendar una presentación personalizada.

Podemos acompañarte en tus proyectos end-to-end. Trabajemos juntos.