Saltar al contenido principal

Capítulo 12.3 - Gestión de Entornos

Objetivos de Aprendizaje​

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

  • Comprender las estrategias de gestión de entornos
  • Utilizar namespaces para aislar los entornos
  • Gestionar clusters separados
  • Configurar valores por entorno
  • Implementar la promoción entre entornos
  • Aplicar buenas prácticas

Introducción​

La gestión de entornos permite separar el desarrollo, staging y producción para una mayor estabilidad y seguridad.


Estrategias​

1. Namespaces por Entorno​

Ventajas:

  • Sencillo de gestionar
  • Recursos compartidos
  • Económico

Desventajas:

  • Aislamiento limitado
  • Riesgo de conflictos

2. Clusters Separados​

Ventajas:

  • Aislamiento completo
  • Máxima seguridad
  • Sin conflictos

Desventajas:

  • Más complejo
  • Mayor coste

Namespaces por Entorno​

Creación​

# Crear los namespaces
kubectl create namespace dev
kubectl create namespace staging
kubectl create namespace production

# Añadir labels
kubectl label namespace dev environment=development
kubectl label namespace staging environment=staging
kubectl label namespace production environment=production

Despliegue​

# Desplegar en cada entorno
kubectl apply -f deployment.yaml -n dev
kubectl apply -f deployment.yaml -n staging
kubectl apply -f deployment.yaml -n production

Resource Quotas por Entorno​

# dev-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
namespace: dev
spec:
hard:
requests.cpu: "5"
requests.memory: 10Gi
limits.cpu: "10"
limits.memory: 20Gi

Clusters Separados​

Arquitectura​

Ventajas:

  • Aislamiento completo
  • Máxima seguridad
  • Sin riesgo de contaminación

Configuración por Entorno​

Values Files​

# values-dev.yaml
replicaCount: 1
image:
tag: "dev"
resources:
requests:
cpu: 100m
memory: 128Mi

# values-staging.yaml
replicaCount: 2
image:
tag: "staging"
resources:
requests:
cpu: 250m
memory: 256Mi

# values-prod.yaml
replicaCount: 5
image:
tag: "1.0.0"
resources:
requests:
cpu: 500m
memory: 512Mi

Despliegue con Helm​

# Dev
helm install my-app ./my-chart -f values-dev.yaml -n dev

# Staging
helm install my-app ./my-chart -f values-staging.yaml -n staging

# Production
helm install my-app ./my-chart -f values-prod.yaml -n production

Promoción entre Entornos​

Proceso​

Automatización​

# GitHub Actions workflow
name: Promote to Production
on:
workflow_dispatch:
inputs:
version:
description: 'Version to promote'
required: true

jobs:
promote:
runs-on: ubuntu-latest
steps:
- name: Deploy to Production
run: |
helm upgrade my-app ./my-chart \
-f values-prod.yaml \
--set image.tag=${{ github.event.inputs.version }} \
-n production

Buenas Prácticas​

1. Separación Clara​

Mantener una separación clara entre los entornos.

2. Configuración Externalizada​

Utilizar ConfigMaps y Secrets para la configuración.

3. Pruebas Automáticas​

Ejecutar pruebas en cada entorno.

4. Documentación​

Documentar las diferencias entre entornos.

5. Acceso Restringido​

Limitar el acceso a producción con RBAC.


Resumen​

En este capítulo, usted ha aprendido:

Estrategias: Namespaces o clusters separados
Namespaces: Sencillo, económico, aislamiento limitado
Clusters: Aislamiento completo, más complejo
Configuración: Values files por entorno
Promoción: Proceso de promoción entre entornos
Buenas prácticas: Separación, configuración externalizada, pruebas


Próximos Pasos​

Lab 12.4: Proyecto Final Completo
Resumen del Curso


Capítulo creado el: Diciembre 2024