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

Introduction : Pourquoi C++ et Kubernetes sont une combinaison qui fonctionne

\n\n

De nombreux développeurs pensent à tort que Kubernetes (K8s) est un écosystème exclusivement réservé aux langages interprétés comme Python, JavaScript ou Go. En réalité, le déploiement de C++ sur Kubernetes est non seulement possible, mais aussi une pratique extrêmement efficace pour les systèmes à forte charge où les performances, la faible consommation de mémoire et un temps de réponse prévisible sont critiques. C++ est parfaitement adapté à la création de services backend, de gestionnaires de données, de serveurs de jeux et d'applications réseau, tandis que Kubernetes fournit une plateforme pratique pour leur orchestration, leur mise à l'échelle et leur gestion.

\n\n

Dans ce guide pratique, nous allons étape par étape voir comment compiler une application C++ dans une image Docker, rédiger un manifeste Kubernetes correct et le déployer dans un cluster. Vous verrez que le processus n'est presque pas différent du déploiement d'applications dans d'autres langages, si la compilation est correctement configurée.

\n\n

1. Préparation de l'application C++ et rédaction du Dockerfile

\n\n

Pour commencer, nous avons besoin d'une application C++ simple mais fonctionnelle. Que ce soit un serveur HTTP qui écoute sur un port et renvoie "Hello from C++ on K8s!". Dans des projets réels, cela pourrait être une API REST basée sur Crow, Pistache ou Drogon.

\n\n

Exemple de fichier main.cpp :

\n
#include <iostream>\n#include <string>\n#include <cstring>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <unistd.h>\n\nint main() {\n    int server_fd = socket(AF_INET, SOCK_STREAM, 0);\n    struct sockaddr_in address;\n    int opt = 1;\n    setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));\n    address.sin_family = AF_INET;\n    address.sin_addr.s_addr = INADDR_ANY;\n    address.sin_port = htons(8080);\n    bind(server_fd, (struct sockaddr *)&address, sizeof(address));\n    listen(server_fd, 3);\n\n    std::cout << "Server started on port 8080" << std::endl;\n\n    while (true) {\n        int new_socket = accept(server_fd, nullptr, nullptr);\n        const char *response = "HTTP/1.1 200 OK\\nContent-Type: text/plain\\n\\nHello from C++ on K8s!\\n";\n        send(new_socket, response, strlen(response), 0);\n        close(new_socket);\n    }\n    return 0;\n}
\n\n

Écrivons maintenant le Dockerfile. Le point clé est d'utiliser une compilation multi-étapes (multi-stage build). Cela permet de garder l'image finale minimale et sécurisée.

\n\n
# Étape de compilation\nFROM gcc:latest AS builder\nWORKDIR /app\nCOPY main.cpp .\nRUN g++ -static -o server main.cpp\n\n# Image finale (minimale)\nFROM alpine:latest\nWORKDIR /app\n# Copie uniquement le binaire compilé\nCOPY --from=builder /app/server .\nEXPOSE 8080\nCMD ["./server"]
\n\n

Construisons l'image et poussons-la dans un registre (par exemple, Docker Hub) :

\n
docker build -t yourusername/cpp-server:latest .\ndocker push yourusername/cpp-server:latest
\n\n

2. Rédaction des manifestes pour Kubernetes

\n\n

Pour déployer une application C++ dans Kubernetes, nous aurons besoin d'au moins deux objets : un Deployment (pour gérer les Pods) et un Service (pour assurer l'accès à l'application).

\n\n

Manifeste Deployment (deployment.yaml)

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: cpp-server-deployment\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: cpp-server\n  template:\n    metadata:\n      labels:\n        app: cpp-server\n    spec:\n      containers:\n      - name: cpp-server\n        image: yourusername/cpp-server:latest\n        ports:\n        - containerPort: 8080\n        resources:\n          requests:\n            memory: "64Mi"\n            cpu: "100m"\n          limits:\n            memory: "128Mi"\n            cpu: "200m"\n        livenessProbe:\n          tcpSocket:\n            port: 8080\n          initialDelaySeconds: 5\n          per                

Blogs

Book Recommendations