Implantação de C# no Kubernetes: guia básico na prática

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Implantação de C# no Kubernetes: guia prático para desenvolvedores .NET

\n\n

O desenvolvimento moderno em C# (.NET) cada vez mais exige não apenas escrever código de qualidade, mas também saber como implantar corretamente a aplicação em ambiente de produção. O Kubernetes (K8s) tornou-se o padrão de facto para orquestração de contêineres. Neste artigo, vamos analisar o processo passo a passo de implantação de uma aplicação C# no Kubernetes — desde a conteinerização até a configuração do Ingress.

\n\n

1. Preparação da aplicação .NET e imagem Docker

\n\n

Antes de chegar ao Kubernetes, sua aplicação C# deve ser empacotada em uma imagem Docker. Vamos considerar uma Web API ASP.NET Core simples.

\n\n

Crie o projeto:

\n
dotnet new webapi -n MyK8sApp\ncd MyK8sApp
\n\n

Adicione um endpoint simples (arquivo Program.cs):

\n
var builder = WebApplication.CreateBuilder(args);\nvar app = builder.Build();\n\napp.MapGet("/", () => "Olá do C# no Kubernetes!");\n\napp.Run();
\n\n

Agora vamos criar o Dockerfile na raiz do projeto:

\n
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base\nWORKDIR /app\nEXPOSE 8080\n\nFROM mcr.microsoft.com/dotnet/sdk:8.0 AS build\nWORKDIR /src\nCOPY ["MyK8sApp.csproj", "."]\nRUN dotnet restore\nCOPY . .\nRUN dotnet publish -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=build /app/publish .\nENTRYPOINT ["dotnet", "MyK8sApp.dll"]
\n\n

Compile e envie a imagem para o Docker Hub ou um registry local:

\n
docker build -t yourdockerhub/my-k8s-app:v1 .\ndocker push yourdockerhub/my-k8s-app:v1
\n\n

Importante: No ASP.NET Core 8+, por padrão, a aplicação escuta na porta 8080, o que é ideal para o Kubernetes.

\n\n

2. Manifestos YAML principais para Kubernetes

\n\n

O Kubernetes gerencia recursos por meio de arquivos YAML. Para executar uma aplicação C#, precisaremos pelo menos de um Deployment e um Service.

\n\n

2.1. Deployment (deployment.yaml)

\n

O Deployment é responsável por manter o número desejado de réplicas de Pods.

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-k8s-app-deployment\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: my-k8s-app\n  template:\n    metadata:\n      labels:\n        app: my-k8s-app\n    spec:\n      containers:\n      - name: my-k8s-app\n        image: yourdockerhub/my-k8s-app:v1\n        ports:\n        - containerPort: 8080\n        resources:\n          requests:\n            memory: "64Mi"\n            cpu: "250m"\n          limits:\n            memory: "128Mi"\n            cpu: "500m"\n        livenessProbe:\n          httpGet:\n            path: /health\n            port: 8080\n          initialDelaySeconds: 5\n          periodSeconds: 10
\n\n

Pontos-chave:

\n
    \n
  • replicas: 3 — 3 instâncias da aplicação
  • \n
  • livenessProbe — verificação de saúde (recomenda-se adicionar o endpoint /health em C#)
  • \n
  • Os recursos requests/limits ajudam o escalonador do K8s
  • \n
\n\n

2.2. Service (service.yaml)

\n

O Service fornece um ponto de entrada estável para os Pods.

\n
apiVersion: v1\nkind: Service\nmetadata:\n  name: my-k8s-app-service\nspec:\n  selector:\n    app: my-k8s-app\n  ports:\n  - protocol: TCP\n    port: 80\n    targetPort: 8080\n  type: ClusterIP
\n\n

ClusterIP — serviço interno, acessível apenas dentro do cluster. Para acesso externo, usamos o Ingress.

\n\n

3. Configuração do Ingress e ConfigMap

\n\n

3.1. Ingress (ingress.yaml)

\n

O Ingress permite o acesso externo ao serviço por meio de um nome de domínio.

\n
apiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n  name: my-k8s-app-ingress\n  annotations:\n    nginx.ingress.kubernetes.io/rewrite-target: /\nspec:\n  rules:\n  - host: myapp.example.com\n    http:\n      paths:\n      - path: /\n        pathType: Prefix\n        backend:\n          ser                

Blogs

Book Recommendations