Introdução: Por que C# e Kubernetes são uma combinação poderosa
\n\nO desenvolvimento moderno cada vez mais exige não apenas escrever código, mas também empacotá-lo e executá-lo corretamente em um ambiente de nuvem. O Kubernetes (ou K8s) tornou-se o padrão de facto para orquestração de contêineres, e o C# (.NET) é uma das linguagens mais populares para criar aplicações web de alta carga e microsserviços.
\n\nNeste guia, percorreremos o caminho desde uma aplicação C# pronta até sua implantação completa em um cluster Kubernetes. Você aprenderá como criar uma imagem Docker, escrever manifestos para deployment e serviço, e então executar tudo com kubectl. Sem mágica — apenas prática.
Passo 1: Preparação da aplicação .NET e conteinerização
\n\n1.1 Criando uma Web API simples em C#
\n\nPara demonstração, criaremos uma ASP.NET Core Web API mínima. Abra o terminal e execute:
\n\ndotnet new webapi -n MyK8sApp\ncd MyK8sApp\n\nPor padrão, o projeto já contém o controller WeatherForecastController. Vamos verificar se a aplicação inicia localmente:
dotnet run\n\nAcesse http://localhost:5000/weatherforecast — você deve ver uma resposta JSON. Agora nossa aplicação está pronta para ser empacotada.
1.2 Criando o Dockerfile
\n\nA implantação no Kubernetes não é possível sem conteinerização. Vamos criar o arquivo Dockerfile na raiz do projeto:
# Usamos a imagem oficial para build\nFROM mcr.microsoft.com/dotnet/sdk:8.0 AS build\nWORKDIR /app\n\n# Copiamos os arquivos do projeto e restauramos as dependências\nCOPY *.csproj .\nRUN dotnet restore\n\n# Copiamos os demais arquivos e compilamos a aplicação\nCOPY . .\nRUN dotnet publish -c Release -o out\n\n# Imagem final — apenas runtime\nFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime\nWORKDIR /app\nCOPY --from=build /app/out .\nENTRYPOINT ["dotnet", "MyK8sApp.dll"]\n\nObserve: usamos multi-stage build — isso reduz o tamanho final da imagem e aumenta a segurança.
\n\n1.3 Build e verificação da imagem Docker
\n\nConstrua a imagem e execute-a localmente:
\n\ndocker build -t myk8sapp:latest .\ndocker run -d -p 8080:80 --name myapp myk8sapp:latest\n\nVerifique o funcionamento: http://localhost:8080/weatherforecast. Se tudo funcionar — ótimo. Pare o contêiner:
docker stop myapp && docker rm myapp\n\nPasso 2: Fundamentos do Kubernetes — o que você precisa saber para implantar
\n\nAntes de escrever manifestos, vamos entender os conceitos-chave do Kubernetes:
\n\n- \n
- Pod — a menor unidade de implantação. Contém um ou mais contêineres. \n
- Deployment — gerencia o estado dos Pods: escalonamento, atualizações, recuperação de falhas. \n
- Service — abstração que fornece acesso de rede aos Pods. Geralmente usa os tipos
ClusterIP(interno) ouLoadBalancer(externo). \n - ConfigMap / Secret — para armazenar configurações e dados sensíveis. \n
Usaremos o minikube para testes locais. Instale-o seguindo o guia oficial.
\n\nInicie o cluster:
\n\nminikube start\n\nPasso 3: Criando manifestos Kubernetes para a aplicação C#
\n\n3.1 Manifesto Deployment
\n\nCrie o arquivo deployment.yaml:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: myk8sapp-deployment\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: myk8sapp\n template:\n metadata:\n labels:\n app: myk8sapp\n spec:\n containers:\n - name: myk8sapp\n image: myk8sapp:latest\n imagePullPol