نشر Rust على Kubernetes: دليل أساسي للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

نشر Rust على Kubernetes: دليل أساسي للمبتدئين

\n\n

التطوير الحديث يتطلب بشكل متزايد ليس فقط كتابة كود سريع وآمن، ولكن أيضًا القدرة على نشره بشكل صحيح في البنية التحتية السحابية. Rust، المعروفة بأدائها العالي وأمان الذاكرة، أصبحت خيارًا ممتازًا للخدمات المصغرة. و Kubernetes - منسق الحاويات القياسي - يساعد في إدارة هذه الخدمات على نطاق واسع.

\n\n

في هذه المقالة، سنمر بالمسار الكامل بدءًا من كتابة خادم ويب بسيط بلغة Rust وحتى نشره في مجموعة Kubernetes. ستتعلم كيفية حزم التطبيق في صورة Docker، وإنشاء المانيفستات اللازمة، وتشغيله في السحابة.

\n\n

1. تحضير تطبيق Rust للحاويات

\n\n

للبدء، سننشئ تطبيق ويب بسيط بلغة Rust باستخدام الإطار الشهير actix-web. سيعيد رسالة JSON بسيطة - مثال مثالي للخدمة المصغرة.

\n\n

أنشئ مشروعًا جديدًا:

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

أضف التبعية في Cargo.toml:

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

الآن لنكتب كود التطبيق في src/main.rs:

\n
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\n

لاحظ: نحن نربط بـ 0.0.0.0:8080، لأنه داخل الحاوية يجب أن يستمع التطبيق إلى جميع الواجهات. اختبر محليًا:

\n
cargo run
\n\n

افتح http://localhost:8080/health - يجب أن ترى استجابة JSON.

\n\n

2. إنشاء صورة Docker مع تطبيق Rust

\n\n

بالنسبة لـ Kubernetes، نحتاج إلى حاوية. Rust يُترجم إلى ملف ثنائي أصلي، لذلك يمكننا استخدام البناء متعدد المراحل (multi-stage build) للحصول على صورة صغيرة الحجم.

\n\n

أنشئ ملف Dockerfile في جذر المشروع:

\n
# مرحلة البناء\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

يقوم هذا الـ Dockerfile أولاً ببناء التبعيات، ثم يترجم الكود الخاص بنا وينسخ الملف الثنائي إلى صورة صغيرة مبنية على Debian. هذا يوفر المساحة ويعزز الأمان.

\n\n

قم ببناء الصورة:

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

اختبر الحاوية محليًا:

\n
docker run -p 8080:8080 rust-k8s-demo:latest
\n\n

إذا كان كل شيء يعمل - قم بتحميل الصورة إلى السجل (مثل Docker Hub):

\n
docker tag rust-k8s-demo:latest yourusername/rust-k8s-demo:v1\ndocker push yourusername/rust-k8s-demo:v1
\n\n

3. إعداد مانيفستات Kubernetes

\n\n

الآن بعد أن أصبحت الصورة جاهزة، نحتاج إلى إنشاء مانيفستات لـ Kubernetes. سننشئ Deployment (لإدارة النسخ المتماثلة) و Service (لـ

المدونات

توصيات الكتب