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 MyK8sAppStellen Sie sicher, dass die Anwendung lokal funktioniert:
dotnet runStandardmäß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: LoadBalancerDer 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.