¿Qué es Kubernetes?
Kubernetes (K8s) es una plataforma open-source para automatizar el despliegue, escalado y gestión de aplicaciones en contenedores.
Origen
Creado por Google basado en su experiencia con Borg y Omega, donado a la CNCF en 2014.
¿Por qué Kubernetes?
- Orquestación automática: Gestiona miles de contenedores
- Auto-scaling: Escala según demanda
- Self-healing: Reinicia contenedores fallidos
- Load balancing: Distribuye tráfico automáticamente
- Rolling updates: Actualizaciones sin downtime
Arquitectura de Kubernetes
Arquitectura de Kubernetes
Control Plane (Master)
API Server: Punto de entrada para todas las operaciones etcd: Almacén de configuración distribuido Scheduler: Asigna Pods a Nodos Controller Manager: Mantiene el estado deseado
Data Plane (Worker Nodes)
kubelet: Agente que corre en cada nodo kube-proxy: Gestiona networking Container Runtime: Docker, containerd, CRI-O
Conceptos Fundamentales
Pod
Unidad mínima desplegable, agrupa uno o más contenedores.
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
Deployment
Gestiona el despliegue y actualización de Pods.
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.21
ports:
- containerPort: 80
Service
Expone Pods como un servicio de red.
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
ConfigMap y Secret
ConfigMap: Datos de configuración no sensibles Secret: Datos sensibles (passwords, tokens)
Comandos Esenciales kubectl
# Ver recursos
kubectl get pods
kubectl get deployments
kubectl get services
# Describir recurso
kubectl describe pod nginx-pod
# Ver logs
kubectl logs nginx-pod
# Ejecutar comando en pod
kubectl exec -it nginx-pod -- /bin/bash
# Aplicar configuración
kubectl apply -f deployment.yaml
# Eliminar recurso
kubectl delete pod nginx-pod
# Escalar deployment
kubectl scale deployment nginx-deployment --replicas=5
# Ver eventos
kubectl get events
Namespaces
Aíslan recursos lógicamente dentro del cluster.
# Crear namespace
kubectl create namespace development
# Listar namespaces
kubectl get namespaces
# Usar namespace
kubectl get pods -n development
Helm - Package Manager
Helm gestiona aplicaciones Kubernetes complejas.
# Instalar chart
helm install my-release stable/mysql
# Listar releases
helm list
# Actualizar release
helm upgrade my-release stable/mysql
# Desinstalar
helm uninstall my-release
Estrategias de Deployment
Rolling Update (Default)
Actualiza pods gradualmente, sin downtime.
Recreate
Detiene todos los pods antes de crear nuevos.
Blue/Green
Mantiene dos versiones y cambia tráfico.
Canary
Despliega gradualmente a un porcentaje de usuarios.
Mejores Prácticas
- Resources limits: Define CPU/memoria para cada container
- Health checks: Liveness y readiness probes
- RBAC: Control de acceso basado en roles
- Network Policies: Segmenta tráfico entre pods
- Horizontal Pod Autoscaler: Auto-scaling basado en métricas
- Persistent Volumes: Para datos que deben persistir
- Secrets management: Usa herramientas como Sealed Secrets o External Secrets
Distribuciones Kubernetes
Managed Services:
- EKS (AWS)
- GKE (Google Cloud)
- AKS (Azure)
Self-managed:
- kubeadm
- k3s (ligero)
- MicroK8s
- Kind (local)
Ecosystem y Herramientas
- Prometheus + Grafana: Monitoreo
- Istio/Linkerd: Service mesh
- ArgoCD/Flux: GitOps
- Cert-Manager: Gestión de certificados
- Ingress Controllers: NGINX, Traefik
Explora configuraciones y ejemplos específicos en nuestra documentación.