Déploiement C# sur Kubernetes : guide pratique de base

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Déploiement C# sur Kubernetes : guide pratique pour les développeurs .NET

\n\n

Le développement moderne en C# (.NET) nécessite de plus en plus non seulement d'écrire du code de qualité, mais aussi de savoir déployer correctement l'application en environnement de production. Kubernetes (K8s) est devenu le standard de facto pour l'orchestration de conteneurs. Dans cet article, nous allons détailler le processus étape par étape de déploiement d'une application C# sur Kubernetes — de la conteneurisation à la configuration d'Ingress.

\n\n

1. Préparation de l'application .NET et de l'image Docker

\n\n

Avant d'arriver sur Kubernetes, votre application C# doit être empaquetée dans une image Docker. Prenons l'exemple d'une simple API Web ASP.NET Core.

\n\n

Créez le projet :

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

Ajoutez un endpoint simple (fichier Program.cs) :

\n
var builder = WebApplication.CreateBuilder(args);\nvar app = builder.Build();\n\napp.MapGet("/", () => "Hello from C# on Kubernetes!");\n\napp.Run();
\n\n

Créons maintenant un Dockerfile à la racine du projet :

\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

Construisez et poussez l'image vers Docker Hub ou un registre local :

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

Important : Dans ASP.NET Core 8+, par défaut, l'application écoute sur le port 8080, ce qui est idéal pour Kubernetes.

\n\n

2. Manifestes YAML principaux pour Kubernetes

\n\n

Kubernetes gère les ressources via des fichiers YAML. Pour exécuter une application C#, nous aurons besoin au minimum d'un Deployment et d'un Service.

\n\n

2.1. Deployment (deployment.yaml)

\n

Le Deployment est responsable du maintien du nombre souhaité 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

Points clés :

\n
    \n
  • replicas: 3 — 3 instances de l'application
  • \n
  • livenessProbe — vérification de l'état de santé (il est recommandé d'ajouter un endpoint /health en C#)
  • \n
  • Les ressources requests/limits aident le planificateur K8s
  • \n
\n\n

2.2. Service (service.yaml)

\n

Le Service fournit un point d'entrée stable vers les 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 — service interne, accessible uniquement à l'intérieur du cluster. Pour un accès externe, nous utilisons Ingress.

\n\n

3. Configuration d'Ingress et ConfigMap

\n\n

3.1. Ingress (ingress.yaml)

\n

Ingress permet d'accéder au service depuis l'extérieur via un nom de domaine.

\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