OpenShift es un producto de la empresa Red Hat que ofrece funcionalidades de cloud computing basado en Plataforma como servicio (PaaS). Utiliza Kubernetes como controlador de contenedores y Docker como sistema de virtualización de dichos contenedores. Se puede interactuar con OpenShift mediante un panel web o con la terminal utilizando oc.
Tutorial OpenShift actualizado – [Primeros pasos] 0

Resumen del artículo

¿Qué es cloud computing?

Es un termino que parece muy complicado. Pero todo lo contrario. El cloud computing no es más que prestar servicios a través de Internet, sin necesidad de descargas.
Hay diferentes tipos de cloud computing. Divididos en 3 principalmente:

  • Software como servicio (SaaS): Un ejemplo muy simple es GMAIL. Gmail es un servicio (software) en la nube. La empresa Google nos permite utilizar este servicio tanto de forma gratuita como de forma profesional previo pago. Te dan la aplicación ya final desarrollada.
  • Plataforma como servicio (Paas): Es este tipo el que utiliza OpenShift. Es cuando la empresa, por ejemplo Red Hat, crea un entorno de desarrollo, herramientas predefinidas y APIs listas para entrar a utilizar. Otro ejemplo podría ser Google App Engine. Te dan las herramientas para que desarrolles tu propia aplicación.
  • Infraestructura como servicio (IaaS): Este tipo se centra en ofrecerte hardware pero virtual en la red. Según la empresa te ofrecen diferentes sistemas. Un ejemplo es Amazon Web Services (AWS). Te dan los servidores y almacenamiento.

¿Qué es Kubernetes?

Aquí tenéis todas las entradas de este blog sobre Kubernetes. Desde lo más básico hasta lo más avanzado, pasando por trucos y algunas cosas extra. Pero como digo, no necesitas saber esto en profundidad, con solo saber los conceptos llega.

Un breve resumen:

  • Tolerancia a fallos: Crear nuevos Pods si detecta algún fallo o error. Lo da el ReplicaSet.
  • Escalabilidad: Poder aumentar el número de replicas (–replicas) de los Pods. Lo da el ReplicaSet.
  • Balanceo de carga. Permite compartir la carga de trabajo. Lo da el Service.
  • Actualizaciones continúas. También llamado en ingles Rolling Update. Permite actualizar la aplicación sin caídas. Lo da el Deployment.
  • Rollback de nuestra aplicación. Cuando actualizas la aplicación pero por algún motivo no funciona correctamente puedes hacer un rollout y volver a la versión anterior. Lo da el Deployment.
  • Enrutando nuestras aplicaciones. Nos permite utilizar proxys inversos para permitir el acceso a nuestras aplicaciones desde el exterior. Lo da el Ingress.

¿Qué es OpenShift?

Sus características generales son las siguientes:

  • Pensada para los desarrolladores web. Nos centramos en el desarrollo de la aplicación.
  • Utiliza Docker y Kuberentes desde la versión 3. Aunque para utilizarla no necesitas saber como funciona por dentro.
  • Permite crear diferentes entornos para desplegar las aplicaciones. Por ejemplo, crear un entorno de producción y otro de desarrollo.
  • Facilita el ciclo de vida de una aplicación. El desarrollador se centra en la aplicación y OpenShift se encarga de gestionar los tests, las pruebas y finalmente levantar la aplicación.
  • Varias formas para interactuar. Podemos hacerlo por medio de la aplicación web, utilizando la terminal o con su API REST.
  • Gestión sencilla de volúmenes. Almacenamiento para nuestra aplicación.
  • Herramientas de monitorización y métrica de forma nativa.

OpenShift es un producto que implementa nuevas funcionalidades a Kubernetes. Entre las más destacables están source2image. y la monitorización nativa.

Como ya mencioné, una característica de OpenShift es que facilita la vida de una aplicación. Eso es gracias a source2image. En vez de construir nosotros el Dockerfile lo que hace es conectarse con el repositorio de GIT del desarrollador donde tiene la aplicación y creará el Dockerfile automáticamente detectando el lenguaje de programación de la aplicación dentro del repositorio. Esto hace que el desarrollador no necesite saber sobre Docker para poder despegar las imágenes.

Esta es una característica, también podemos utilizar imágenes creadas de manera tradicional por nosotros y tenemos otras formas de levantar nuestra aplicación.

Como podemos utilizar OpenShift

Tiene distintos productos pensados específicamente para cada público:

  • OKD (Origin): Distribución de Kubernetes mantenida por la comunidad. Esta optimizada y contiene las funcionalidades anteriormente mencionadas. Puedes utilizar esta versión en cualquier cluster dentro de tu cloud IaaS como AWS mencionado anteriormente o VMware vSphere entre muchos otros.
  • OpenShift Online: Versión que se ejecuta en el Cloud de RedHat. Es una plataforma donde los desarrolladores pueden subir sus aplicaciones al Cloud de RedHat, no al suyo, está controlado y gestionado por ellos. Tiene 2 planes. Uno gratuito (muy limitado y recomendado solo para pruebas) y uno profesional.
  • OpenShift Dedicated: Es un cluster basado en Cloud gestionado totalmente por RedHat. A diferencia del anterior, este es un cluster entero, no solo una parte. Tiene también su propio panel, 99.9% de uptime y asistencia 24×7. Está pensado para aplicaciones muy grandes.
  • OpenShift Container Plataform: Tu te creas tu propio cluster pero lo gestionan y te asesora RedHat.

Minishift

Instalación de OpenShift OKD (Origin) en nuestro ordenador local. Es un binario que crea un cluster con un solo nodo, o lo que es lo mismo, que nuestro ordenador se convertiría en un nodo.

Esta pensado únicamente para desarrollo, no para producción.

Utiliza un hipervisor como base (En macOS utiliza xhyve, en Linux utiliza KVM, en Windows utiliza Hyper-V o también podemos utilizar VirtualBox) y dentro de esa máquina virtual instala un cluster de Kuberentes con Docker y OpenShift OKD.
En el enlace del título está la documentación de instalación en los diferentes sistemas operativos.

Una vez instalado ya podemos ver nuestra máquina virtual y en el proceso de instalación nos dan una URL de acceso a la consola. También nos dice que no hacen caso a los usuarios, así podremos acceder con cualquier usuario o contraseña aunque no exista.
Y ya podremos ver el mismo panel que en comparten todos los productos de OpenShift pero sin estar en el cluster de RedHat, utilizando nuestros propios recursos locales.

OpenShift online

Para enseñar voy a utilizar OpenShift online, accedemos a su página oficial y nos registramos para el plan gratuito: https://manage.openshift.com

Nada más entrar vemos que nos deja elegir entre el perfil de desarrollador y el perfil de administrador. Podemos ir cambiando entre uno y otro para ver como el de administrador tiene todos los datos relativos a la carga, la red, el almacenamiento y otros recursos técnicos sobre el cluster. Cosa que el perfil de desarrollado no tiene, ya que solamente te permite ver el monitoreo, los secrets y desplegar aplicaciones. Lo justo y necesario para un desarrollador.

Vamos a ver el perfil de desarrollador.

Lo primero que tenemos que hacer es crear un proyecto. Debemos ponerle un nombre y podemos añadir una descripción. El concepto de proyecto es similar al de espacio de nombre en Kubernetes (namespaces). Cada proyecto está aislado de otro.

Como podemos ver nos da la posibilidad de levantar nuestra aplicación utilizando diferentes formatos. Desde un repositorio GIT, utilizando una imagen nuestra propia, desde un Dockerfile, utilizando YAML o JSON y tiene un gran catalogo con plantillas y helm charts que podemos configurar.

  • Plantillas preparadas para varios lenguajes de programación
  • Bases de datos
  • Middleware
  • CI/CD
  • Otros

Ejemplo aplicación en OpenShift

