imagen destacada del post con un texto en el centro que dice Cómo desplegar una aplicación usando deployments en Kubernetes gestionado y abajo del texto aparece la categoria del post

Introducción

En el ecosistema actual de desarrollo y despliegue de aplicaciones, Kubernetes se ha consolidado como la plataforma líder para orquestar contenedores a escala. Sin embargo, no basta con crear un contenedor y ejecutarlo; los entornos productivos requieren soluciones robustas, escalables y fáciles de gestionar a largo plazo. Aquí es donde los deployments juegan un papel fundamental. Estos objetos de Kubernetes permiten desplegar, actualizar y mantener aplicaciones de forma automática, con garantías de disponibilidad y sin interrupciones.

Este artículo técnico y detallado explora en profundidad cómo utilizar deployments en un entorno Kubernetes gestionado, destacando las ventajas sobre el uso directo de pods, explicando su funcionamiento, configuración, escalabilidad, y cómo afrontar las problemáticas que surgen en escenarios reales. Además, podrás conocer buenas prácticas, ejemplos y herramientas para maximizar el potencial de tu clúster.

1. ¿Qué es un Deployment en Kubernetes?

Un deployment es un recurso de Kubernetes diseñado para gestionar la creación, actualización y supervisión continua de réplicas de pods que componen una aplicación. Permite definir el estado deseado (como la versión de la imagen, número de réplicas, variables de entorno) y que Kubernetes mantenga dicho estado de forma automática.

A diferencia de los pods, que son objetos efímeros e inmutables, un deployment actúa como una capa de abstracción que administra uno o varios pods, asegurando:

  • Disponibilidad continua durante actualizaciones.
  • Escalado mediante el aumento o disminución del número de réplicas.
  • Recuperación automática ante fallos.
  • Implementación simplificada y declarativa.

1.1 Ventajas clave del Deployment

  • Gestión automática de pods: El deployment asegura que siempre se ejecuten las réplicas configuradas. Si un pod falla o se elimina, lo reemplaza inmediatamente.
  • Actualizaciones sin interrupciones: Permite realizar rolling updates, actualizando la aplicación sin detener el servicio.
  • Escalabilidad sencilla: Modificar el número de réplicas es tan simple como actualizar la configuración y reaplicar.
  • Definición declarativa: Se pueden versionar los archivos YAML y automatizar despliegues en CI/CD.

2. Limitaciones de trabajar directamente con Pods

Antes de entender por qué los deployments son esenciales, es importante analizar las dificultades de trabajar solo con pods:

  • Inmutabilidad: Los pods no pueden ser modificados una vez creados. Para cambiar la imagen o variables de entorno, es necesario eliminar el pod y crear uno nuevo manualmente.
  • Escalabilidad manual: Si necesitamos más de un pod, hay que crear múltiples definiciones y gestionarlos de forma individual.
  • Recuperación manual: Si un pod falla, no hay un mecanismo interno para reemplazarlo automáticamente.
  • Mantenimiento complejo: Gestionar configuraciones y consistencia entre pods replicas es propenso a errores.

2.1 Riesgos operativos

Estos problemas pueden generar caídas de servicio, errores humanos por acciones manuales y falta de uniformidad en las aplicaciones desplegadas.

3. Arquitectura y estructura de un Deployment

Un archivo de deployment en Kubernetes está definido en formato YAML y cuenta con varias secciones importantes:

  • apiVersion: Indica la versión del API, por ejemplo apps/v1.
  • kind: Tipo de recurso, en este caso Deployment.
  • metadata: Nombre y etiquetas identificativas.
  • spec: Especificaciones del deployment, incluyendo el número de réplicas, selector de pods y plantilla (template) del pod que se creará.

3.1 Ejemplo básico de archivo deployment.yaml

 apiVersion: apps/v1 kind: Deployment metadata: name: demo-deployment spec: replicas: 3 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - name: demo-container image: nginx:latest ports: - containerPort: 80 

Este ejemplo despliega 3 réplicas idénticas de pods ejecutando la imagen nginx. El deployment se encarga de que siempre haya 3 pods activos.

4. Ciclo de vida de un Deployment

