Déploiement de C++ sur Kubernetes : guide 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 forment un tandem puissant



L'infrastructure cloud moderne repose de plus en plus sur une architecture de microservices et la conteneurisation. Kubernetes est devenu le standard de facto pour l'orchestration des conteneurs. Cependant, de nombreux développeurs pensent à tort que Kubernetes est réservé aux langages interprétés (Python, JavaScript) ou à la JVM. En réalité, le déploiement d'applications C++ dans Kubernetes est non seulement possible, mais offre également des avantages significatifs : hautes performances, consommation mémoire minimale et contrôle total des ressources.



Dans ce guide, nous allons voir comment empaqueter un serveur C++ dans une image Docker, créer les manifestes nécessaires pour Kubernetes et le lancer dans un cluster. Vous apprendrez à gérer les configurations et les secrets, ainsi qu'à configurer correctement les Health Checks pour un fonctionnement fiable de l'application.



1. Préparation de l'application C++ pour la conteneurisation



Avant de parler de Kubernetes, il faut préparer l'application C++ elle-même. Pour l'exemple, prenons un simple serveur HTTP basé sur la bibliothèque libmicrohttpd. Ce serveur répondra aux requêtes et lira la configuration à partir des variables d'environnement — c'est l'approche standard pour les applications 12-factor.



1.1. Code d'un serveur HTTP simple en C++



Créons le fichier main.cpp :



#include <iostream>#include <string>#include <microhttpd.h>#include <cstdlib>

static enum MHD_Result answer_to_connection(void *cls, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls) { const char *page = "<html><body>Hello from C++ on Kubernetes!</body></html>"; struct MHD_Response *response = MHD_create_response_from_buffer(strlen(page), (void*)page, MHD_RESPMEM_PERSISTENT); int ret = MHD_queue_response(connection, MHD_HTTP_OK, response); MHD_destroy_response(response); return ret == MHD_YES ? MHD_OK : MHD_NO;}

int main() { const char* port_str = std::getenv("PORT"); unsigned int port = port_str ? std::stoul(port_str) : 8080;

std::cout << "Starting server on port " << port << std::endl; struct MHD_Daemon *daemon = MHD_start_daemon(MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD, port, nullptr, nullptr, &answer_to_connection, nullptr, MHD_OPTION_END); if (nullptr == daemon) { std::cerr << "Failed to start daemon" << std::endl; return 1; }

// Attente infinie while (true) { sleep(1); }

MHD_stop_daemon(daemon); return 0;}


Ce code lit le port à partir de la variable d'environnement PORT (valeur par défaut — 8080) et lance le serveur HTTP. Notez : nous utilisons une boucle infinie pour que le processus ne se termine pas — c'est important pour le fonctionnement dans un conteneur.



1.2. Compilation de l'application



Pour la compilation, nous aurons besoin de CMake. Créons CMakeLists.txt :



cmake_minimum_required(VERSION 3.10)project(cpp-k8s-server)

find_package(libmicrohttpd REQUIRED)

add_executable(server main.cpp)target_link_libraries(server ${LIBMICROHTTPD_LIBRARIES})target_include_directories(server PRIVATE ${LIBMICROHTTPD_INCLUDE_DIRS})


L'application est maintenant prête pour la conteneurisation.



2. Création de l'image Docker pour l'application C++



Kubernetes fonctionne avec des conteneurs, nous avons donc besoin d'une image Docker. Pour C

Blogs

Book Recommendations