Implantação de Rust no Kubernetes: guia básico para iniciantes
\n\nO desenvolvimento moderno cada vez mais exige não apenas escrever código rápido e seguro, mas também saber como implantá-lo corretamente na infraestrutura em nuvem. Rust, conhecido por seu desempenho e segurança de memória, torna-se uma excelente escolha para microsserviços. E o Kubernetes — o orquestrador de contêineres padrão — ajuda a gerenciar esses serviços em escala.
\n\nNeste artigo, percorreremos todo o caminho, desde a escrita de um servidor web simples em Rust até sua implantação em um cluster Kubernetes. Você aprenderá como empacotar a aplicação em uma imagem Docker, criar os manifestos necessários e executá-la na nuvem.
\n\n1. Preparação da aplicação Rust para conteinerização
\n\nPara começar, vamos criar uma aplicação web simples em Rust usando o popular framework actix-web. Ela retornará uma mensagem JSON simples — um exemplo ideal para um microsserviço.
Crie um novo projeto:
\ncargo new rust-k8s-demo\ncd rust-k8s-demo\n\nAdicione a dependência no Cargo.toml:
[dependencies]\nactix-web = "4"\nserde = { version = "1.0", features = ["derive"] }\ntokio = { version = "1", features = ["full"] }\n\nAgora vamos escrever o código da aplicação em src/main.rs:
use actix_web::{web, App, HttpServer, Responder, HttpResponse};\nuse serde::Serialize;\n\n#[derive(Serialize)]\nstruct HealthResponse {\n status: String,\n message: String,\n}\n\nasync fn health_check() -> impl Responder {\n HttpResponse::Ok().json(HealthResponse {\n status: "ok".to_string(),\n message: "Rust service is running on Kubernetes!".to_string(),\n })\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n println!("Starting server on 0.0.0.0:8080");\n HttpServer::new(|| {\n App::new()\n .route("/health", web::get().to(health_check))\n })\n .bind("0.0.0.0:8080")?\n .run()\n .await\n}\n\nObserve: estamos vinculando a 0.0.0.0:8080, pois dentro do contêiner a aplicação deve escutar todas as interfaces. Teste localmente:
cargo run\n\nAbra http://localhost:8080/health — você deve ver uma resposta JSON.
2. Criação da imagem Docker com a aplicação Rust
\n\nPara o Kubernetes, precisamos de um contêiner. Rust compila para um binário nativo, então podemos usar uma compilação multi-estágio (multi-stage build) para obter uma imagem mínima.
\n\nCrie o arquivo Dockerfile na raiz do projeto:
# Estágio de compilação\nFROM rust:1.75-slim-bookworm AS builder\n\nWORKDIR /app\nCOPY Cargo.toml Cargo.lock ./\nRUN mkdir src && echo "fn main() {}" > src/main.rs\nRUN cargo build --release 2>/dev/null || true\n\nCOPY src/ src/\nRUN cargo build --release\n\n# Imagem final\nFROM debian:bookworm-slim\nRUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*\nCOPY --from=builder /app/target/release/rust-k8s-demo /usr/local/bin/rust-k8s-demo\n\nEXPOSE 8080\nCMD ["rust-k8s-demo"]\n\nEste Dockerfile primeiro compila as dependências, depois compila nosso código e copia o binário para uma imagem mínima baseada em Debian. Isso economiza espaço e aumenta a segurança.
\n\nConstrua a imagem:
\ndocker build -t rust-k8s-demo:latest .\n\nTeste o contêiner localmente:
\ndocker run -p 8080:8080 rust-k8s-demo:latest\n\nSe tudo funcionar — envie a imagem para um registro (por exemplo, Docker Hub):
\ndocker tag rust-k8s-demo:latest seuusuario/rust-k8s-demo:v1\ndocker push seuusuario/rust-k8s-demo:v1\n\n3. Configuração dos manifestos Kubernetes
\n\nAgora que a imagem está pronta, precisamos criar os manifestos para o Kubernetes. Criaremos um Deployment (para gerenciar réplicas) e um Service (para