Introduction : Pourquoi exécuter C# dans Kubernetes ?
Le développement moderne en C# (.NET) nécessite de plus en plus une infrastructure évolutive et résiliente. Kubernetes (K8s) est devenu la norme pour l'orchestration de conteneurs, permettant d'automatiser le déploiement, la mise à l'échelle et la gestion des applications. Dans ce guide, nous allons montrer comment transformer votre application C# en conteneur et l'exécuter dans un cluster Kubernetes en pratique.
Vous apprendrez à préparer une image Docker, à écrire des manifestes Kubernetes et à effectuer le déploiement à l'aide de kubectl. Cet article est destiné aux développeurs qui connaissent déjà les bases de C# et souhaitent maîtriser les pratiques modernes de DevOps.
1. Préparation de l'application C# pour la conteneurisation
Avant de déployer l'application dans Kubernetes, il faut l'empaqueter dans une image Docker. Pour l'exemple, prenons une simple application ASP.NET Core Web API.
1.1. Création du projet
Créez un nouveau projet avec .NET CLI :
dotnet new webapi -n MyK8sAppcd MyK8sAppAssurez-vous que l'application fonctionne localement :
dotnet runPar défaut, l'application sera accessible à l'adresse http://localhost:5000.
1.2. Ajout du Dockerfile
À la racine du projet, créez un fichier Dockerfile (sans extension). Utilisez une construction multi-étapes pour optimiser la taille de l'image :
# Étape de constructionFROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /appCOPY *.csproj ./RUN dotnet restoreCOPY . ./RUN dotnet publish -c Release -o out
# Étape d'exécutionFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appCOPY --from=build /app/out ./ENV ASPNETCORE_URLS=http://+:80EXPOSE 80ENTRYPOINT ["dotnet", "MyK8sApp.dll"]1.3. Construction et vérification de l'image Docker
Construisez l'image et exécutez-la localement :
docker build -t myk8sapp:latest .docker run -d -p 8080:80 --name myapp myk8sapp:latestVérifiez que l'application répond : curl http://localhost:8080/weatherforecast (ou ouvrez dans le navigateur).
2. Rédaction des manifestes Kubernetes
Pour le déploiement dans Kubernetes, vous aurez besoin de fichiers YAML décrivant l'état souhaité de l'application. L'ensemble minimal comprend un Deployment et un Service.
2.1. Création du Deployment
Fichier deployment.yaml :
apiVersion: apps/v1kind: Deploymentmetadata: name: myk8sapp-deployment labels: app: myk8sappspec: replicas: 2 selector: matchLabels: app: myk8sapp template: metadata: labels: app: myk8sapp spec: containers: - name: myk8sapp image: myk8sapp:latest ports: - containerPort: 80 env: - name: ASPNETCORE_ENVIRONMENT value: "Production" resources: requests: memory: "128Mi" cpu: "250m" limits: memory: "256Mi" cpu: "500m"Important : Si vous utilisez un cluster local (par exemple, Minikube ou Kind), l'image doit être accessible à l'intérieur du cluster. Ou spécifiez imagePullPolicy: Never pour les images locales.
2.2. Création du Service
Fichier service.yaml :
apiVersion: v1kind: Servicemetadata: name: myk8sapp-servicespec: selector: app: myk8sapp ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerLe type LoadBalancer convient aux fournisseurs cloud. Pour les clusters locaux, utilisez NodePort ou ClusterIP avec redirection de ports via kubectl port-forward.
3. Déploiement et vérification de l'application
Maintenant que les manifestes sont prêts, effectuez le déploiement dans le cluster Kubernetes.