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.
- containers: Lista de contenedores.
Comandos Básicos con kubectl
Crear un Deployment
Verificar el Deployment
Verificar los 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:
Rollback de un Deployment
Para revertir a una versión anterior:
Ver el historial de despliegues
Ejercicio Práctico
Ejercicio 1: Crear y Actualizar un Deployment
-
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.
- Crea un archivo YAML para un Deployment que use la imagen
-
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.
- Modifica el archivo YAML para actualizar la imagen a
Solución
- 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:
- 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:
Verificar los 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
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
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
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster