Kubernetes - Orquestación de Contenedores¶
Introducción a Kubernetes¶
Kubernetes (K8s) es una plataforma de orquestación de contenedores de código abierto que automatiza el despliegue, escalado y gestión de aplicaciones contenerizadas.
🚀 Iniciar con Kubernetes en 20 minutos¶
¿Nuevo en Kubernetes? Comienza aquí:
- Tutorial oficial: Primeros pasos - Crea tu primer cluster y despliega una app
- Play with Kubernetes - Entorno interactivo online gratuito
- Katacoda Kubernetes scenarios - Tutoriales interactivos paso a paso
Arquitectura de Kubernetes¶
Componentes del plano de control¶
- API Server: Punto de entrada para todas las operaciones
- etcd: Base de datos distribuida que almacena la configuración
- Scheduler: Asigna pods a nodos
- Controller Manager: Mantiene el estado del cluster
Componentes del nodo¶
- kubelet: Agente que ejecuta en cada nodo
- kube-proxy: Gestiona las reglas de red
- Container Runtime: Software que ejecuta los contenedores
Conceptos fundamentales¶
Pods¶
Los pods son la unidad más pequeña de Kubernetes. Contienen uno o más contenedores.
# pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: mi-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Deployments¶
Los deployments gestionan el estado deseado de los pods.
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-deployment
spec:
replicas: 3
selector:
matchLabels:
app: mi-app
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: nginx
image: nginx:latest
Services¶
Los services exponen aplicaciones que se ejecutan en pods.
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: mi-service
spec:
selector:
app: mi-app
ports:
- port: 80
targetPort: 80
type: LoadBalancer
Comandos básicos¶
# Aplicar un manifiesto
kubectl apply -f archivo.yaml
# Listar pods
kubectl get pods
# Ver logs de un pod
kubectl logs <pod-name>
# Ejecutar comando en un pod
kubectl exec -it <pod-name> -- /bin/bash
# Escalar un deployment
kubectl scale deployment mi-deployment --replicas=5
Casos de uso¶
- Microservicios
- Aplicaciones nativas en la nube
- CI/CD pipelines
- Aplicaciones de alta disponibilidad
Próximos pasos¶
En las siguientes secciones exploraremos:
- Configuración avanzada de clusters
- Gestión de almacenamiento
- Redes y políticas de seguridad
- Monitoreo y logging
- Helm y gestión de paquetes
Preguntas frecuentes (FAQs)¶
¿Cuál es la diferencia entre un Pod y un Deployment?
Un Pod es la unidad más pequeña en Kubernetes (uno o más contenedores). Un Deployment gestiona réplicas de Pods, actualizaciones y rollback automático.
¿Cómo exponer mi aplicación fuera del cluster?
Usa Services (ClusterIP, NodePort, LoadBalancer) o Ingress para HTTP/HTTPS. Para pruebas rápidas, NodePort expone en un puerto del nodo.
¿Por qué mi Pod está en estado Pending?
Revisa con kubectl describe pod <pod>. Causas comunes: falta de recursos (CPU/memoria), problemas de scheduling, o nodos no disponibles.
¿Cómo persistir datos en Kubernetes?
Usa PersistentVolumes (PV) y PersistentVolumeClaims (PVC). Para bases de datos, considera StorageClasses con provisionamiento dinámico.
¿Cuál es la diferencia entre ConfigMap y Secret?
ConfigMap: Almacena datos no sensibles (variables de entorno, archivos de config). Secret: Para datos sensibles (passwords, tokens, certificados) - están base64 encoded pero no encriptados por defecto.
Recursos adicionales¶
Videos tutoriales¶
Video: Kubernetes en 5 minutos - Introducción rápida y completa
Documentación oficial¶
- Sitio web oficial: kubernetes.io
- Documentación: kubernetes.io/docs
- GitHub: github.com/kubernetes/kubernetes
- Blog oficial: kubernetes.io/blog
Comunidad¶
- Reddit: r/kubernetes
- Stack Overflow: stackoverflow.com/questions/tagged/kubernetes
- Slack: slack.k8s.io
- Discord: discord.gg/kubernetes
¿Buscas comandos rápidos?
Consulta nuestras Recetas rápidas para comandos copy-paste comunes.
¿Problemas con Kubernetes?
Revisa nuestra sección de troubleshooting para soluciones a errores comunes.