Kubernetes en producción: Mejores prácticas 2026
Lo que necesitas saber para correr Kubernetes en producción sin dolor de cabeza.
Las 4 áreas críticas
Security first
RBAC, network policies, Pod Security Standards, secrets encryption, scan images en CI/CD.
Alta disponibilidad
Multi-AZ deployments, pod disruption budgets, anti-affinity rules, readiness/liveness probes.
Resource management
Requests y limits configurados, LimitRanges por namespace, VPA para auto-adjust.
Monitoring & Alerting
Prometheus + Grafana, métricas de sistema y aplicación, alerts actionables.
Checklist de seguridad
Checklist de Alta Disponibilidad
Métricas esenciales a monitorear
| Métrica | Target |
|---|---|
| CPU/Memory usage | Por pod, container, node |
| Request latency (p50, p95, p99) | Por servicio |
| Error rate (5xx) | Alertas automáticas |
| Pod restarts | Investigar spikes |
| Storage usage | PVCs y volúmenes efímeros |
| Network throughput | Detectar bottlenecks |
Errores comunes a evitar
No definir Resource Limits
Containers sin límites pueden greedy y afectar a otros. Siempre configura requests y limits.
Usar latest tag
Imposible hacer rollback. Usa tags específicos o digests SHA.
Ignorar Pod Disruption Budgets
Actualizaciones de cluster pueden causar downtime si no están protegidos.
No tener log aggregation
Logs en stdout se pierden. Usa Fluentd/Bitnami + Elasticsearch o Loki.
Un solo Health Endpoint
Separa /health/ready y /health/live. Read probes no deben depender de dependencias externas.
Ejemplo: Deployment listo para producción
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
securityContext:
runAsNonRoot: true
runAsUser: 10000
fsGroup: 10000
containers:
- name: my-app
image: myregistry/myapp:v1.2.3
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
readinessProbe:
httpGet:
path: /health/ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
livenessProbe:
httpGet:
path: /health/live
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
securityContext:
readOnlyRootFilesystem: true
capabilities:
drop: ["ALL"]¿Necesitas ayuda con Kubernetes?
Puedo revisar tu arquitectura Kubernetes, identificar riesgos y optimizar para producción.
Solicitar auditoría