परिचय
\n\nRust एक आधुनिक सिस्टम प्रोग्रामिंग भाषा है जो C/C++ की उच्च प्रदर्शन क्षमता को कंपाइलर-स्तरीय मेमोरी सुरक्षा के साथ जोड़ती है। गार्बेज कलेक्टर की अनुपस्थिति और कम संसाधन खपत के कारण, Rust में बने ऐप कंटेनर वातावरण में चलाने के लिए आदर्श हैं। Kubernetes (K8s) कंटेनर ऑर्केस्ट्रेशन का डी-फैक्टो मानक है। इस गाइड में, हम व्यावहारिक रूप से सीखेंगे कि Rust में एक सरल वेब ऐप कैसे बनाएं, इसे Docker इमेज में पैक करें, और Kubernetes क्लस्टर में डिप्लॉय करें।
\n\nयह लेख उन डेवलपर्स के लिए है जो Rust की मूल बातें जानते हैं और Docker तथा Kubernetes की बुनियादी समझ रखते हैं। हम सिद्धांत में गहराई से नहीं जाएंगे, बल्कि वास्तविक कोड और कमांड के उदाहरणों के साथ चरण-दर-चरण निर्देशों पर ध्यान केंद्रित करेंगे।
\n\n1. Rust ऐप तैयार करना
\n\nउदाहरण के तौर पर, हम लोकप्रिय फ्रेमवर्क actix-web का उपयोग करके एक न्यूनतम HTTP सर्वर बनाएंगे। यह GET अनुरोधों का जवाब देगा और JSON प्रतिक्रिया लौटाएगा।
एक नया प्रोजेक्ट बनाएं:
\n\ncargo new rust-k8s-app\ncd rust-k8s-app\n\nCargo.toml में डिपेंडेंसी जोड़ें:
[dependencies]\nactix-web = "4"\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"\n\nअब src/main.rs में सर्वर का कोड लिखें:
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: "सेवा चालू है".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 एक संख्या होनी चाहिए");\n\n println!("सर्वर {}:{} पर शुरू हुआ", 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ध्यान दें: हमने होस्ट और पोर्ट को एनवायरनमेंट वेरिएबल में रखा है। कंटेनरीकृत ऐप के लिए यह मानक अभ्यास है — कॉन्फ़िगरेशन बाहर से आनी चाहिए।
\n\nजांचें कि ऐप स्थानीय रूप से बिल्ड और चलता है:
\n\ncargo build --release\n./target/release/rust-k8s-app\n\nब्राउज़र में http://localhost:8080/health खोलें — आपको JSON प्रतिक्रिया दिखनी चाहिए।
2. Docker इमेज बनाना
\n\nKubernetes में डिप्लॉय करने के लिए, हमें ऐप को Docker इमेज में पैक करना होगा। फाइनल इमेज का आकार कम करने के लिए हम मल्टी-स्टेज बिल्ड का उपयोग करेंगे।
\n\nप्रोजेक्ट की रूट में Dockerfile फ़ाइल बनाएं:
# बिल्ड स्टेज\nFROM rust:1.75-slim-bookworm AS builder\n\nWORKDIR /app\n\n# डिपेंडेंसी कैशिंग के लिए केवल Cargo.toml कॉपी करें\nCOPY Cargo.toml Cargo.lock ./\nRUN mkdir src && echo "fn main() {}" > src/main.rs\nRUN cargo build --release 2>/dev/null || true\n\n# अब असली सोर्स कोड कॉपी करें\nCOPY src ./src\nRUN cargo build --release\n\n# फाइनल इमेज\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इमेज बनाएं:
\n\ndocker build -t rust-k8s-app:latest .\n\nइमेज का आकार जांचें