Introduction : Pourquoi C# et Kubernetes forment un duo puissant
\n\nLe développement moderne exige de plus en plus non seulement d'écrire du code, mais aussi de l'empaqueter correctement et de l'exécuter dans un environnement cloud. Kubernetes (ou K8s) est devenu le standard de facto pour l'orchestration de conteneurs, et C# (.NET) l'un des langages les plus populaires pour créer des applications web à forte charge et des microservices.
\n\nDans ce guide, nous passerons d'une application C# prête à son déploiement complet dans un cluster Kubernetes. Vous apprendrez à créer une image Docker, à rédiger des manifestes pour le déploiement et le service, puis à tout lancer avec kubectl. Pas de magie, seulement de la pratique.
Étape 1 : Préparation de l'application .NET et conteneurisation
\n\n1.1 Création d'une API Web simple en C#
\n\nPour la démonstration, nous allons créer une API Web ASP.NET Core minimale. Ouvrez le terminal et exécutez :
\n\ndotnet new webapi -n MyK8sApp\ncd MyK8sApp\n\nPar défaut, le projet contient déjà le contrôleur WeatherForecastController. Vérifions que l'application se lance localement :
dotnet run\n\nAccédez à l'adresse http://localhost:5000/weatherforecast — vous devriez voir une réponse JSON. Notre application est maintenant prête à être empaquetée.
1.2 Création du Dockerfile
\n\nLe déploiement sur Kubernetes est impossible sans conteneurisation. Créons un fichier Dockerfile à la racine du projet :
# Utilisation de l'image officielle pour la compilation\nFROM mcr.microsoft.com/dotnet/sdk:8.0 AS build\nWORKDIR /app\n\n# Copie des fichiers du projet et restauration des dépendances\nCOPY *.csproj .\nRUN dotnet restore\n\n# Copie des autres fichiers et compilation de l'application\nCOPY . .\nRUN dotnet publish -c Release -o out\n\n# Image finale — seulement le runtime\nFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime\nWORKDIR /app\nCOPY --from=build /app/out .\nENTRYPOINT ["dotnet", "MyK8sApp.dll"]\n\nRemarque : nous utilisons une compilation multi-étapes (multi-stage build) — cela réduit la taille finale de l'image et améliore la sécurité.
\n\n1.3 Construction et vérification de l'image Docker
\n\nConstruisez l'image et lancez-la localement :
\n\ndocker build -t myk8sapp:latest .\ndocker run -d -p 8080:80 --name myapp myk8sapp:latest\n\nVérifiez le fonctionnement : http://localhost:8080/weatherforecast. Si tout fonctionne — parfait. Arrêtez le conteneur :
docker stop myapp && docker rm myapp\n\nÉtape 2 : Bases de Kubernetes — ce qu'il faut savoir pour le déploiement
\n\nAvant d'écrire des manifestes, comprenons les concepts clés de Kubernetes :
\n\n- \n
- Pod — unité de déploiement minimale. Contient un ou plusieurs conteneurs. \n
- Deployment — gère l'état des Pods : mise à l'échelle, mises à jour, reprise après panne. \n
- Service — abstraction qui assure l'accès réseau aux Pods. Généralement de type
ClusterIP(interne) ouLoadBalancer(externe). \n - ConfigMap / Secret — pour stocker la configuration et les données sensibles. \n
Nous utiliserons minikube pour les tests locaux. Installez-le selon les instructions officielles.
\n\nLancez le cluster :
\n\nminikube start\n\nÉtape 3 : Création des manifestes Kubernetes pour l'application C#
\n\n3.1 Manifeste Deployment
\n\nCréez un fichier 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