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

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



Kubernetes (K8s) tornou-se o padrão de facto para orquestração de contêineres. Embora seja mais frequentemente associado a Go, Java ou Python, C++ também é ativamente utilizado para serviços de alta carga, onde o desempenho e o baixo consumo de memória são críticos. Neste artigo, abordaremos o processo prático de implantação de uma aplicação C++ em um cluster Kubernetes: desde a escrita de um servidor HTTP simples até a criação de manifestos e escalonamento.



1. Preparação da aplicação C++ e da imagem Docker

Para começar, criaremos uma aplicação C++ mínima que escutará requisições HTTP. Usaremos a biblioteca cpp-httplib (header-only) para simplificar.



Código-fonte (server.cpp)

#include <httplib.h>#include <iostream>

int main() { using namespace httplib; Server svr;

svr.Get("/", [](const Request& req, Response& res) { res.set_content("Hello from C++ on Kubernetes!", "text/plain"); });

svr.Get("/health", [](const Request& req, Response& res) { res.set_content("OK", "text/plain"); });

std::cout << "Server started on port 8080" << std::endl; svr.listen("0.0.0.0", 8080); return 0;}


Dockerfile (construção em múltiplos estágios)

Para que a imagem seja compacta e segura, usamos multi-stage build:

# Estágio de construçãoFROM gcc:13-bookworm AS builderWORKDIR /appCOPY server.cpp .RUN g++ -std=c++17 -O2 -lpthread server.cpp -o server

# Imagem finalFROM debian:bookworm-slimWORKDIR /appCOPY --from=builder /app/server .EXPOSE 8080CMD ["./server"]


Construa a imagem:

docker build -t cpp-k8s-demo:latest .


Verifique localmente:

docker run -p 8080:8080 cpp-k8s-democurl http://localhost:8080/


2. Escrita dos manifestos Kubernetes

Para a implantação, precisaremos de dois recursos principais: Deployment (gerenciamento de pods) e Service (acesso de rede).



Deployment (deployment.yaml)

Define quantas réplicas executar, a política de atualização e a imagem do contêiner.

apiVersion: apps/v1kind: Deploymentmetadata:  name: cpp-app-deployment  labels:    app: cpp-appspec:  replicas: 3  selector:    matchLabels:      app: cpp-app  template:    metadata:      labels:        app: cpp-app    spec:      containers:      - name: cpp-app        image: cpp-k8s-demo:latest        imagePullPolicy: IfNotPresent        ports:        - containerPort: 8080        livenessProbe:          httpGet:            path: /health            port: 8080          initialDelaySeconds: 5          periodSeconds: 10        resources:          requests:            memory: "64Mi"            cpu: "100m"          limits:            memory: "128Mi"            cpu: "200m"


Importante: imagePullPolicy: IfNotPresent é adequado para testes locais. Para produção, use Always ou especifique uma tag de versão.



Service (service.yaml)

Disponibiliza acesso aos pods dentro do cluster (ClusterIP) ou externamente (NodePort/LoadBalancer).

apiVersion: v1kind: Servicemetadata:  name: cpp-app-servicespec:  selector:    app: cpp-app  ports:  - protocol: TCP    port: 80    targetPort: 8080  type: LoadBalancer


3. Implantação no cluster e verificação

Supondo que você já tenha um cluster em funcionamento (Minikube, kind ou em nuvem). Execute os comandos:



# Carregue a imagem no cluster (para Minikube)minikube image load cpp-k8s-demo:latest

# Aplique os manifestoskubectl apply -f deployment.yamlkubectl apply -f service.yaml

# Verifique o statuskubectl get pods -l app=cpp-appkubectl get svc cpp-app-service

Blogs

Book Recommendations