Kubernetes
¿Qué es Kubernetes?
Kubernetes (K8s) es una plataforma de código abierto para la orquestación de contenedores que automatiza el despliegue, escalado y gestión de aplicaciones containerizadas. Desarrollado originalmente por Google, Kubernetes permite ejecutar y coordinar aplicaciones distribuidas a gran escala, proporcionando herramientas para el manejo automático de fallos, balanceadores de carga y actualizaciones sin tiempo de inactividad.
¿Para qué sirve Kubernetes?
Kubernetes es fundamental para la gestión moderna de aplicaciones en contenedores. Te permite:
- Automatizar el despliegue y escalado de aplicaciones containerizadas.
- Gestionar múltiples contenedores como una unidad cohesiva.
- Proporcionar alta disponibilidad y recuperación automática ante fallos.
- Balancear la carga de trabajo entre diferentes nodos del cluster.
- Realizar actualizaciones rolling sin interrumpir el servicio.
- Gestionar secretos, configuraciones y almacenamiento persistente.
¿Cómo funciona?
Imagina Kubernetes como un director de orquesta para aplicaciones en contenedores. Como un director coordina a los músicos para crear una sinfonía, Kubernetes coordina todos los contenedores en tu cluster para que trabajen juntos armoniosamente. Si un “músico” (contenedor) falla, el director inmediatamente encuentra un reemplazo y la “música” (aplicación) continúa sin interrupciones.
Ejemplo: Despliegue básico en Kubernetes
Aquí tienes un ejemplo de cómo desplegar una aplicación simple en Kubernetes:
# deployment.yaml - Definición del despliegue
apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-aplicacion-web
labels:
app: mi-aplicacion
spec:
replicas: 3 # Número de instancias a ejecutar
selector:
matchLabels:
app: mi-aplicacion
template:
metadata:
labels:
app: mi-aplicacion
spec:
containers:
- name: web-container
image: nginx:1.21
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
---
# service.yaml - Servicio para exponer la aplicación
apiVersion: v1
kind: Service
metadata:
name: mi-aplicacion-service
spec:
selector:
app: mi-aplicacion
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
---
# configmap.yaml - Configuración de la aplicación
apiVersion: v1
kind: ConfigMap
metadata:
name: mi-aplicacion-config
data:
database_url: "postgresql://db.ejemplo.com:5432/miapp"
api_key: "mi-clave-api-publica"
debug_mode: "false"
Conceptos clave de Kubernetes
Contenedor: Unidad estándar de software que empaqueta el código y todas sus dependencias para que una aplicación se ejecute rápidamente y de forma confiable en diferentes entornos informáticos.Pod: La unidad más pequeña que puedes desplegar y gestionar en Kubernetes, que puede contener uno o varios contenedores.Servicio: Una abstracción que define una política de acceso para exponer una aplicación ejecutándose en un conjunto de Pods como un servicio de red.ConfigMap: Un objeto que permite almacenar datos de configuración en pares clave-valor, que pueden ser utilizados por los Pods en tiempo de ejecución.Secret: Similar a un ConfigMap, pero diseñado para almacenar información sensible, como contraseñas, tokens o claves SSH, de forma segura.
¿Dónde encuentras Kubernetes?
- En la nube, como parte de los servicios de infraestructura como servicio (IaaS) que permiten gestionar clústeres de contenedores.
- En entornos locales, utilizando herramientas como Minikube o kubeadm para crear clústeres de Kubernetes en máquinas físicas o virtuales.
- Integrado en plataformas de desarrollo y despliegue continuo (CI/CD) para automatizar la entrega de aplicaciones en contenedores.
Conclusión
Kubernetes es una tecnología clave en el mundo de los contenedores y DevOps, que permite gestionar de manera eficiente y escalable aplicaciones distribuidas en contenedores. Su capacidad para automatizar tareas complejas de gestión de aplicaciones lo convierte en una herramienta esencial para el desarrollo y operación de software en la actualidad.