Introducción
Kubernetes es una plataforma de orquestación de contenedores que automatiza el despliegue, la gestión y la escalabilidad de aplicaciones en contenedores. En este módulo, aprenderemos cómo Kubernetes puede ser utilizado para gestionar microservicios de manera eficiente.
Conceptos Clave de Kubernetes
- Clúster de Kubernetes
Un clúster de Kubernetes es un conjunto de nodos que ejecutan aplicaciones en contenedores. Los componentes principales de un clúster son:
- Master Node: Responsable de la gestión del clúster.
- Worker Nodes: Ejecutan las aplicaciones en contenedores.
- Pods
Un pod es la unidad más pequeña de ejecución en Kubernetes y puede contener uno o más contenedores que comparten el mismo contexto de red y almacenamiento.
- Servicios
Los servicios en Kubernetes proporcionan una forma de exponer una aplicación que se ejecuta en un conjunto de pods como un servicio de red.
- Deployments
Los deployments definen el estado deseado de una aplicación y Kubernetes se encarga de mantener ese estado, gestionando la creación y el escalado de pods.
- ConfigMaps y Secrets
- ConfigMaps: Almacenan datos de configuración en formato clave-valor.
- Secrets: Almacenan información sensible, como contraseñas y tokens.
Despliegue de Microservicios con Kubernetes
Paso 1: Configuración del Clúster
Para comenzar, necesitamos un clúster de Kubernetes. Puedes usar servicios gestionados como Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) o Azure Kubernetes Service (AKS), o configurar un clúster local con Minikube.
Paso 2: Creación de un Deployment
Vamos a crear un deployment para un microservicio simple. Supongamos que tenemos una imagen de Docker llamada my-microservice
.
apiVersion: apps/v1 kind: Deployment metadata: name: my-microservice-deployment spec: replicas: 3 selector: matchLabels: app: my-microservice template: metadata: labels: app: my-microservice spec: containers: - name: my-microservice image: my-microservice:latest ports: - containerPort: 80
Explicación del Código
- apiVersion: La versión de la API de Kubernetes que estamos utilizando.
- kind: El tipo de objeto que estamos creando, en este caso, un Deployment.
- metadata: Información sobre el objeto, como su nombre.
- spec: La especificación del deployment.
- replicas: El número de réplicas del pod que queremos ejecutar.
- selector: Define cómo seleccionar los pods que pertenecen a este deployment.
- template: Define el pod que se va a crear.
- metadata: Etiquetas para el pod.
- spec: La especificación del contenedor dentro del pod.
- containers: Lista de contenedores que se ejecutarán en el pod.
- name: Nombre del contenedor.
- image: La imagen de Docker que se utilizará.
- ports: Los puertos que se expondrán.
- containers: Lista de contenedores que se ejecutarán en el pod.
Paso 3: Creación de un Servicio
Para exponer nuestro microservicio, necesitamos crear un servicio.
apiVersion: v1 kind: Service metadata: name: my-microservice-service spec: selector: app: my-microservice ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
Explicación del Código
- apiVersion: La versión de la API de Kubernetes que estamos utilizando.
- kind: El tipo de objeto que estamos creando, en este caso, un Service.
- metadata: Información sobre el objeto, como su nombre.
- spec: La especificación del servicio.
- selector: Define cómo seleccionar los pods que pertenecen a este servicio.
- ports: Los puertos que se expondrán.
- protocol: El protocolo que se utilizará.
- port: El puerto en el que el servicio estará disponible.
- targetPort: El puerto en el que el contenedor escucha.
- type: El tipo de servicio, en este caso, LoadBalancer para exponer el servicio externamente.
Ejercicio Práctico
Ejercicio 1: Desplegar un Microservicio en Kubernetes
- Configura un clúster de Kubernetes utilizando Minikube o un servicio gestionado.
- Crea un archivo YAML para un deployment de un microservicio.
- Crea un archivo YAML para un servicio que exponga el microservicio.
- Aplica los archivos YAML utilizando
kubectl apply -f <archivo.yaml>
. - Verifica el despliegue utilizando
kubectl get pods
ykubectl get services
.
Solución
-
Configura Minikube:
minikube start
-
Crea
deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-microservice-deployment spec: replicas: 3 selector: matchLabels: app: my-microservice template: metadata: labels: app: my-microservice spec: containers: - name: my-microservice image: my-microservice:latest ports: - containerPort: 80
-
Crea
service.yaml
:apiVersion: v1 kind: Service metadata: name: my-microservice-service spec: selector: app: my-microservice ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
-
Aplica los archivos YAML:
kubectl apply -f deployment.yaml kubectl apply -f service.yaml
-
Verifica el despliegue:
kubectl get pods kubectl get services
Conclusión
En esta sección, hemos aprendido los conceptos básicos de Kubernetes y cómo utilizarlo para orquestar microservicios. Hemos visto cómo crear deployments y servicios para gestionar y exponer nuestros microservicios. Con esta base, estamos preparados para explorar temas más avanzados de despliegue y gestión en Kubernetes.
Curso de Microservicios
Módulo 1: Introducción a los Microservicios
- Conceptos Básicos de Microservicios
- Ventajas y Desventajas de los Microservicios
- Comparación con Arquitectura Monolítica
Módulo 2: Diseño de Microservicios
- Principios de Diseño de Microservicios
- Descomposición de Aplicaciones Monolíticas
- Definición de Bounded Contexts
Módulo 3: Comunicación entre Microservicios
Módulo 4: Implementación de Microservicios
- Elección de Tecnologías y Herramientas
- Desarrollo de un Microservicio Simple
- Gestión de Configuración