En colaboración con: Máximo Miranda.

Saludos amigos Kubernetes aficionados, este artículo se basa en el capítulo #44 de La Hora de Kubernetes, donde aprenderemos los conceptos y funciones de Pods, ReplicaSet y Deployment en Kubernetes.

Introducción

Hace unos años, la ejecución de las aplicaciones presentaba retos y un alto coste de optimización de los recursos del hardware, ya que al momento de escalarlas debido a una alta concurrencia, la solución era compra una máquina (un hardware) con mejores características. Básicamente este modelo consistía en el Hardware, que es la máquina física con un sistema operativo (SO) instalado y optimizado para un servidor que responde a todas las máquinas que tuvieran ese mismo sistema operativo instalado y dentro de este sistema operativo se encontraban las aplicaciones. Para ello se estableció un nuevo modelo llamado Virtualized Deployment cuya diferencia es que se le añadió un Hypervisor, que permite crear máquinas virtuales con un sistema operativo desde cero, o aislado de los demás sistemas operativos y en cada una de esas máquinas virtuales el cliente tiene su aplicación con su sistema operativo y todo se ejecutaba desde este mismo hardware. De esta forma, el tema de costos mejoró considerablemente, sin embargo, no se optimizaban ya que en cada máquina virtual se debía instalar un sistema operativo. Por ello surge el método Container Deployment, en el que ya no es necesario instalar un sistema operativo para cada aplicación.

En el método de Container Deployment presenciamos un hardware, un sistema operativo servidor y un container runtime, este último nos permite correr procesos aislados en la misma máquina. Con este modelo ya es posible especificar recursos a un contenedor y no es necesario instalar un sistema operativo para cada aplicación.

Para entender qué son Deployments y cómo funcionan, también debemos conocer dos términos que son muy empleados en Kubernetes: los Pods y los ReplicaSet, ya que forman parte de una arquitectura y el modelo actual.

Entonces, ¿Qué son los Pods, ReplicaSet y Deployment?

Comencemos con la unidad mínima de k8s (Kubernetes): los Pods. En estos corren los contenedores de nuestros servicios. Un Pod también contiene los recursos almacenados y opciones para los procesos del contenedor. Ellos representan los procesos en una aplicación. En la mayoría de los casos, los Pods sirven como una forma indirecta de manipular contenedores dentro de los Kubernetes. En casos más complejos, los Pods pueden abarcar múltiples contenedores que necesiten compartir recursos, sirviendo como ubicación central para el manejo de contenedores.

Usualmente, no es necesario crear Pods directamente, incluso Pods únicos. En vez de eso, puedes crearlos usando recursos de carga de trabajo tales como Deployment (conoceremos un poco más sobre esto a continuación) o Job (un grupo de tareas que corren hasta ser completadas).

En un clúster, los pods se utilizan de estas dos maneras:

  1. Pods que corren un solo contenedor: Es el caso más común. Piensa en este Pod como un envoltorio alrededor de un solo contenedor, puesto que Kubernetes prefiere manejar Pods en vez de ir directamente por los contenedores.
  2. Pods que corren múltiples contenedores que necesitan trabajar en conjunto: Un Pod puede encapsular una aplicación compuesta de múltiples contenedores emparejados y que comparten recursos. Estos contenedores funcionan como una solo unidad de servicio.

Ahora, un ReplicaSet es un objeto de k8s que se encarga de garantizar las instancias de los Pods que deben estar en ejecución, este se encuentra a un nivel más alto que el Pod, ya que este los puede administrar.

Un ReplicaSet está definido con campos, incluyendo un selector que especifica cómo identificar los Pods que este puede adquirir, un número de réplicas indicando cuántos Pods debería estar manteniendo, y una plantilla de Pods especificando la información de los nuevos Pods que debería crear para conocer el criterio de número de réplicas. Luego cumple su propósito al crear y eliminar pods según sea necesario para alcanzar el número deseado.

No se puede manipular un ReplicaSet que sea propiedad de un Deployment. Un ReplicaSet se asegura de que un número especificado de réplicas de Pods estén corriendo en algún momento dado. Sin embargo, un Deployment, es un concepto de más alto nivel que controla los ReplicaSets y provee actualizaciones declarativas a los Pods junto con otras propiedades útiles.

Entonces definimos a un Deployment como un objeto de k8s que permite gestionar las diferentes versiones de una aplicación utilizando los ReplicaSet como medio para su ejecución.
Podemos definir los Deployments para crear nuevos ReplicaSets, o para remover Deployments existentes y adoptar todos sus recursos con nuevos Deployments.

Los Deployments, a su vez, ayudan a saber qué versión de aplicación o contenedores tenemos, y por supuesto de pasar a una nueva versión. Si existen fallos en la nueva aplicación, el Deployment también se encarga de hacer rollback y volver a la versión anterior (los Deployments pueden almacenar hasta 10 versiones anteriores), así como declarar el nuevo estado de los Pods.

Algunos fallos en los Deployments al tratar de implementar el ReplicaSet más nuevo pueden ser los siguientes:

  • Cuota insuficiente.
  • Fallos de la sonda de preparación.
  • Errores de extracción de imágenes.
  • Permisos insuficientes.
  • Rangos límites.
  • Configuración incorrecta del tiempo de ejecución de la aplicación.

Demo

En el siguiente vídeo tenemos preparado los conceptos y el demo de despliegue que te permitirá conocer aún más sobre qué son y cómo funcionan los Pods, ReplicaSet y Deployments:

Conclusiones

Un Pod se puede definir como esa interfaz o esa forma en cómo los k8s interactúan con los contenedores y un Deployment provee actualizaciones declarativas para los Pods y ReplicaSets que garantizan las instancias de los Pods. Sin embargo, es muy probable que nunca necesites manipular objetos ReplicaSet. Recomendamos el uso de Deployments, a menos que necesites una orquestación de actualización personalizada o no necesites actualización en lo absoluto.

Si deseas sumergirte en el tema y obtener más información, te puedes dirigir a nuestro Canal Cuemby en Youtube, nuestra comunidad está creciendo y nuestro equipo está dispuesto a ayudarte. ¡No dudes en enviarnos un mensaje en cualquier momento con tus preguntas y nos aseguraremos de responder!

¡Gracias por visitar nuestro blog! Si te gusta lo que lees, suscríbete.