Bereitstellung von Rust auf Kubernetes: Ein praktischer Leitfaden für Einsteiger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Bereitstellung von Rust auf Kubernetes: Ein praktischer Leitfaden für Einsteiger



Rust ist eine der schnellsten und sichersten systemnahen Programmiersprachen. Kubernetes (k8s) ist der De-facto-Standard für die Container-Orchestrierung. Ihre Kombination ermöglicht die Erstellung äußerst effizienter, leichtgewichtiger und ausfallsicherer Dienste. In diesem Artikel durchlaufen wir den gesamten Bereitstellungszyklus einer Rust-Anwendung in einem Kubernetes-Cluster: vom Bau des Docker-Images bis zur Skalierung.



Warum Rust und Kubernetes ein ideales Paar sind



Rust wird in eine native Binärdatei kompiliert und benötigt weder eine virtuelle Maschine (wie Java) noch einen Interpreter (wie Python). Dies führt zu einer minimalen Image-Größe und einem geringen Speicherverbrauch. Im Kontext von Kubernetes bedeutet das:

  • Schneller Pod-Start (oft unter 1 Sekunde).
  • Ressourcenschonung im Cluster.
  • Weniger Schwachstellen durch das Fehlen schwerer Laufzeitumgebungen.


Schritt 1: Eine einfache Rust-Anwendung erstellen



Als Beispiel schreiben wir einen HTTP-Server mit dem beliebten Framework actix-web. Erstellen Sie ein neues Projekt:

cargo new rust-k8s-democd rust-k8s-demo


Fügen Sie die Abhängigkeiten in Cargo.toml hinzu:

[dependencies]actix-web = "4"serde = { version = "1", features = ["derive"] }


Schreiben wir einen einfachen Handler in src/main.rs:

use actix_web::{get, web, App, HttpServer, Responder};use std::env;

#[get("/")]async fn index() -> impl Responder { let message = env::var("MESSAGE").unwrap_or_else(|_| "Hello from Rust!".to_string()); format!("{{ \\"message\\": \\"{}\\" }}", message)}

#[actix_web::main]async fn main() -> std::io::Result<()> { let port = env::var("PORT").unwrap_or_else(|_| "8080".to_string()); let addr = format!("0.0.0.0:{}", port); println!("Starting server at {}", addr);

HttpServer::new(|| { App::new() .service(index) }) .bind(&addr)? .run() .await}


Die Anwendung liest die Umgebungsvariablen MESSAGE und PORT aus – dies wird für die Konfiguration über Kubernetes ConfigMap nützlich sein.



Schritt 2: Docker-Image erstellen



Wir verwenden einen Multi-Stage-Build, um die Image-Größe zu minimieren. Erstellen Sie eine Dockerfile:

# Build-StufeFROM rust:1.75-slim-bookworm AS builder

WORKDIR /appCOPY Cargo.toml Cargo.lock ./RUN mkdir src && echo "fn main() {}" > src/main.rsRUN cargo build --release 2>/dev/null || true

COPY src/ src/RUN cargo build --release

# Finales ImageFROM debian:bookworm-slimRUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*COPY --from=builder /app/target/release/rust-k8s-demo /usr/local/bin/rust-k8s-demo

EXPOSE 8080CMD ["rust-k8s-demo"]


Erstellen Sie das Image und senden Sie es an eine Registry (z. B. Docker Hub):

docker build -t yourusername/rust-k8s-demo:latest .docker push yourusername/rust-k8s-demo:latest


Schritt 3: Kubernetes-Manifeste



Erstellen Sie einen Ordner k8s und platzieren Sie die Manifeste darin.



3.1. ConfigMap für die Konfiguration

Erstellen Sie die Datei k8s/configmap.yaml:

apiVersion: v1kind: ConfigMapmetadata:  name: rust-app-configdata:  MESSAGE: "Hallo von Rust auf Kubernetes!"  PORT: "8080"


3.2. Deployment

Erstellen Sie die Datei k8s/deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: rust-appspec:  replicas: 3  selector:    matchLabels:      app: rust-app  template:    metadata:      labels:        app: rust-app    spec:      containers:      - name: rust-app        image: yourusername/rust-k8s-demo:latest        ports:        - containerPort: 8080        envFrom:        - configMapRef:            name: rust-app-config                

Blogs

Buchempfehlungen