Bereitstellung von C# auf Kubernetes: Ein grundlegender Leitfaden für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum C# und Kubernetes ein starkes Duo sind

\n\n

Die 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\n

In 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.

\n\n

Schritt 1: Vorbereitung der .NET-Anwendung und Containerisierung

\n\n

1.1 Erstellen einer einfachen Web-API in C#

\n\n

Zur Demonstration erstellen wir eine minimale ASP.NET Core Web-API. Öffnen Sie das Terminal und führen Sie Folgendes aus:

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

Standardmäßig enthält das Projekt bereits den Controller WeatherForecastController. Stellen wir sicher, dass die Anwendung lokal startet:

\n\n
dotnet run
\n\n

Rufen Sie http://localhost:5000/weatherforecast auf – Sie sollten eine JSON-Antwort sehen. Nun ist unsere Anwendung bereit für die Paketierung.

\n\n

1.2 Erstellen einer Dockerfile

\n\n

Ein Deployment in Kubernetes ist ohne Containerisierung nicht möglich. Erstellen wir eine Datei Dockerfile im Stammverzeichnis des Projekts:

\n\n
# 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\n

Beachten Sie: Wir verwenden einen Multi-Stage-Build – dies reduziert die endgültige Image-Größe und erhöht die Sicherheit.

\n\n

1.3 Erstellen und Überprüfen des Docker-Images

\n\n

Erstellen Sie das Image und starten Sie es lokal:

\n\n
docker 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:

\n\n
docker stop myapp && docker rm myapp
\n\n

Schritt 2: Grundlagen von Kubernetes – Was Sie für das Deployment wissen müssen

\n\n

Bevor 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) oder LoadBalancer (extern) verwendet.
  • \n
  • ConfigMap / Secret – zum Speichern von Konfigurationen und sensiblen Daten.
  • \n
\n\n

Wir werden minikube für lokale Tests verwenden. Installieren Sie es gemäß der offiziellen Anleitung.

\n\n

Starten Sie den Cluster:

\n\n
minikube start
\n\n

Schritt 3: Erstellen von Kubernetes-Manifesten für die C#-Anwendung

\n\n

3.1 Deployment-Manifest

\n\n

Erstellen Sie eine Datei deployment.yaml:

\n\n
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                

Blogs

Buchempfehlungen