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