Bereitstellung von C++ auf Kubernetes: Ein praktischer Grundlagenleitfaden

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: Ein praktischer Grundlagenleitfaden



Kubernetes (K8s) ist zum De-facto-Standard für die Container-Orchestrierung geworden. Obwohl es am häufigsten mit Go, Java oder Python assoziiert wird, wird C++ ebenfalls aktiv für hochbelastete Dienste eingesetzt, bei denen Leistung und geringer Speicherverbrauch entscheidend sind. In diesem Artikel werden wir den praktischen Prozess der Bereitstellung einer C++-Anwendung in einem Kubernetes-Cluster durchgehen: vom Schreiben eines einfachen HTTP-Servers bis zur Erstellung von Manifesten und der Skalierung.



1. Vorbereitung der C++-Anwendung und des Docker-Images

Zunächst erstellen wir eine minimale C++-Anwendung, die HTTP-Anfragen entgegennimmt. Der Einfachheit halber verwenden wir die Bibliothek cpp-httplib (Header-only).



Quellcode (server.cpp)

#include <httplib.h>#include <iostream>

int main() { using namespace httplib; Server svr;

svr.Get("/", [](const Request& req, Response& res) { res.set_content("Hello from C++ on Kubernetes!", "text/plain"); });

svr.Get("/health", [](const Request& req, Response& res) { res.set_content("OK", "text/plain"); });

std::cout << "Server started on port 8080" << std::endl; svr.listen("0.0.0.0", 8080); return 0;}


Dockerfile (mehrstufiger Build)

Damit das Image kompakt und sicher ist, verwenden wir einen Multi-Stage-Build:

# Build-StufeFROM gcc:13-bookworm AS builderWORKDIR /appCOPY server.cpp .RUN g++ -std=c++17 -O2 -lpthread server.cpp -o server

# Finales ImageFROM debian:bookworm-slimWORKDIR /appCOPY --from=builder /app/server .EXPOSE 8080CMD ["./server"]


Erstellen Sie das Image:

docker build -t cpp-k8s-demo:latest .


Testen Sie es lokal:

docker run -p 8080:8080 cpp-k8s-democurl http://localhost:8080/


2. Schreiben der Kubernetes-Manifeste

Für die Bereitstellung benötigen wir zwei Hauptressourcen: Deployment (Verwaltung der Pods) und Service (Netzwerkzugriff).



Deployment (deployment.yaml)

Definiert, wie viele Replikate gestartet werden sollen, die Update-Richtlinie und das Container-Image.

apiVersion: apps/v1kind: Deploymentmetadata:  name: cpp-app-deployment  labels:    app: cpp-appspec:  replicas: 3  selector:    matchLabels:      app: cpp-app  template:    metadata:      labels:        app: cpp-app    spec:      containers:      - name: cpp-app        image: cpp-k8s-demo:latest        imagePullPolicy: IfNotPresent        ports:        - containerPort: 8080        livenessProbe:          httpGet:            path: /health            port: 8080          initialDelaySeconds: 5          periodSeconds: 10        resources:          requests:            memory: "64Mi"            cpu: "100m"          limits:            memory: "128Mi"            cpu: "200m"


Wichtig: imagePullPolicy: IfNotPresent ist für lokale Tests geeignet. Verwenden Sie für die Produktion Always oder geben Sie einen Versions-Tag an.



Service (service.yaml)

Ermöglicht den Zugriff auf die Pods innerhalb des Clusters (ClusterIP) oder von außen (NodePort/LoadBalancer).

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


3. Bereitstellung im Cluster und Überprüfung

Angenommen, Sie haben bereits einen funktionierenden Cluster (Minikube, kind oder Cloud). Führen Sie die folgenden Befehle aus:



# Laden Sie das Image in den Cluster (für Minikube)minikube image load cpp-k8s-demo:latest

# Wenden Sie die Manifeste ankubectl apply -f deployment.yamlkubectl apply -f service.yaml

# Überprüfen Sie den Statuskubectl get pods -l app=cpp-appkubectl get svc cpp-app-service

Blogs

Buchempfehlungen