Primera aplicación SENCILLA: HTML + PHP

Para ello vamos a la versión gratuita de OpenShift online con el perfil de desarrollador. Como he mencionado antes es muy sencillo. Podemos hacerlo de varios métodos. Por ejemplo con GIT tan solo tendríamos que subir nuestro código a un repositorio, poner la URL del repositorio y automáticamente intenta detectar el lenguaje de programación de esta aplicación.

Luego podemos configurar la versión de PHP, el nombre, si tenemos varias las podemos agrupar en un mismo Pod y podemos exponerla al exterior con un dominio generado por OpenShift o uno nuestro.
Tutorial OpenShift actualizado – [Primeros pasos] 1
Y con eso ya tendríamos todo listo. Como desarrollador no ve todo lo que hay detrás que hace OpenShift automáticamente: Coger el código, analizarlo, crear un Dockerfile adaptado a ese lenguaje, construye una imagen utilizando ese Dockerfile, la sube a su propio repositorio interno, a partir de esa imagen crea un Deployment en el cluster de Kuberentes, ese Deployment gestiona un ReplicaSet que a su vez gestiona uno o varios Pods. Luego crea un Service interno, con su Ingress externo y lo expone hacia tanto el exterior como el interior. Y podemos añadir discos para tener almacenamiento desde el menú.

Todo esto es controlable de forma visual, sin necesidad de saber como se hace en Kubernetes, desde un panel.

Ahora si vamos cambiamos al perfil de administrador podremos ver muchas cosas más.
Te permite gestionar las cargas de trabajo tanto a nivel Pod, como a nivel ReplicaSet o Deployment. Puedes configurar las variables, ver el YAML de como se ha creado, abrir una terminal dentro de un Pod para hacer debug o ver los eventos que le ha pasado.

Tampoco se necesita un nivel alto de Kuberentes para poder gestionar en el perfil de administrador. Al final la diferencia entre un perfil y otro es que en el de administrador muestra más información.

Las características

Lo mencionaba cuando hablaba de Kubernetes.

  • Tolerancia a fallos: La hace automáticamente. Es una característica propia de Kubernetes y no necesita configuración. Cuando detecta un fallo en el Pod lo reinicia y borra los datos.
  • Escalabilidad: Para escalar la aplicación tan solo tenemos que aumentar el número de Pods. Lo podemos hacer incluso desde el perfil de desarrollador. Tan solo pulsamos sobre nuestra aplicación y luego sobre el botón en detalles. Y automáticamente entre esos Pods va a hacer un balanceo de carga, distribuyendo las visitas hacia los distintos Pods.Tutorial OpenShift actualizado – [Primeros pasos] 2
  • Balanceo de carga: Como hemos visto anteriormente. La hace automáticamente entre los Pods de una aplicación.

Ejemplo de ciclo de vida de una aplicación

Vamos al repositorio GIT de nuestra aplicación y realizamos algún cambio, editamos el archivo index.php por ejemplo. Lo subimos y volvemos al panel de OpenShift.

Podemos ver como no detecta automáticamente los cambios en el repositorio aunque si se puede configurar,tal y como explican en su documentación oficial.

Vamos a la pestaña de build y pulsamos sobre el nombre de nuestra aplicación.

Para crear una imagen podemos pulsar sobre el botón actions y start build. Luego en la pestaña de builds ya podremos ver la nueva imagen pero con distinto número.
Tutorial OpenShift actualizado – [Primeros pasos] 3
También lo podríamos hacer desde Topology, luego pulsando sobre la aplicación y en la pestaña de Resources.

Ejemplo de autoescalado

Como hemos visto se puede escalar manualmente el número de Pods. Kubernetes tiene una característica propia que es el autoescalado de Pods. Esto significa que el cluster detecta cuando el consumo de CPU aumenta en los Pods o lo que es lo mismo que nuestra aplicación tiene más visitas y se adapta añadiendo más Pods para que pueda seguir respondiendo esas peticiones.

