نشر تطبيق Kotlin على Kubernetes: دليل خطوة بخطوة

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

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

ابدأ الدورة

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

\n\n

التطوير الحديث يتطلب بشكل متزايد ليس فقط كتابة كود عالي الجودة، ولكن أيضًا نشره بشكل صحيح. أصبح Kubernetes المعيار الفعلي لتنسيق الحاويات. في هذا الدليل، سنشرح كيفية حزم تطبيق Kotlin في حاوية Docker ونشره في كتلة Kubernetes. ستحصل على مانيفستات جاهزة وأمثلة عملية بلغة Kotlin (باستخدام إطار العمل Ktor).

\n\n

1. تحضير تطبيق Kotlin

\n\n

للتجربة، سنأخذ واجهة REST API بسيطة على Ktor. تأكد من إعداد Gradle (أو Maven) مع إضافة application.

\n\n

مثال build.gradle.kts:

\n
plugins {\n    kotlin("jvm") version "1.9.22"\n    application\n    id("com.github.johnrengelman.shadow") version "8.1.1"\n}\n\napplication {\n    mainClass.set("com.example.ApplicationKt")\n}\n\ndependencies {\n    implementation("io.ktor:ktor-server-netty:2.3.7")\n    implementation("io.ktor:ktor-server-content-negotiation:2.3.7")\n    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")\n}
\n\n

أبسط نقطة نهاية (src/main/kotlin/com/example/Application.kt):

\n
package 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.serialization.kotlinx.json.*\nimport io.ktor.server.plugins.contentnegotiation.*\n\nfun main() {\n    embeddedServer(Netty, port = 8080) {\n        install(ContentNegotiation) {\n            json()\n        }\n        routing {\n            get("/") {\n                call.respond(mapOf("message" to "Hello from Kotlin on K8s!"))\n            }\n            get("/health") {\n                call.respond(mapOf("status" to "UP"))\n            }\n        }\n    }.start(wait = true)\n}
\n\n

قم ببناء ملف JAR الضخم باستخدام الأمر:

\n
./gradlew shadowJar
\n\n

سيظهر ملف JAR الجاهز في build/libs/.

\n\n

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

\n\n

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

\n
FROM openjdk:17-jdk-slim\n\nWORKDIR /app\n\nCOPY build/libs/*-all.jar app.jar\n\nEXPOSE 8080\n\nENTRYPOINT ["java", "-jar", "app.jar"]
\n\n

قم ببناء الصورة وإرسالها إلى السجل (مثل Docker Hub):

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

تأكد من استبدال yourusername باسم المستخدم الخاص بك في Docker Hub أو حدد عنوان السجل الخاص.

\n\n

3. مانيفستات Kubernetes

\n\n

للنشر، سنحتاج إلى ملفين YAML: Deployment (يدير البودات) و Service (يفتح الوصول).

\n\n

3.1. Deployment (deployment.yaml)

\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        livenessProbe:\n          httpGet:\n            path: /health\n            port: 8080\n          initialDelaySeconds: 5\n          periodSeconds: 10\n        readinessProbe:\n          httpGet:\n            path: /health\n            port: 8080\n          initialDelaySeconds: 3\n          periodSeconds: 5
\n\n

3.2. Service (service.yaml)

\n
apiVersion: v1\nkind: Service\nmetadata:\n  name: kotlin-app-service\nspec:\n  selector:\n    app: kotlin-app\n  ports:\n  - port: 80\n    targetPort: 8080\n  type: LoadBalancer
\n\n

قم بتطبيق المانيفستات:

\n
kubectl apply -f deployment.yaml\nkubectl apply -f service.yaml
\n\n

تحقق من الحالة:

\n
kubectl get pods\nkubectl                

المدونات

توصيات الكتب