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

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

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

ابدأ الدورة

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



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



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



كمثال، سنأخذ REST API بسيطًا على Ktor — إطار عمل خفيف لـ Kotlin. سننشئ ملف Main.kt:



import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.routing.*import io.ktor.http.*import io.ktor.server.response.*

fun main() { embeddedServer(Netty, port = 8080) { routing { get("/") { call.respondText("Hello from Kotlin on K8s!", ContentType.Text.Plain) } get("/health") { call.respondText("OK", ContentType.Text.Plain) } } }.start(wait = true)}


يقوم هذا الكود بتشغيل خادم على المنفذ 8080 مع نقطتي نهاية: الجذر وفحص الصحة. تأكد من تضمين تبعيات Ktor و Netty في build.gradle.kts.



2. بناء صورة Docker



لنشر التطبيق في Kubernetes، يجب حزمه في حاوية. سننشئ Dockerfile في جذر المشروع:



FROM gradle:8.5-jdk21 AS buildWORKDIR /appCOPY build.gradle.kts settings.gradle.kts ./COPY src ./srcRUN gradle build --no-daemon

FROM openjdk:21-jdk-slimWORKDIR /appCOPY --from=build /app/build/libs/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


يتم البناء على مرحلتين: أولاً التجميع باستخدام Gradle، ثم نسخ ملف JAR إلى صورة نظيفة. قم ببناء الصورة بالأمر:



docker build -t my-kotlin-app:1.0 .


للنشر في السجل (مثل Docker Hub)، نفذ:



docker tag my-kotlin-app:1.0 yourusername/my-kotlin-app:1.0docker push yourusername/my-kotlin-app:1.0


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



الآن سننشئ ملفات YAML للنشر في المجموعة. نبدأ بـ deployment.yaml:



apiVersion: apps/v1kind: Deploymentmetadata:  name: kotlin-appspec:  replicas: 2  selector:    matchLabels:      app: kotlin-app  template:    metadata:      labels:        app: kotlin-app    spec:      containers:      - name: kotlin-app        image: yourusername/my-kotlin-app:1.0        ports:        - containerPort: 8080        livenessProbe:          httpGet:            path: /health            port: 8080          initialDelaySeconds: 5          periodSeconds: 10        readinessProbe:          httpGet:            path: /health            port: 8080          initialDelaySeconds: 3          periodSeconds: 5


يقوم هذا المانيفست بإنشاء نسختين مكررتين من التطبيق، ويضيف فحوصات الحيوية والجاهزية. ثم service.yaml:



apiVersion: v1kind: Servicemetadata:  name: kotlin-app-svcspec:  selector:    app: kotlin-app  ports:  - port: 80    targetPort: 8080  type: ClusterIP


تقوم الخدمة بتوجيه حركة المرور من المنفذ 80 إلى المنفذ 8080 للحاوية. إذا كنت بحاجة إلى وصول خارجي، قم بتغيير النوع إلى NodePort أو LoadBalancer.



4. تهيئة Ingress والنشر



لتوجيه الطلبات من الخارج، نستخدم وحدة تحكم Ingress. أنشئ ingress.yaml:



apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: kotlin-app-ingress  annotations:    nginx.ingress.kubernetes.io/rewrite-target: /spec:  rules:  - host: kotlin.example.com    http:

المدونات

توصيات الكتب