Al aplicar un deployment:

  1. Kubernetes crea los pods adecua dos según la plantilla del deployment.
  2. Monitorea la salud y estado para mantener el número correcto de réplicas.
  3. Cuando un pod elimina o falla, crea uno nuevo para sustituirlo.
  4. Al modificar la plantilla, realiza una actualización rolling para desplegar la nueva versión sin interrupciones.

4.1 Comandos clave para gestionar deployments

  • kubectl apply -f deployment.yaml: Aplica o actualiza el deployment.
  • kubectl get deployments: Lista los deployments ejecutándose.
  • kubectl get pods: Lista los pods gestionados por el deployment.
  • kubectl delete deployment demo-deployment: Elimina un deployment y sus pods asociados.

5. Cómo escalar un Deployment

Una de las mayores ventajas es la facilidad para ajustar la capacidad según demanda. Esto se puede hacer de dos formas:

  • Editar el YAML, cambiar el campo replicas y volver a aplicar con kubectl apply.
  • Utilizar el comando directo kubectl scale deployment demo-deployment --replicas=4.

Kubernetes ajusta el número de pods en ejecución rápidamente, creando o eliminando según el valor deseado.

5.1 Ejemplo práctico de escalado

Supongamos que inicialmente tienes un deployment con 2 réplicas. Al aumentar a 4:

  1. Kubernetes crea 2 pods nuevos según la configuración del deployment.
  2. Todos los pods ejecutan la misma versión de la aplicación.

Si luego se reduce a 2, Kubernetes eliminará 2 de esas réplicas para ajustar el recurso.

6. Actualizaciones con Deployment: Rolling Updates

Las actualizaciones constantes de las aplicaciones son parte del ciclo de vida. Los deployments permiten realizar rolling updates, esto es, actualizaciones en las que cada pod se reemplaza por la nueva versión de manera gradual, evitando interrupciones.

Este proceso es cuidadosamente controlado según los parámetros:

  • maxUnavailable: Número máximo de pods que pueden estar inactivos durante la actualización.
  • maxSurge: Número máximo de pods adicionales que se pueden crear durante la actualización para evitar caída de servicio.

6.1 Beneficios del Rolling Update

  • Disponibilidad continua del servicio.
  • Minimiza el riesgo asociado a la actualización.
  • Facilita rollback en caso de errores.

7. Gestión de pods individuales dentro de un Deployment

Aunque un deployment crea varios pods idénticos, es posible que alguno falle o se elimine manualmente. En este contexto:

  • Si se elimina un pod, el deployment detecta la ausencia y crea uno nuevo.
  • Los pods creados tienen nombres únicos — generados a partir del nombre del deployment más identificadores aleatorios.
  • La IP de un pod puede cambiar tras su recreación, ya que los pods son efímeros.

7.1 Consecuencia del cambio de IP en pods

Si una aplicación cliente se conecta directamente a la IP de un pod y este se recrea, la conexión puede perderse. Por eso, se recomienda acceder a los pods mediante servicios o balanceadores de carga que abstraen las IPs individuales de los pods.

8. Diferencias entre Pods y Deployments

Característica Pods Deployments
Instancia Unidad mínima que ejecuta contenedores Controlador que gestiona conjuntos de pods idénticos
Mutabilidad Inmutable: se debe eliminar y crear para cambios Actualiza pods automáticamente mediante rolling update
Escalado Manual, gestionando pods individualmente Sencillo, modificando el número de réplicas
Automatización Ninguna, requiere intervención manual Supervisa y mantiene cantidad definida de pods
Uso recomendado Pruebas rápidas o cargas muy específicas Despliegues de aplicaciones sin estado o escalables

9. Buenas prácticas al usar Deployments en Kubernetes gestionado

  • Versiona tus archivos YAML: Siempre mantén control de versiones para auditoría y rollback.
  • Define probes de salud: Usa livenessProbe y readinessProbe para monitorear estados de los pods.
  • Prefiere servicios para acceso: No conectes clientes directamente a IPs de pods.
  • Configura límites de recurso: Define requests y limits para CPU y memoria para garantizar estabilidad.
  • Utiliza etiquetas y selectors: Para organizar y seleccionar pods claramente en el cluster.
  • Monitorea el estado del deployment: Usa logs y comandos como kubectl rollout status.

