Introdução: Por que C++ e Kubernetes são uma combinação funcional
\n\nMuitos desenvolvedores acreditam erroneamente que o Kubernetes (K8s) é um ecossistema exclusivo para linguagens interpretadas como Python, JavaScript ou Go. Na verdade, a implantação de C++ no Kubernetes não é apenas possível, mas também uma prática extremamente eficaz para sistemas de alta carga, onde desempenho, baixo consumo de memória e tempo de resposta previsível são críticos. C++ é ideal para criar serviços backend, processadores de dados, servidores de jogos e aplicações de rede, enquanto o Kubernetes fornece uma plataforma conveniente para orquestração, escalonamento e gerenciamento.
\n\nNeste guia prático, vamos passo a passo mostrar como compilar uma aplicação C++ em uma imagem Docker, escrever um manifesto correto para o Kubernetes e implantá-lo em um cluster. Você verá que o processo é quase idêntico à implantação de aplicações em outras linguagens, se a compilação for configurada corretamente.
\n\n1. Preparação da aplicação C++ e escrita do Dockerfile
\n\nPara começar, precisamos de uma aplicação C++ simples, mas funcional. Vamos criar um servidor HTTP que escuta em uma porta e retorna "Hello from C++ on K8s!". Em projetos reais, isso poderia ser uma API REST baseada em Crow, Pistache ou Drogon.
\n\nExemplo do arquivo 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\nAgora vamos escrever o Dockerfile. O ponto chave é usar compilação em múltiplos estágios (multi-stage build). Isso permite manter a imagem final mínima e segura.
\n\n# Estágio de compilação\nFROM gcc:latest AS builder\nWORKDIR /app\nCOPY main.cpp .\nRUN g++ -static -o server main.cpp\n\n# Imagem final (mínima)\nFROM alpine:latest\nWORKDIR /app\n# Copia apenas o binário compilado\nCOPY --from=builder /app/server .\nEXPOSE 8080\nCMD ["./server"]\n\nCompilamos a imagem e enviamos para o registro (por exemplo, Docker Hub):
\ndocker build -t yourusername/cpp-server:latest .\ndocker push yourusername/cpp-server:latest\n\n2. Escrita dos manifestos para Kubernetes
\n\nPara implantar a aplicação C++ no Kubernetes, precisamos de pelo menos dois objetos: Deployment (para gerenciar os Pods) e Service (para garantir o acesso à aplicação).
\n\nManifesto Deployment (deployment.yaml)
\napiVersion: 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