Saltar al contenido principal

Capítulo 12.1 - Despliegue en Producción

Objetivos de Aprendizaje​

Al finalizar este capítulo, usted será capaz de:

  • Comprender los requisitos de producción
  • Implementar alta disponibilidad
  • Configurar la seguridad en producción
  • Gestionar los recursos de manera eficiente
  • Implementar monitoreo y alertas
  • Aplicar las mejores prácticas

Introducción​

Desplegar en producción requiere una preparación rigurosa para asegurar la disponibilidad, la seguridad y el rendimiento.


Alta Disponibilidad​

Clústeres Multi-Nodo​

Recomendaciones:

  • Mínimo 3 nodos para el Control Plane
  • Mínimo 3 worker nodes
  • Distribución en varias zonas de disponibilidad

Pod Disruption Budgets​

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: my-app

Resultado: Garantiza que al menos 2 Pods estén disponibles durante las actualizaciones.


Seguridad​

RBAC Configurado​

# Limitar los permisos
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]

Políticas de Red​

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress

Secrets Cifrados​

# Activar el cifrado en reposo
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <base64-encoded-secret>

Imágenes Escaneadas​

Utilizar herramientas de escaneo de imágenes (Trivy, Clair) antes del despliegue.


Gestión de Recursos​

Requests y Limits​

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: app
image: my-app:1.0
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi

Resource Quotas​

apiVersion: v1
kind: ResourceQuota
metadata:
name: namespace-quota
namespace: production
spec:
hard:
requests.cpu: "10"
requests.memory: 20Gi
limits.cpu: "20"
limits.memory: 40Gi
persistentvolumeclaims: "10"

Limit Ranges​

apiVersion: v1
kind: LimitRange
metadata:
name: namespace-limits
namespace: production
spec:
limits:
- default:
cpu: "500m"
memory: "1Gi"
defaultRequest:
cpu: "250m"
memory: "512Mi"
type: Container

Monitoreo y Alertas​

Métricas Esenciales​

  • Uso de CPU/Memoria
  • Latencia de las solicitudes
  • Tasa de errores
  • Disponibilidad de los servicios

Alertas Críticas​

  • Pods en CrashLoop
  • Uso de CPU > 90%
  • Uso de Memoria > 90%
  • Servicios no disponibles

Backup y Recuperación ante Desastres​

Backup de etcd​

# Backup
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/etcd/ca.crt \
--cert=/etc/etcd/server.crt \
--key=/etc/etcd/server.key

# Restore
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db

Backup de Volúmenes​

Utilizar snapshots de volúmenes (EBS, Azure Disk, etc.).


Buenas Prácticas​

1. Multi-Ambientes​

Separar dev, staging, producción con namespaces o clústeres.

2. Versionado​

Utilizar tags de imágenes específicos, no latest.

3. Health Checks​

Configurar liveness, readiness y startup probes.

4. Rolling Updates​

Utilizar estrategias de despliegue sin interrupciones.

5. Documentación​

Documentar los procedimientos de despliegue y rollback.


Resumen​

En este capítulo, usted ha aprendido:

Alta disponibilidad: Multi-nodos, Pod Disruption Budgets
Seguridad: RBAC, Network Policies, secrets cifrados, imágenes escaneadas
Recursos: Requests, limits, quotas, limit ranges
Monitoreo: Métricas esenciales, alertas críticas
Backup: etcd, volúmenes, recuperación ante desastres
Buenas prácticas: Multi-ambientes, versionado, health checks


Próximos Pasos​

Capítulo 12.2: CI/CD
Capítulo 12.3: Ambientes
Lab 12.1: Configuración de Resource Management


Capítulo creado el: Diciembre 2024