Implantação de C++ no Kubernetes: guia básico

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que C++ e Kubernetes são uma dupla poderosa



A infraestrutura moderna em nuvem está cada vez mais sendo construída em arquitetura de microsserviços e conteinerização. Kubernetes tornou-se o padrão de facto para orquestração de contêineres. No entanto, muitos desenvolvedores acreditam erroneamente que Kubernetes é domínio apenas de linguagens interpretadas (Python, JavaScript) ou JVM. Na verdade, fazer deploy de aplicações C++ no Kubernetes não só é possível, como também traz vantagens significativas: alta performance, consumo mínimo de memória e controle total sobre os recursos.



Neste guia, vamos abordar como empacotar um servidor C++ em uma imagem Docker, criar os manifestos necessários para o Kubernetes e executá-lo em um cluster. Você aprenderá como lidar com configurações e segredos, além de como configurar corretamente Health Checks para uma operação confiável da aplicação.



1. Preparando a aplicação C++ para conteinerização



Antes de falar sobre Kubernetes, é preciso preparar a própria aplicação C++. Como exemplo, usaremos um servidor HTTP simples baseado na biblioteca libmicrohttpd. Este servidor responderá a requisições e lerá a configuração de variáveis de ambiente — esta é uma abordagem padrão para aplicações 12-factor.



1.1. Código de um servidor HTTP simples em C++



Vamos criar o arquivo 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; }

// Espera infinita while (true) { sleep(1); }

MHD_stop_daemon(daemon); return 0;}


Este código lê a porta da variável de ambiente PORT (valor padrão — 8080) e inicia o servidor HTTP. Observe: usamos um loop infinito para que o processo não termine — isso é importante para a execução dentro do contêiner.



1.2. Compilando a aplicação



Para a compilação, precisaremos do CMake. Vamos criar o 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})


Agora a aplicação está pronta para a conteinerização.



2. Criando a imagem Docker para a aplicação C++



Kubernetes trabalha com contêineres, portanto precisamos de uma imagem Docker. Para C

Blogs

Book Recommendations