Introducción

En Kubernetes, un Deployment es un recurso que proporciona una forma declarativa de gestionar aplicaciones. Permite definir el estado deseado de una aplicación y Kubernetes se encarga de realizar las actualizaciones necesarias para alcanzar ese estado. Los Deployments son fundamentales para gestionar el ciclo de vida de las aplicaciones, incluyendo la creación, actualización y escalado de Pods.

Conceptos Clave

  • Declarativo: Especificas el estado deseado y Kubernetes se encarga de alcanzarlo.
  • ReplicaSets: Los Deployments gestionan ReplicaSets, que a su vez gestionan los Pods.
  • Actualizaciones: Permiten realizar actualizaciones controladas y reversibles de las aplicaciones.
  • Rollback: Capacidad de revertir a versiones anteriores en caso de fallos.

Creación de un Deployment

Ejemplo de YAML para un Deployment

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

Explicación del YAML

  • apiVersion: La versión de la API de Kubernetes que se está utilizando.
  • kind: Tipo de recurso, en este caso Deployment.
  • metadata: Información sobre el Deployment, como el nombre.
  • spec: Especificaciones del Deployment.
    • replicas: Número de réplicas de Pods que se desean.
    • selector: Selector de etiquetas para identificar los Pods gestionados por este Deployment.
    • template: Plantilla para los Pods.
      • metadata: Etiquetas para los Pods.
      • spec: Especificaciones de los contenedores dentro de los Pods.
        • containers: Lista de contenedores.
          • name: Nombre del contenedor.
          • image: Imagen del contenedor.
          • ports: Puertos expuestos por el contenedor.

Comandos Básicos con kubectl

Crear un Deployment

kubectl apply -f nginx-deployment.yaml

Verificar el Deployment

kubectl get deployments

Verificar los Pods

kubectl get pods

Actualizar un Deployment

Para actualizar un Deployment, puedes modificar el archivo YAML y aplicar los cambios:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.0  # Actualización de la imagen
        ports:
        - containerPort: 80

Aplicar los cambios:

kubectl apply -f nginx-deployment.yaml

Rollback de un Deployment

Para revertir a una versión anterior:

kubectl rollout undo deployment/nginx-deployment

Ver el historial de despliegues

kubectl rollout history deployment/nginx-deployment

Ejercicio Práctico

Ejercicio 1: Crear y Actualizar un Deployment

  1. Crear un Deployment:

    • Crea un archivo YAML para un Deployment que use la imagen nginx:1.14.2 y tenga 3 réplicas.
    • Aplica el archivo YAML para crear el Deployment.
  2. Actualizar el Deployment:

    • Modifica el archivo YAML para actualizar la imagen a nginx:1.16.0.
    • Aplica los cambios y verifica que los Pods se actualicen correctamente.

Solución

  1. Crear el archivo nginx-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Aplicar el archivo:

kubectl apply -f nginx-deployment.yaml
  1. Modificar el archivo nginx-deployment.yaml para actualizar la imagen:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.0
        ports:
        - containerPort: 80

Aplicar los cambios:

kubectl apply -f nginx-deployment.yaml

Verificar los Pods:

kubectl get pods

Conclusión

En esta sección, hemos aprendido sobre los Deployments en Kubernetes, cómo crearlos, actualizarlos y revertir cambios. Los Deployments son una herramienta poderosa para gestionar el ciclo de vida de las aplicaciones en Kubernetes, proporcionando una forma declarativa de mantener el estado deseado de las aplicaciones. En el siguiente módulo, exploraremos otros componentes esenciales de Kubernetes, como los Servicios y los Namespaces.

Curso de Kubernetes

Módulo 1: Introducción a Kubernetes

Módulo 2: Componentes Principales de Kubernetes

Módulo 3: Gestión de Configuración y Secretos

Módulo 4: Redes en Kubernetes

Módulo 5: Almacenamiento en Kubernetes

Módulo 6: Conceptos Avanzados de Kubernetes

Módulo 7: Monitoreo y Registro

Módulo 8: Seguridad en Kubernetes

Módulo 9: Escalado y Rendimiento

Módulo 10: Ecosistema y Herramientas de Kubernetes

Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real

Módulo 12: Preparación para la Certificación de Kubernetes

© Copyright 2024. Todos los derechos reservados