Despliegue de C++ en Kubernetes: guía básica práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Despliegue de C++ en Kubernetes: guía básica práctica



Kubernetes (K8s) se ha convertido en el estándar de facto para la orquestación de contenedores. Aunque a menudo se asocia con Go, Java o Python, C++ también se utiliza activamente para servicios de alta carga donde el rendimiento y el bajo consumo de memoria son críticos. En este artículo, analizaremos el proceso práctico de despliegue de una aplicación C++ en un clúster de Kubernetes: desde escribir un servidor HTTP simple hasta crear manifiestos y escalar.



1. Preparación de la aplicación C++ y la imagen Docker

Para empezar, crearemos una aplicación mínima en C++ que escuche solicitudes HTTP. Usaremos la biblioteca cpp-httplib (solo header) para simplificar.



Código fuente (server.cpp)

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

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

svr.Get("/", [](const Request& req, Response& res) { res.set_content("¡Hola desde C++ en Kubernetes!", "text/plain"); });

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

std::cout << "Servidor iniciado en el puerto 8080" << std::endl; svr.listen("0.0.0.0", 8080); return 0;}


Dockerfile (compilación multi-etapa)

Para que la imagen sea compacta y segura, usamos una compilación multi-etapa:

# Etapa de compilaciónFROM gcc:13-bookworm AS builderWORKDIR /appCOPY server.cpp .RUN g++ -std=c++17 -O2 -lpthread server.cpp -o server

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


Construya la imagen:

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


Verifique localmente:

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


2. Escritura de manifiestos de Kubernetes

Para el despliegue necesitaremos dos recursos principales: Deployment (gestión de pods) y Service (acceso de red).



Deployment (deployment.yaml)

Define cuántas réplicas ejecutar, la política de actualización y la imagen del contenedor.

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 es adecuado para pruebas locales. Para producción, use Always o especifique una etiqueta de versión.



Service (service.yaml)

Abre el acceso a los pods dentro del clúster (ClusterIP) o hacia el exterior (NodePort/LoadBalancer).

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


3. Despliegue en el clúster y verificación

Supongamos que ya tiene un clúster en funcionamiento (Minikube, kind o en la nube). Ejecute los comandos:



# Cargue la imagen en el clúster (para Minikube)minikube image load cpp-k8s-demo:latest

# Aplique los manifiestoskubectl apply -f deployment.yamlkubectl apply -f service.yaml

# Verifique el estadokubectl get pods -l app=cpp-appkubectl get svc cpp-app-service

Blogs

Book Recommendations