Déploiement de C++ sur Kubernetes : guide pratique de base

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Déploiement de C++ sur Kubernetes : guide pratique de base



Kubernetes (K8s) est devenu le standard de facto pour l'orchestration de conteneurs. Bien qu'il soit le plus souvent associé à Go, Java ou Python, C++ est également activement utilisé pour les services à forte charge où les performances et la faible consommation de mémoire sont critiques. Dans cet article, nous allons détailler le processus pratique de déploiement d'une application C++ dans un cluster Kubernetes : de l'écriture d'un simple serveur HTTP à la création de manifestes et à la mise à l'échelle.



1. Préparation de l'application C++ et de l'image Docker

Pour commencer, créons une application C++ minimale qui écoutera les requêtes HTTP. Nous utiliserons la bibliothèque cpp-httplib (header-only) pour plus de simplicité.



Code source (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 (construction multi-étapes)

Pour que l'image soit compacte et sécurisée, utilisons une construction multi-étapes :

# Étape de constructionFROM gcc:13-bookworm AS builderWORKDIR /appCOPY server.cpp .RUN g++ -std=c++17 -O2 -lpthread server.cpp -o server

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


Construisez l'image :

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


Testez localement :

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


2. Rédaction des manifestes Kubernetes

Pour le déploiement, nous aurons besoin de deux ressources principales : Deployment (gestion des pods) et Service (accès réseau).



Deployment (deployment.yaml)

Définit le nombre de réplicas à exécuter, la politique de mise à jour et l'image du conteneur.

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"


Important : imagePullPolicy: IfNotPresent convient pour les tests locaux. Pour la production, utilisez Always ou spécifiez une balise de version.



Service (service.yaml)

Ouvre l'accès aux pods à l'intérieur du cluster (ClusterIP) ou vers l'extérieur (NodePort/LoadBalancer).

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


3. Déploiement dans le cluster et vérification

Supposons que vous ayez déjà un cluster fonctionnel (Minikube, kind ou cloud). Exécutez les commandes :



# Chargez l'image dans le cluster (pour Minikube)minikube image load cpp-k8s-demo:latest

# Appliquez les manifesteskubectl apply -f deployment.yamlkubectl apply -f service.yaml

# Vérifiez le statutkubectl get pods -l app=cpp-appkubectl get svc cpp-app-service

Blogs

Book Recommendations