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

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

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

ابدأ الدورة

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

\n\n

أصبح Kubernetes (K8s) المعيار الفعلي لتنسيق الحاويات في التطوير الحديث. إذا كنت تكتب بلغة Kotlin، سواء كان ذلك خلفية (باك إند) باستخدام Spring Boot، أو خدمة مصغرة باستخدام Ktor، أو تطبيق وحدة تحكم، فإن القدرة على نشره في مجموعة Kubernetes هي مهارة بالغة الأهمية. في هذا الدليل، سننتقل من تطبيق Kotlin بسيط إلى بود (Pod) عامل في المجموعة. المادة موجهة للمبتدئين: لا توجد مواضيع معقدة مثل Service Mesh أو Helm - فقط الأساسيات.

\n\n

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

\n\n

قبل التفكير في Kubernetes، نحتاج إلى حزم تطبيقنا في صورة Docker. لننظر في مثال لواجهة برمجة تطبيقات REST بسيطة باستخدام Ktor - وهو إطار عمل خفيف الوزن مثالي للخدمات المصغرة.

\n\n

لننشئ ملف build.gradle.kts مع الحد الأدنى من التبعيات:

\n\n
plugins {\n    kotlin("jvm") version "1.9.0"\n    application\n}\n\napplication {\n    mainClass.set("com.example.AppKt")\n}\n\ndependencies {\n    implementation("io.ktor:ktor-server-netty:2.3.0")\n    implementation("io.ktor:ktor-server-content-negotiation:2.3.0")\n    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.0")\n}
\n\n

لنكتب تطبيقًا بسيطًا يستجيب لطلبات GET:

\n\n
// src/main/kotlin/com/example/App.kt\npackage com.example\n\nimport io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.routing.*\nimport io.ktor.server.response.*\nimport io.ktor.http.*\n\nfun main() {\n    embeddedServer(Netty, port = 8080) {\n        routing {\n            get("/") {\n                call.respondText("Hello from Kotlin on Kubernetes!", ContentType.Text.Plain)\n            }\n        }\n    }.start(wait = true)\n}
\n\n

يستمع التطبيق على المنفذ 8080. من المهم تذكر ذلك - سنستخدم هذا المنفذ في ملف Dockerfile والمانيفستات.

\n\n

2. إنشاء صورة Docker

\n\n

لبناء الصورة، سنحتاج إلى Dockerfile. أفضل ممارسة هي استخدام بناء متعدد المراحل (multi-stage build) لجعل الصورة النهائية صغيرة الحجم قدر الإمكان.

\n\n
FROM gradle:7.6-jdk17 AS build\nWORKDIR /app\nCOPY build.gradle.kts settings.gradle.kts ./\nCOPY src ./src\nRUN gradle build --no-daemon\n\nFROM openjdk:17-jre-slim\nWORKDIR /app\nCOPY --from=build /app/build/libs/*.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]
\n\n

لنبن الصورة ونرفعها إلى السجل (على سبيل المثال، Docker Hub):

\n\n
docker build -t yourusername/kotlin-k8s-demo:v1 .\ndocker push yourusername/kotlin-k8s-demo:v1
\n\n

إذا لم يكن لديك وصول إلى السجل، يمكنك استخدام minikube وتحميل الصورة محليًا باستخدام الأمر minikube image load.

\n\n

3. المانيفستات الأساسية لـ Kubernetes

\n\n

الآن ننتقل إلى الجزء الأكثر إثارة للاهتمام - كتابة مانيفستات YAML لنشر التطبيق في المجموعة. سنحتاج إلى كائنين أساسيين: Deployment (يدير نسخ البودات) و Service (يوفر الوصول إلى البودات).

\n\n

3.1 Deployment

\n\n

يصف Deployment الحالة المرغوبة للبودات: الصورة التي سيتم استخدامها، عدد النسخ، المنافذ التي سيتم فتحها.

\n\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: kotlin-app\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: kotlin-app\n  template:\n    metadata:\n      labels:\n        app: kotlin-app\n    spec:\n      containers:\n      - name: kotlin-app\n        image: yourusername/kotlin-k8s-demo:v1\n        ports:\n        - containerPort: 8080\n        resources:\n          requests:\n            memory: "256Mi"\n            cpu: "250m"\n          limits:\n            memory: "512Mi"\n            cpu: "500m"\n        livenessProbe:\n          httpGet:\n            path: /\n            port: 8080\n          initialDelaySeconds: 10\n          periodSeconds: 5\n        readinessProbe:\n          httpGet:\n                

المدونات

توصيات الكتب