Despliegue de Rust 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

\n\n

Rust es un lenguaje de programación de sistemas moderno que combina el alto rendimiento de C/C++ con la seguridad de memoria a nivel de compilación. Gracias a la ausencia de un recolector de basura y al bajo consumo de recursos, las aplicaciones en Rust son ideales para ejecutarse en entornos contenerizados. Kubernetes (K8s) es el estándar de facto para la orquestación de contenedores. En esta guía, veremos en la práctica cómo crear una aplicación web simple en Rust, empaquetarla en una imagen Docker y desplegarla en un clúster de Kubernetes.

\n\n

El artículo está dirigido a desarrolladores que ya conocen los fundamentos de Rust y tienen una comprensión básica de Docker y Kubernetes. No profundizaremos en la teoría, sino que nos centraremos en una instrucción paso a paso con ejemplos reales de código y comandos.

\n\n

1. Preparación de la aplicación en Rust

\n\n

Como ejemplo, crearemos un servidor HTTP mínimo utilizando el popular framework actix-web. Responderá a solicitudes GET y devolverá una respuesta JSON.

\n\n

Cree un nuevo proyecto:

\n\n
cargo new rust-k8s-app\ncd rust-k8s-app
\n\n

Agregue las dependencias en Cargo.toml:

\n\n
[dependencies]\nactix-web = "4"\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"
\n\n

Ahora escribamos el código del servidor en src/main.rs:

\n\n
use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};\nuse serde::Serialize;\n\n#[derive(Serialize)]\nstruct HealthResponse {\n    status: String,\n    message: String,\n}\n\n#[get("/health")]\nasync fn health_check() -> impl Responder {\n    HttpResponse::Ok().json(HealthResponse {\n        status: "ok".to_string(),\n        message: "Servicio funcionando".to_string(),\n    })\n}\n\n#[get("/")]\nasync fn index() -> impl Responder {\n    HttpResponse::Ok().json(serde_json::json!({\n        "service": "rust-k8s-app",\n        "version": env!("CARGO_PKG_VERSION")\n    }))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    let host = std::env::var("HOST").unwrap_or_else(|_| "0.0.0.0".to_string());\n    let port: u16 = std::env::var("PORT")\n        .unwrap_or_else(|_| "8080".to_string())\n        .parse()\n        .expect("PORT debe ser un número");\n\n    println!("Servidor iniciado en {}:{}", host, port);\n\n    HttpServer::new(|| {\n        App::new()\n            .service(health_check)\n            .service(index)\n    })\n    .bind((host.as_str(), port))?\n    .run()\n    .await\n}
\n\n

Tenga en cuenta: hemos externalizado el host y el puerto a variables de entorno. Esta es una práctica estándar para aplicaciones contenerizadas: la configuración debe provenir del exterior.

\n\n

Verifique que la aplicación se compile y ejecute localmente:

\n\n
cargo build --release\n./target/release/rust-k8s-app
\n\n

Abra el navegador en http://localhost:8080/health — debería ver una respuesta JSON.

\n\n

2. Creación de la imagen Docker

\n\n

Para el despliegue en Kubernetes, necesitamos empaquetar la aplicación en una imagen Docker. Usaremos una compilación de múltiples etapas (multi-stage build) para minimizar el tamaño de la imagen final.

\n\n

Cree un archivo Dockerfile en la raíz del proyecto:

\n\n
# Etapa de compilación\nFROM rust:1.75-slim-bookworm AS builder\n\nWORKDIR /app\n\n# Copiamos solo Cargo.toml para almacenar en caché las dependencias\nCOPY Cargo.toml Cargo.lock ./\nRUN mkdir src && echo "fn main() {}" > src/main.rs\nRUN cargo build --release 2>/dev/null || true\n\n# Ahora copiamos el código fuente real\nCOPY src ./src\nRUN cargo build --release\n\n# Imagen final\nFROM debian:bookworm-slim\n\nRUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*\n\nCOPY --from=builder /app/target/release/rust-k8s-app /usr/local/bin/rust-k8s-app\n\nEXPOSE 8080\n\nCMD ["rust-k8s-app"]
\n\n

Construya la imagen:

\n\n
docker build -t rust-k8s-app:latest .
\n\n

Verifique el tamaño de la imagen

Blogs

Book Recommendations