Rust को Kubernetes पर डिप्लॉय करना: व्यावहारिक मूल गाइड
\n\nRust सबसे तेज़ और सुरक्षित सिस्टम प्रोग्रामिंग भाषाओं में से एक है। Kubernetes (k8s) कंटेनर ऑर्केस्ट्रेशन के लिए डी-फैक्टो मानक है। इनका संयोजन अत्यधिक कुशल, हल्की और दोष-सहिष्णु सेवाएँ बनाने की अनुमति देता है। इस लेख में, हम Rust एप्लिकेशन को Kubernetes क्लस्टर में डिप्लॉय करने के पूरे चक्र को समझेंगे: Docker इमेज बनाने से लेकर स्केलिंग तक।
\n\nRust और Kubernetes एक आदर्श जोड़ी क्यों हैं
\n\nRust नेटिव बाइनरी फ़ाइल में कंपाइल होता है, इसे वर्चुअल मशीन (जैसे Java) या इंटरप्रेटर (जैसे Python) की आवश्यकता नहीं होती है। यह न्यूनतम इमेज आकार और कम मेमोरी खपत देता है। Kubernetes के संदर्भ में, इसका अर्थ है:
\n- \n
- पॉड्स का तेज़ स्टार्टअप (अक्सर 1 सेकंड से भी कम)। \n
- क्लस्टर संसाधनों की बचत। \n
- भारी रनटाइम की अनुपस्थिति के कारण कम कमज़ोरियाँ। \n
चरण 1: एक सरल Rust एप्लिकेशन बनाना
\n\nउदाहरण के लिए, हम लोकप्रिय फ्रेमवर्क actix-web का उपयोग करके एक HTTP सर्वर लिखेंगे। एक नया प्रोजेक्ट बनाएँ:
cargo new rust-k8s-demo\ncd rust-k8s-demo\n\nCargo.toml में निर्भरताएँ जोड़ें:
[dependencies]\nactix-web = "4"\nserde = { version = "1", features = ["derive"] }\n\nsrc/main.rs में एक सरल हैंडलर लिखें:
use actix_web::{get, web, App, HttpServer, Responder};\nuse std::env;\n\n#[get("/")]\nasync fn index() -> impl Responder {\n let message = env::var("MESSAGE").unwrap_or_else(|_| "Hello from Rust!".to_string());\n format!("{{ \\"message\\": \\"{}\\" }}", message)\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n let port = env::var("PORT").unwrap_or_else(|_| "8080".to_string());\n let addr = format!("0.0.0.0:{}", port);\n println!("Starting server at {}", addr);\n\n HttpServer::new(|| {\n App::new()\n .service(index)\n })\n .bind(&addr)?\n .run()\n .await\n}\n\nएप्लिकेशन MESSAGE और PORT एनवायरनमेंट वेरिएबल्स को पढ़ता है - यह Kubernetes ConfigMap के माध्यम से कॉन्फ़िगरेशन के लिए उपयोगी होगा।
चरण 2: Docker इमेज बनाना
\n\nहम इमेज के आकार को कम करने के लिए मल्टी-स्टेज बिल्ड का उपयोग करते हैं। Dockerfile बनाएँ:
# बिल्ड स्टेज\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# फाइनल इमेज\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\nइमेज बनाएँ और रजिस्ट्री (जैसे, Docker Hub) में पुश करें:
\ndocker build -t yourusername/rust-k8s-demo:latest .\ndocker push yourusername/rust-k8s-demo:latest\n\nचरण 3: Kubernetes मेनिफेस्ट
\n\nएक k8s फ़ोल्डर बनाएँ और उसमें मेनिफेस्ट रखें।
3.1. कॉन्फ़िगरेशन के लिए ConfigMap
\nफ़ाइल k8s/configmap.yaml बनाएँ:
apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: rust-app-config\ndata:\n MESSAGE: "Kubernetes पर Rust से नमस्ते!"\n PORT: "8080"\n\n3.2. Deployment
\nफ़ाइल k8s/deployment.yaml बनाएँ:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: rust-app\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: rust-app\n template:\n metadata:\n labels:\n app: rust-app\n spec:\n containers:\n - name: rust-app\n image: yourusername/rust-k8s-demo:latest\n ports:\n - containerPort: 8080\n envFrom:\n - configMapRef:\n name: rust-app-config\n