Bereitstellung von C# auf Kubernetes: Ein grundlegender Leitfaden für Entwickler

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

Bereitstellung von C# auf Kubernetes: Grundlagenleitfaden

Kubernetes (K8s) ist zum De-facto-Standard für die Orchestrierung von Containeranwendungen geworden. Wenn Sie in C# (.NET) entwickeln, stellt sich früher oder später die Frage: Wie verpacken Sie Ihre Anwendung und führen sie in der Cloud oder in Ihrem eigenen Cluster aus? In diesem Leitfaden gehen wir den gesamten Zyklus durch – von der Erstellung einer einfachen Web-API mit ASP.NET Core bis zur Bereitstellung in Kubernetes.

Der Artikel richtet sich an Entwickler, die bereits mit den Grundlagen von C# und Docker vertraut sind, aber gerade erst mit Kubernetes beginnen.



1. Vorbereitung der .NET-Anwendung und des Docker-Images

Bevor Sie die Anwendung in Kubernetes bereitstellen, muss sie in einen Container verpackt werden. Erstellen wir eine minimale Web-API in C#.

  1. Erstellen Sie ein neues Projekt:
    dotnet new webapi -n MyK8sAppcd MyK8sApp
  2. Stellen Sie sicher, dass die Anwendung Port 80 abhört. Geben Sie in der Datei Program.cs (oder appsettings.json) an:
    builder.WebHost.UseUrls("http://0.0.0.0:80");
  3. Erstellen Sie eine Datei Dockerfile im Stammverzeichnis des Projekts:
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS baseWORKDIR /appEXPOSE 80

    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /srcCOPY ["MyK8sApp.csproj", "."]RUN dotnet restore "./MyK8sApp.csproj"COPY . .RUN dotnet build "MyK8sApp.csproj" -c Release -o /app/build

    FROM build AS publishRUN dotnet publish "MyK8sApp.csproj" -c Release -o /app/publish

    FROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "MyK8sApp.dll"]
  4. Erstellen Sie das Image und senden Sie es an eine Registry (z. B. Docker Hub):
    docker build -t yourdockerhub/my-k8s-app:v1 .docker push yourdockerhub/my-k8s-app:v1

Wichtig: Ersetzen Sie yourdockerhub durch den tatsächlichen Benutzernamen. Für lokale Tests können Sie minikube verwenden und das Image nicht veröffentlichen – es reicht, es lokal zu erstellen.



2. Erstellung von Kubernetes-Manifesten

Kubernetes verwendet deklarative YAML-Dateien, um den gewünschten Zustand des Clusters zu beschreiben. Wir benötigen zwei Hauptobjekte: Deployment (Pod-Verwaltung) und Service (Netzwerkzugriff).



2.1. Deployment (Bereitstellung)

Erstellen Sie die Datei deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: my-k8s-app-deployment  labels:    app: my-k8s-appspec:  replicas: 2  selector:    matchLabels:      app: my-k8s-app  template:    metadata:      labels:        app: my-k8s-app    spec:      containers:      - name: my-k8s-app        image: yourdockerhub/my-k8s-app:v1        ports:        - containerPort: 80        resources:          requests:            memory: "64Mi"            cpu: "250m"          limits:            memory: "128Mi"            cpu: "500m"        livenessProbe:          httpGet:            path: /health            port: 80          initialDelaySeconds: 5          periodSeconds: 10        readinessProbe:          httpGet:            path: /ready            port: 80          initialDelaySeconds: 3          periodSeconds: 5

In diesem Manifest geben wir an:

  • replicas: 2 — zwei Instanzen der Anwendung für Ausfallsicherheit.
  • resources — CPU- und Speicherbeschränkungen (wichtig für den stabilen Betrieb des Clusters).
  • livenessProbe und readinessProbe — Gesundheitschecks. Fügen Sie in Ihrem Controller die Endpunkte /health und /ready hinzu.


2.2. Service (Dienst)

Erstellen Sie die Datei service.yaml:

apiVersion: v1kind: Servicemetadata:  name: my-k8s-app-servicespec:  selecto                

Blogs

Buchempfehlungen