Esta característica es una funcionalidad beta así que los nombres pueden cambiar a lo largo del tiempo, pero la función seguirá siendo la misma.

Para habilitar esto en OpenShift vamos al perfil de administrador. Pulsamos sobre Workloads y luego sobre Horizontal Pod Autoscaler. Al crearlo nos saldrá el código. Podemos cambiar 4 apartados:

  • metadata.name: Un nombre distintivo para este autoescalado.
  • spec.scaleTargetRef.name: Aquí escribiremos el nombre de nuestro Deployment.
  • spec.minReplicas: El número mínimo de réplicas (Pods) que va a tener nuestro Deployment.
  • spec.maxReplicas: El número máximo de réplicas (Pods) que va a tener nuestro Deployment.
  • metrics.resource.targetAverageUtilization: El porcentaje de CPU que cada pod debería utilizar de media. A partir de ese porcentaje se crea una nueva réplica, un nuevo Pod.

Tutorial OpenShift actualizado – [Primeros pasos] 4
Una vez creado vamos a la pestaña de Deplyments y Pods, que como podremos comprobar muestra que solo hay 1 Pod. Ahora para poner a prueba este autoescalado voy a utilizar el comando ab de Linux para hacer una prueba de estrés. Se instala con el comando:

sudo apt install apache2-utils

Y ejecutamos el siguiente comando con el que vamos a realizar 500 peticiones con 20 usuarios a nuestro servidor al mismo tiempo:

ab -c 20 -n 500 https://www.LA-URL-DE-NUESTRA-APP.com/

Una vez ejecutado podremos ir viendo como el consumo de CPU de nuestro Pod sube hasta llegar al porcentaje que le especificamos cuando empezará a hacer nuevos Pods y por lo tanto empezará a bajar.

En el momento que las peticiones se estabilicen y vuelva a estar el consume de CPU por debajo del limite los Pods se irán destruyendo hasta quedar el mínimo adecuado.

OC en la terminal

Ya hemos visto como todos los productos de OpenShift tienen un panel de control, muy amigable y adaptado. Y también tenemos la posibilidad de utilizar la línea de comandos, nuestra terminal, para directamente hacer lo mismo que desde el panel.

Para utilizar esto necesitamos descargar el ejecutable desde la página oficial (https://docs.openshift.com/container-platform/3.11/cli_reference/get_started_cli.html) en el caso que cambie la versión tan solo tenéis que cambiar los números de la URL para ir a la última.

Lo podemos descargar desde la página de OpenShift Online y a Command Line Tools.
Tutorial OpenShift actualizado – [Primeros pasos] 5
Una vez descargado y descomprimido lo podemos añadir a nuestro $PATH para poder ejecutar el comando desde cualquier lugar (si utilizarais Linux, en Windows y MacOS es otro procedimiento que podéis leer en el anterior enlace). O podemos ejecutalo directamente. Si añadimos la ruta al $PATH entonces podremos ejecútalo con oc si solo lo extraemos y nos situamos en la carpeta lo podemos ejecutar con ./oc

Para añadirlo al $PATH nos situamos en el directorio con el ejecutable y ejecutamos lo siguiente:

export PATH=$PATH:$(pwd)

Y comprobamos que se haya añadido con un simple echo a la variable:

echo $PATH

Tutorial OpenShift actualizado – [Primeros pasos] 6
Ahora ya puedo ejecutar oc desde cualquier directorio.

Para iniciar sesión vamos a copiar el comando que nos sale en nuestro panel de OpenShift. En el mismo lugar que descargamos oc podemos leer Copy Login Command. Lo copiamos y pegamos en nuestra terminal.
Tutorial OpenShift actualizado – [Primeros pasos] 7
Una vez iniciada sesión ya podríamos ejecutar todos los comandos. Utilizar la terminal es una forma de ejecutar lo mismo que en el panel pero más rápida. Aquí tenéis la lista completa oficial de todos los comandos: https://docs.openshift.com/container-platform/3.11/cli_reference/basic_cli_operations.html