Despliegue de C# en Kubernetes: guía básica para desarrolladores

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Despliegue de C# en Kubernetes: guía básica

Kubernetes (K8s) se ha convertido en el estándar de facto para la orquestación de aplicaciones en contenedores. Si desarrollas en C# (.NET), tarde o temprano surgirá la pregunta: ¿cómo empaquetar tu aplicación y ejecutarla en la nube o en tu propio clúster? En esta guía, analizaremos el ciclo completo, desde la creación de una API web simple en ASP.NET Core hasta su despliegue en Kubernetes.

El artículo está dirigido a desarrolladores que ya están familiarizados con los conceptos básicos de C# y Docker, pero que recién comienzan a trabajar con Kubernetes.



1. Preparación de la aplicación .NET y la imagen Docker

Antes de desplegar la aplicación en Kubernetes, es necesario empaquetarla en un contenedor. Crearemos una API web mínima en C#.

  1. Cree un nuevo proyecto:
    dotnet new webapi -n MyK8sAppcd MyK8sApp
  2. Asegúrese de que la aplicación escuche en el puerto 80. En el archivo Program.cs (o appsettings.json), especifique:
    builder.WebHost.UseUrls("http://0.0.0.0:80");
  3. Cree un archivo Dockerfile en la raíz del proyecto:
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS baseWORKDIR /appEXPOSE 80

    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /srcCOPY ["MyK8sApp.csproj", "."]RUN dotnet restore "./MyK8sApp.csproj"COPY . .RUN dotnet build "MyK8sApp.csproj" -c Release -o /app/build

    FROM build AS publishRUN dotnet publish "MyK8sApp.csproj" -c Release -o /app/publish

    FROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "MyK8sApp.dll"]
  4. Construya la imagen y envíela a un registro (por ejemplo, Docker Hub):
    docker build -t tudockerhub/my-k8s-app:v1 .docker push tudockerhub/my-k8s-app:v1

Importante: Reemplace tudockerhub por el nombre de usuario real. Para pruebas locales, puede usar minikube y no publicar la imagen; basta con construirla localmente.



2. Creación de manifiestos de Kubernetes

Kubernetes utiliza archivos YAML declarativos para describir el estado deseado del clúster. Necesitaremos dos objetos principales: Deployment (gestión de pods) y Service (acceso de red).



2.1. Deployment

Cree un archivo deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: my-k8s-app-deployment  labels:    app: my-k8s-appspec:  replicas: 2  selector:    matchLabels:      app: my-k8s-app  template:    metadata:      labels:        app: my-k8s-app    spec:      containers:      - name: my-k8s-app        image: tudockerhub/my-k8s-app:v1        ports:        - containerPort: 80        resources:          requests:            memory: "64Mi"            cpu: "250m"          limits:            memory: "128Mi"            cpu: "500m"        livenessProbe:          httpGet:            path: /health            port: 80          initialDelaySeconds: 5          periodSeconds: 10        readinessProbe:          httpGet:            path: /ready            port: 80          initialDelaySeconds: 3          periodSeconds: 5

En este manifiesto especificamos:

  • replicas: 2 — dos instancias de la aplicación para tolerancia a fallos.
  • resources — límites de CPU y memoria (importante para la estabilidad del clúster).
  • livenessProbe y readinessProbe — verificaciones de estado. Agregue los endpoints /health y /ready a su controlador.


2.2. Service

Cree un archivo service.yaml:

apiVersion: v1kind: Servicemetadata:  name: my-k8s-app-servicespec:  selecto                

Blogs

Book Recommendations