Implantação de C++ no Kubernetes: guia prático 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 combinação funcional

\n\n

Muitos 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\n

Neste 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\n

1. Preparação da aplicação C++ e escrita do Dockerfile

\n\n

Para 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\n

Exemplo 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\n

Agora 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\n

Compilamos a imagem e enviamos para o registro (por exemplo, Docker Hub):

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

2. Escrita dos manifestos para Kubernetes

\n\n

Para 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\n

Manifesto 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