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

Introducción: Por qué C++ y Kubernetes son una combinación funcional

\n\n

Muchos desarrolladores creen erróneamente que Kubernetes (K8s) es un ecosistema exclusivo para lenguajes interpretados como Python, JavaScript o Go. En realidad, desplegar C++ en Kubernetes no solo es posible, sino que es una práctica extremadamente eficaz para sistemas de alta carga donde el rendimiento, el bajo consumo de memoria y el tiempo de respuesta predecible son críticos. C++ es ideal para crear servicios backend, procesadores de datos, servidores de juegos y aplicaciones de red, mientras que Kubernetes proporciona una plataforma conveniente para su orquestación, escalado y gestión.

\n\n

En esta guía práctica, repasaremos paso a paso cómo compilar una aplicación C++ en una imagen Docker, escribir un manifiesto correcto para Kubernetes y desplegarlo en un clúster. Verá que el proceso casi no difiere del despliegue de aplicaciones en otros lenguajes, si se configura correctamente la compilación.

\n\n

1. Preparación de la aplicación C++ y escritura del Dockerfile

\n\n

Para empezar, necesitamos una aplicación C++ simple pero funcional. Que sea un servidor HTTP que escuche en un puerto y devuelva "Hello from C++ on K8s!". En proyectos reales, podría ser una API REST basada en Crow, Pistache o Drogon.

\n\n

Ejemplo del archivo 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

Ahora escribamos el Dockerfile. El punto clave es usar una compilación multi-etapa (multi-stage build). Esto permite mantener la imagen final mínima y segura.

\n\n
# Etapa de compilación\nFROM gcc:latest AS builder\nWORKDIR /app\nCOPY main.cpp .\nRUN g++ -static -o server main.cpp\n\n# Imagen final (mínima)\nFROM alpine:latest\nWORKDIR /app\n# Copiamos solo el binario compilado\nCOPY --from=builder /app/server .\nEXPOSE 8080\nCMD ["./server"]
\n\n

Construimos la imagen y la subimos a un registro (por ejemplo, Docker Hub):

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

2. Escritura de manifiestos para Kubernetes

\n\n

Para desplegar una aplicación C++ en Kubernetes necesitaremos al menos dos objetos: un Deployment (para gestionar los Pods) y un Service (para proporcionar acceso a la aplicación).

\n\n

Manifiesto del 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: tunombredeusuario/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