En esta clase aprenderemos cómo desplegar Orleans en entornos de producción, utilizando Docker, Kubernetes y Azure para asegurar escalabilidad y alta disponibilidad.
Objetivos de la Clase
- Comprender los requisitos para desplegar Orleans en producción.
- Crear una imagen Docker para Orleans.
- Implementar Orleans en Kubernetes para escalabilidad.
- Configurar Orleans en Azure Kubernetes Service (AKS).
- Probar la ejecución distribuida de Orleans en la nube.
¿Cómo Desplegar Orleans en Producción?
Orleans necesita un entorno de ejecución distribuido para manejar múltiples instancias de Granos. Las opciones más comunes incluyen:
- Docker: Empaquetar Orleans en contenedores ligeros.
- Kubernetes: Gestionar múltiples instancias de Orleans con balanceo de carga.
- Azure Kubernetes Service (AKS): Desplegar Orleans en la nube con escalabilidad automática.
Crear una Imagen Docker para Orleans
1. Agregar un Archivo Dockerfile
Crea un archivo Dockerfile en la raíz del proyecto OrleansDemo:
# Imagen base de .NET
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
# Copiar archivos del proyecto y compilarlos
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY OrleansDemo/ OrleansDemo/
RUN dotnet publish OrleansDemo/OrleansDemo.csproj -c Release -o /app/publish
# Ejecutar el proyecto
FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "OrleansDemo.dll"]
2. Construir la Imagen Docker
Ejecuta el siguiente comando en la terminal:
docker build -t orleans-demo .
Esto creará una imagen Docker con Orleans lista para ejecutarse.
3. Ejecutar Orleans en un Contenedor
docker run -p 8080:8080 --name orleans-container orleans-demo
Implementar Orleans en Kubernetes
1. Crear un Archivo de Despliegue de Kubernetes
Crea un archivo orleans-deployment.yaml con la configuración de Orleans en Kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: orleans-silo
spec:
replicas: 3
selector:
matchLabels:
app: orleans
template:
metadata:
labels:
app: orleans
spec:
containers:
- name: orleans
image: orleans-demo
ports:
- containerPort: 8080
2. Aplicar el Despliegue en Kubernetes
Ejecuta el siguiente comando para desplegar Orleans en un clúster de Kubernetes:
kubectl apply -f orleans-deployment.yaml
3. Verificar el Despliegue
kubectl get pods
Esto mostrará los pods de Orleans en ejecución en Kubernetes.
Desplegar Orleans en Azure Kubernetes Service (AKS)
1. Crear un Clúster de Kubernetes en Azure
Ejecuta los siguientes comandos para crear un clúster en Azure Kubernetes Service (AKS):
az aks create --resource-group OrleansGroup --name OrleansCluster --node-count 3 --enable-addons monitoring --generate-ssh-keys
2. Conectar Kubernetes Localmente
az aks get-credentials --resource-group OrleansGroup --name OrleansCluster
3. Desplegar Orleans en AKS
kubectl apply -f orleans-deployment.yaml
4. Exponer Orleans como un Servicio en la Nube
apiVersion: v1
kind: Service
metadata:
name: orleans-service
spec:
type: LoadBalancer
selector:
app: orleans
ports:
- protocol: TCP
port: 80
targetPort: 8080
Ejecuta:
kubectl apply -f orleans-service.yaml
Esto creará un balanceador de carga en Azure para acceder a Orleans desde Internet.
Probar Orleans en Kubernetes
1. Obtener la IP Pública del Servicio
kubectl get services orleans-service
Esto mostrará la IP externa de Orleans.
2. Llamar a Orleans desde un Cliente Externo
curl http://<IP-EXTERNA>/api/usuarios/user123/nombre
Si todo funciona correctamente, Orleans debería responder con los datos almacenados.
Cuestionario de Autoevaluación
- ¿Cómo Orleans puede ejecutarse en un entorno de producción?
- ¿Cuál es la ventaja de ejecutar Orleans en Kubernetes?
- ¿Qué diferencia hay entre Docker y Kubernetes para desplegar Orleans?
- ¿Cómo se puede exponer Orleans a Internet en Azure?
- ¿Qué sucede si un nodo de Orleans en Kubernetes falla?
Resumen de la Clase
- Orleans puede desplegarse en producción con Docker, Kubernetes y Azure.
- Docker permite crear imágenes portables para ejecutar Orleans en cualquier entorno.
- Kubernetes permite escalar Orleans automáticamente según la demanda.
- Azure Kubernetes Service (AKS) facilita el despliegue en la nube con balanceo de carga.
- Probamos el despliegue y acceso a Orleans desde un cliente externo.
Próxima Clase: Testing y Monitoreo
En la siguiente clase, aprenderemos cómo realizar pruebas unitarias en Orleans y monitorear el estado de los Granos y Silos en tiempo real.