K8s
This content is not available in your language yet.
10.3 Kubernetes (K8s): Orquestación de Contenedores a Escala
Sección titulada «10.3 Kubernetes (K8s): Orquestación de Contenedores a Escala»Introducción
Sección titulada «Introducción»Una vez que las aplicaciones se ejecutan en contenedores, surge un problema inmediato en entornos reales: ¿cómo gestionar decenas o cientos de contenedores distribuidos entre múltiples nodos? Aquí es donde entra Kubernetes (K8s).
Kubernetes es una plataforma de orquestación que automatiza el despliegue, escalado y operación de aplicaciones contenerizadas. Permite pasar de ejecutar contenedores individuales a gestionar infraestructuras completas declarativas y resilientes.
Para un Sysadmin senior, Kubernetes no es solo una herramienta, sino un cambio de paradigma operativo: se deja de administrar máquinas para administrar estados deseados.
Objetivos de aprendizaje
Sección titulada «Objetivos de aprendizaje»Al finalizar este capítulo serás capaz de:
- Comprender la arquitectura y componentes de Kubernetes.
- Gestionar clústeres y nodos.
- Desplegar aplicaciones mediante objetos declarativos.
- Entender el ciclo de vida de los Pods.
- Aplicar buenas prácticas en entornos productivos.
Conceptos Teóricos
Sección titulada «Conceptos Teóricos»1. ¿Qué es Kubernetes?
Sección titulada «1. ¿Qué es Kubernetes?»Kubernetes es un sistema de orquestación que permite:
- desplegar contenedores automáticamente
- escalar aplicaciones
- gestionar redes internas
- garantizar alta disponibilidad
Se basa en un modelo declarativo: defines el estado deseado y Kubernetes se encarga de alcanzarlo.
En Kubernetes no ejecutas contenedores manualmente; defines cómo deben ejecutarse y el sistema mantiene ese estado.
2. Arquitectura de Kubernetes
Sección titulada «2. Arquitectura de Kubernetes»Un clúster Kubernetes se compone de:
Plano de control (Control Plane)
Sección titulada «Plano de control (Control Plane)»- API Server → punto central de comunicación
- Scheduler → decide dónde ejecutar los Pods
- Controller Manager → mantiene el estado deseado
- etcd → base de datos del clúster
Nodos (Workers)
Sección titulada «Nodos (Workers)»- kubelet → agente que ejecuta Pods
- container runtime → Docker, containerd
- kube-proxy → gestión de red
3. Objetos principales
Sección titulada «3. Objetos principales»Unidad mínima de ejecución (uno o varios contenedores).
Deployment
Sección titulada «Deployment»Define cómo desplegar Pods y garantiza disponibilidad.
Service
Sección titulada «Service»Expone aplicaciones dentro o fuera del clúster.
Namespace
Sección titulada «Namespace»Aislamiento lógico dentro del clúster.
4. Modelo declarativo
Sección titulada «4. Modelo declarativo»Ejemplo:
apiVersion: apps/v1kind: Deploymentmetadata: name: webspec: replicas: 2Kubernetes asegura que siempre existan 2 réplicas.
5. Networking
Sección titulada «5. Networking»Cada Pod:
- tiene su propia IP
- puede comunicarse con otros Pods
Servicios:
- ClusterIP
- NodePort
- LoadBalancer
6. Escalabilidad y autocuración
Sección titulada «6. Escalabilidad y autocuración»Kubernetes permite:
- escalar Pods automáticamente
- reiniciar contenedores fallidos
- redistribuir carga
Laboratorio Práctico
Sección titulada «Laboratorio Práctico»Escenario
Sección titulada «Escenario»Desplegar una aplicación web en Kubernetes:
- crear deployment
- exponer servicio
- verificar funcionamiento
Este laboratorio asume un entorno local con minikube o similar.
Parte 1: Verificar clúster
Sección titulada «Parte 1: Verificar clúster»kubectl cluster-infoVer nodos
Sección titulada «Ver nodos»kubectl get nodesParte 2: Crear Deployment
Sección titulada «Parte 2: Crear Deployment»nano deployment.ymlapiVersion: apps/v1kind: Deploymentmetadata: name: web-deployspec: replicas: 2 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80Aplicar configuración
Sección titulada «Aplicar configuración»kubectl apply -f deployment.ymlVer Pods
Sección titulada «Ver Pods»kubectl get podsParte 3: Exponer servicio
Sección titulada «Parte 3: Exponer servicio»kubectl expose deployment web-deploy \--type=NodePort \--port=80Ver servicios
Sección titulada «Ver servicios»kubectl get svccurl http://<NODE_IP>:<NODE_PORT>Parte 4: Escalado
Sección titulada «Parte 4: Escalado»kubectl scale deployment web-deploy --replicas=4Ver resultado:
kubectl get podsOutput esperado
Sección titulada «Output esperado»NAME READY STATUSweb-deploy-abc123 1/1 Runningweb-deploy-def456 1/1 RunningErrores Comunes y Troubleshooting
Sección titulada «Errores Comunes y Troubleshooting»1. Pods en estado CrashLoopBackOff
Sección titulada «1. Pods en estado CrashLoopBackOff»-Causa:*
- error en contenedor
-Solución:*
kubectl logs <pod>2. Imagen incorrecta
Sección titulada «2. Imagen incorrecta»ErrImagePull-Solución:*
verificar nombre y acceso al repositorio.
3. Problemas de red
Sección titulada «3. Problemas de red»Servicio no accesible.
-Solución:*
kubectl describe svc4. Recursos insuficientes
Sección titulada «4. Recursos insuficientes»Pods no programados.
Pending-Solución:*
verificar capacidad del nodo.
5. YAML inválido
Sección titulada «5. YAML inválido»Errores de indentación.
-Solución:*
validar estructura cuidadosamente.
Buenas Prácticas (Nivel Senior)
Sección titulada «Buenas Prácticas (Nivel Senior)»1. Uso de namespaces
Sección titulada «1. Uso de namespaces»Separar entornos:
kubectl create namespace prod2. Definir recursos
Sección titulada «2. Definir recursos»resources: limits: memory: "512Mi" cpu: "1"3. Health checks
Sección titulada «3. Health checks»livenessProbe: httpGet: path: / port: 804. Uso de ConfigMaps y Secrets
Sección titulada «4. Uso de ConfigMaps y Secrets»Separar configuración:
kubectl create configmap app-config5. Imágenes versionadas
Sección titulada «5. Imágenes versionadas»Evitar latest.
6. Rolling updates
Sección titulada «6. Rolling updates»Actualizaciones sin downtime:
kubectl rollout status deployment web-deploy7. RBAC
Sección titulada «7. RBAC»Controlar accesos al clúster.
8. Observabilidad
Sección titulada «8. Observabilidad»Integrar con:
- Prometheus
- Grafana
- ELK
9. Infraestructura como código
Sección titulada «9. Infraestructura como código»Gestionar manifests en Git + CI/CD.
Resumen y Siguiente Paso
Sección titulada «Resumen y Siguiente Paso»Has comprendido los fundamentos de Kubernetes, incluyendo su arquitectura, modelo declarativo y capacidad para orquestar contenedores a gran escala. Este conocimiento te permite evolucionar desde la ejecución de contenedores individuales hacia la gestión de plataformas completas.
Kubernetes representa el estándar actual en despliegues modernos, especialmente en entornos cloud y microservicios.
Con este capítulo, completas el bloque de virtualización:
- KVM → virtualización tradicional
- Docker → contenedores
- Kubernetes → orquestación
El siguiente paso es profundizar en la observabilidad y operación de sistemas complejos:
➡️ 11-monitorización — rendimiento, métricas y troubleshooting avanzado en Linux.