10. Configuración avanzada de Deployments

Los deployments ofrecen muchas opciones para adaptar su comportamiento:

  • Estrategia de actualización: RollingUpdate o Recreate.
  • MaxUnavailable y MaxSurge: Controlan el aporte de pods durante actualizaciones.
  • Pausing y rollbacks: Pausar rollout para validaciones manuales y revertir a versiones anteriores.

10.1 Ejemplo de configuración para rolling update

 spec: strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 

Esta configuración garantiza que siempre esté disponible al menos el número deseado de pods durante la actualización.

11. Monitorización y diagnóstico

Para garantizar el correcto funcionamiento del deployment y sus pods, se recomienda usar herramientas y comandos:

  • kubectl get deployment demo-deployment -o wide muestra detalles del deployment.
  • kubectl describe deployment demo-deployment ofrece un informe detallado e histórico de eventos.
  • kubectl rollout history deployment demo-deployment muestra registros de actualizaciones.
  • Herramientas de visualización como Lens o dashboards de Kubernetes facilitan el seguimiento visual.

12. Integración con servicios en Kubernetes

Para resolver el problema de la variabilidad en las IPs de pods, Kubernetes ofrece Servicios (Services):

  • Un Service actúa como punto fijo de entrada, que balancea la carga hacia las réplicas de pods.
  • Permite una abstracción y stable endpoint para clientes externos o internos.
  • Tipos más comunes: ClusterIP (para comunicación interna), NodePort y LoadBalancer para acceso externo.

12.1 Ejemplo básico de Service

 apiVersion: v1 kind: Service metadata: name: demo-service spec: selector: app: demo ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP 

Este servicio expone los pods con la etiqueta app: demo mediante un punto fijo.

13. Despliegue y gestión paso a paso con ejemplos prácticos

13.1 Crear el archivo deployment.yaml

Define el deployment según la estructura mostrada previamente, personalizando según tu aplicación.

13.2 Aplicar el deployment

Ejecuta:

kubectl apply -f deployment.yaml

Se creará el deployment y los pods correspondientes.

13.3 Verificar estado

Consulta:

kubectl get deployments
kubectl get pods

13.4 Escalar el deployment

Cambia réplicas en el YAML o directamente con:

kubectl scale deployment demo-deployment --replicas=4

13.5 Actualizar la aplicación

  • Modifica la imagen del contenedor en el archivo.
  • Aplica cambios con:
  • kubectl apply -f deployment.yaml

13.6 Supervisar actualización

kubectl rollout status deployment demo-deployment

14. Palabras clave y su relevancia en Kubernetes Deployment

14.1 Pod

Unidad básica que ejecuta uno o varios contenedores en Kubernetes. Aunque esencial, su manejo individual es limitado. Los deployments gestionan múltiples pods homogéneos.

14.2 ClusterIP

Tipo de servicio que crea un endpoint interno para que los pods puedan comunicarse dentro del clúster sin exponerlos al exterior. Fundamental para acceder a los pods gestionados por un deployment sin preocuparse por cambios de IP.

14.3 Deployment

Objeto controlador que asegura el estado deseado de pods en un clúster. Facilita escalado, actualizaciones y la alta disponibilidad de aplicaciones.

14.4 Kubernetes Gestionado

Servicios de Kubernetes ofrecidos como plataforma administrada donde se abstrae la gestión del clúster subyacente. Facilita el uso de deployments y otras funcionalidades sin la necesidad de configurar la infraestructura de base.

14.5 Rollout

Proceso mediante el cual un deployment actualiza sus pods a una nueva versión, típicamente usando rolling updates para minimizar interrupciones.

15. Recursos adicionales y links útiles

Para complementar esta lectura, te invitamos a ver el video a continuación, que explica de manera práctica cómo desplegar aplicaciones mediante deployments en Kubernetes y resuelve dudas comunes sobre el tema.

Preguntas frecuentes (FAQ)

¿Qué son los deployments en Kubernetes?

