Einleitung: Warum C# und Kubernetes ein starkes Duo sind
\n\nDie moderne Entwicklung erfordert zunehmend nicht nur das Schreiben von Code, sondern auch dessen korrekte Paketierung und Ausführung in einer Cloud-Umgebung. Kubernetes (oder K8s) hat sich zum De-facto-Standard für die Container-Orchestrierung entwickelt, und C# (.NET) ist eine der beliebtesten Sprachen für die Erstellung hochlastiger Webanwendungen und Mikroservices.
\n\nIn diesem Leitfaden gehen wir den Weg von einer fertigen C#-Anwendung bis zu ihrem vollständigen Deployment in einem Kubernetes-Cluster. Sie erfahren, wie Sie ein Docker-Image erstellen, Manifeste für das Deployment und den Service schreiben und dann alles mit kubectl starten. Keine Magie – nur Praxis.
Schritt 1: Vorbereitung der .NET-Anwendung und Containerisierung
\n\n1.1 Erstellen einer einfachen Web-API in C#
\n\nZur Demonstration erstellen wir eine minimale ASP.NET Core Web-API. Öffnen Sie das Terminal und führen Sie Folgendes aus:
\n\ndotnet new webapi -n MyK8sApp\ncd MyK8sApp\n\nStandardmäßig enthält das Projekt bereits den Controller WeatherForecastController. Stellen wir sicher, dass die Anwendung lokal startet:
dotnet run\n\nRufen Sie http://localhost:5000/weatherforecast auf – Sie sollten eine JSON-Antwort sehen. Nun ist unsere Anwendung bereit für die Paketierung.
1.2 Erstellen einer Dockerfile
\n\nEin Deployment in Kubernetes ist ohne Containerisierung nicht möglich. Erstellen wir eine Datei Dockerfile im Stammverzeichnis des Projekts:
# Verwenden des offiziellen Images für den Build\nFROM mcr.microsoft.com/dotnet/sdk:8.0 AS build\nWORKDIR /app\n\n# Kopieren der Projektdateien und Wiederherstellen der Abhängigkeiten\nCOPY *.csproj .\nRUN dotnet restore\n\n# Kopieren der restlichen Dateien und Erstellen der Anwendung\nCOPY . .\nRUN dotnet publish -c Release -o out\n\n# Finales Image – nur Runtime\nFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime\nWORKDIR /app\nCOPY --from=build /app/out .\nENTRYPOINT ["dotnet", "MyK8sApp.dll"]\n\nBeachten Sie: Wir verwenden einen Multi-Stage-Build – dies reduziert die endgültige Image-Größe und erhöht die Sicherheit.
\n\n1.3 Erstellen und Überprüfen des Docker-Images
\n\nErstellen Sie das Image und starten Sie es lokal:
\n\ndocker build -t myk8sapp:latest .\ndocker run -d -p 8080:80 --name myapp myk8sapp:latest\n\nÜberprüfen Sie die Funktion: http://localhost:8080/weatherforecast. Wenn alles funktioniert – großartig. Stoppen Sie den Container:
docker stop myapp && docker rm myapp\n\nSchritt 2: Grundlagen von Kubernetes – Was Sie für das Deployment wissen müssen
\n\nBevor wir Manifeste schreiben, schauen wir uns die wichtigsten Konzepte von Kubernetes an:
\n\n- \n
- Pod – die kleinste Bereitstellungseinheit. Enthält einen oder mehrere Container. \n
- Deployment – verwaltet den Zustand der Pods: Skalierung, Updates, Wiederherstellung nach Fehlern. \n
- Service – eine Abstraktion, die den Netzwerkzugriff auf Pods ermöglicht. Üblicherweise werden die Typen
ClusterIP(intern) oderLoadBalancer(extern) verwendet. \n - ConfigMap / Secret – zum Speichern von Konfigurationen und sensiblen Daten. \n
Wir werden minikube für lokale Tests verwenden. Installieren Sie es gemäß der offiziellen Anleitung.
\n\nStarten Sie den Cluster:
\n\nminikube start\n\nSchritt 3: Erstellen von Kubernetes-Manifesten für die C#-Anwendung
\n\n3.1 Deployment-Manifest
\n\nErstellen Sie eine Datei 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