Bereitstellung von C# auf Kubernetes: Ein praktisches Grundlagen-Tutorial

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# in Kubernetes ausführen?

Die moderne Entwicklung mit C# (.NET) erfordert zunehmend eine skalierbare und ausfallsichere Infrastruktur. Kubernetes (K8s) hat sich zum Standard für die Container-Orchestrierung entwickelt und ermöglicht die Automatisierung von Bereitstellung, Skalierung und Verwaltung von Anwendungen. In dieser Anleitung zeigen wir Ihnen, wie Sie Ihre C#-Anwendung in einen Container verpacken und in einem Kubernetes-Cluster praktisch ausführen.

Sie erfahren, wie Sie ein Docker-Image erstellen, Manifeste für Kubernetes schreiben und die Bereitstellung mit kubectl durchführen. Der Artikel richtet sich an Entwickler, die bereits mit den Grundlagen von C# vertraut sind und moderne DevOps-Praktiken erlernen möchten.



1. Vorbereitung der C#-Anwendung für die Containerisierung

Bevor Sie die Anwendung in Kubernetes bereitstellen, muss sie in ein Docker-Image verpackt werden. Als Beispiel nehmen wir eine einfache ASP.NET Core Web API-Anwendung.



1.1. Projekt erstellen

Erstellen Sie ein neues Projekt mit der .NET CLI:

dotnet new webapi -n MyK8sAppcd MyK8sApp

Stellen Sie sicher, dass die Anwendung lokal funktioniert:

dotnet run

Standardmäßig ist die Anwendung unter http://localhost:5000 erreichbar.



1.2. Dockerfile hinzufügen

Erstellen Sie im Stammverzeichnis des Projekts eine Datei namens Dockerfile (ohne Erweiterung). Verwenden Sie einen mehrstufigen Build, um die Image-Größe zu optimieren:

# Build-StufeFROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /appCOPY *.csproj ./RUN dotnet restoreCOPY . ./RUN dotnet publish -c Release -o out

# Runtime-StufeFROM 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. Docker-Image erstellen und überprüfen

Erstellen Sie das Image und führen Sie es lokal aus:

docker build -t myk8sapp:latest .docker run -d -p 8080:80 --name myapp myk8sapp:latest

Überprüfen Sie, ob die Anwendung antwortet: curl http://localhost:8080/weatherforecast (oder öffnen Sie es im Browser).



2. Kubernetes-Manifeste schreiben

Für die Bereitstellung in Kubernetes werden YAML-Dateien benötigt, die den gewünschten Zustand der Anwendung beschreiben. Der minimale Satz umfasst ein Deployment und einen Service.



2.1. Deployment erstellen

Datei 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"

Wichtig: Wenn Sie einen lokalen Cluster (z. B. Minikube oder Kind) verwenden, muss das Image innerhalb des Clusters verfügbar sein. Geben Sie entweder imagePullPolicy: Never für lokale Images an.



2.2. Service erstellen

Datei service.yaml:

apiVersion: v1kind: Servicemetadata:  name: myk8sapp-servicespec:  selector:    app: myk8sapp  ports:    - protocol: TCP      port: 80      targetPort: 80  type: LoadBalancer

Der Typ LoadBalancer eignet sich für Cloud-Anbieter. Verwenden Sie für lokale Cluster NodePort oder ClusterIP mit Portweiterleitung über kubectl port-forward.



3. Bereitstellung und Überprüfung der Anwendung

Nachdem die Manifeste fertig sind, führen Sie die Bereitstellung im Kubernetes-Cluster durch.



3.1. Manifeste anwenden

Blogs

Buchempfehlungen