Un deployment es un recurso de Kubernetes que automáticamente crea y supervisa las instancias de una aplicación, manteniendo así el número deseado de réplicas y reemplazando cualquier instancia que falle o no pase las verificaciones de salud. Facilita la gestión declarativa, actualizaciones automáticas y escalabilidad de aplicaciones containerizadas dentro del clúster.

¿Qué es un Rollout en Kubernetes?

Un rollout es el proceso que lleva a cabo un deployment para aplicar cambios en las aplicaciones desplegadas, como actualizaciones o cambios en configuración. Es una funcionalidad avanzada que puede incluir estrategias para entregas progresivas, facilitando la minimización de riesgos y la posibilidad de realizar reversión rápida en caso de problemas.

¿Qué objeto de Kubernetes debe utilizarse para las aplicaciones sin estado?

Para aplicaciones sin estado (stateless) se recomienda utilizar un Deployment o su equivalente avanzado, el Rollout. Estos objetos permiten gestionar múltiples réplicas idénticas, asegurando alta disponibilidad y capacidad de escalado de una forma sencilla y confiable.

¿Cómo puedo modificar un pod gestionado por un deployment?

No se modifican los pods individuales directamente. En su lugar, se actualiza la plantilla del deployment (por ejemplo cambiando la imagen o variables) y se aplica la configuración. Kubernetes se encarga de realizar un rollout que reemplaza los pods antiguos por nuevos con la configuración actualizada.

¿Qué pasa si elimino un pod manualmente dentro de un deployment?

El deployment detectará la ausencia del pod y creará automáticamente uno nuevo para mantener el número deseado de réplicas. Sin embargo, el nuevo pod tendrá una IP diferente, por lo que es importante acceder a los pods mediante un servicio en lugar de IPs directas.

¿Cómo puedo asegurarme de que mi aplicación esté siempre disponible durante una actualización?

Utilizando la estrategia de rolling update en el deployment, que reemplaza los pods antiguos por nuevos de manera gradual, asegurando que siempre haya pods disponibles para atender peticiones. Configuraciones como maxUnavailable y maxSurge controlan este comportamiento.

¿Es posible revertir una actualización fallida de un deployment?

Sí, Kubernetes permite realizar rollback de un deployment a una versión anterior mediante el comando kubectl rollout undo deployment nombre-deployment, restaurando el estado anterior funcional rápidamente.

¿Cuál es la diferencia entre un ReplicaSet y un Deployment?

Un ReplicaSet es un controlador que mantiene un número específico de pods replicados y en ejecución, pero no incluye funcionalidades de actualización automática. Un Deployment utiliza internamente un ReplicaSet, pero añade la capacidad de gestionar actualizaciones, escalado y rollbacks de manera declarativa.

¿Cómo gestionan las variables de entorno los deployments?

Las variables de entorno se definen en la plantilla del pod dentro del archivo YAML del deployment, dentro de la sección containers.env. Para modificar estas variables, se cambia la configuración del deployment y se aplica la actualización, generando un rollout automático.

Conclusión

Como vimos, utilizar deployments en Kubernetes gestionado es indispensable para desplegar aplicaciones containerizadas robustas, escalables y mantenibles a largo plazo. Supera ampliamente las limitaciones de trabajar directamente con pods, aporta automatización en actualizaciones, recuperación y escalabilidad, y forma la base para arquitecturas modernas basadas en microservicios.

¿Querés mantenerte actualizado con las últimas tendencias en automatización, inteligencia artificial y transformación digital? Visitá nuestro blog de Código6 y descubrí guías, casos de éxito y noticias relevantes para potenciar tu empresa. Ingresá al blog y explorá los recursos más recientes.

Share

Leave A Comment

Descubre el Poder de la IA

Sumérgete en una experiencia transformadora hacia el futuro de la innovación, explorando el potencial ilimitado de la inteligencia artificial en cada interacción.

At Power AI, we offer affordable and comprehensive range of AI solutions, that empower drive growth, and enhance efficiency to meet your unique needs.

Join Our Newsletter

We will send you weekly updates for your better Product management.

© 2025 Codigo6 All Rights Reserved.