نشر Java على Kubernetes: دليل أساسي للمطورين

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

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

ابدأ الدورة

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



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



1. تحضير تطبيق Java وصورة Docker



قبل نشر التطبيق في Kubernetes، يجب حوسبته. Docker هو الطريقة القياسية لتغليف تطبيقات Java مع تبعياتها. سننظر في خدمة REST بسيطة على Spring Boot.



سننشئ الفئة HelloController.java:



package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;

@RestControllerpublic class HelloController {

@GetMapping("/") public String hello() { return "Hello from Java on Kubernetes!"; }}


الآن سننشئ Dockerfile لبناء الصورة. سنستخدم بناء متعدد المراحل (multi-stage build) لتقليل حجم الصورة النهائية:



FROM maven:3.8.5-openjdk-17 AS buildWORKDIR /appCOPY pom.xml .COPY src ./srcRUN mvn clean package -DskipTests

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


قم ببناء الصورة باستخدام الأمر docker build -t my-java-app:latest . وقم بتشغيلها محليًا للتحقق: docker run -p 8080:8080 my-java-app. إذا كان كل شيء يعمل، يمكنك تحميل الصورة إلى السجل (على سبيل المثال، Docker Hub):



docker tag my-java-app:latest yourusername/my-java-app:latestdocker push yourusername/my-java-app:latest


2. البيانات (Manifests) الأساسية لـ Kubernetes



للنشر في Kubernetes، ستحتاج إلى موردين على الأقل: Deployment (مسؤول عن إدارة البودات) و Service (يوفر الوصول الشبكي).



أنشئ ملف deployment.yaml:



apiVersion: apps/v1kind: Deploymentmetadata:  name: java-app-deployment  labels:    app: java-appspec:  replicas: 2  selector:    matchLabels:      app: java-app  template:    metadata:      labels:        app: java-app    spec:      containers:      - name: java-app        image: yourusername/my-java-app:latest        ports:        - containerPort: 8080        resources:          requests:            memory: "256Mi"            cpu: "250m"          limits:            memory: "512Mi"            cpu: "500m"        livenessProbe:          httpGet:            path: /actuator/health            port: 8080          initialDelaySeconds: 30          periodSeconds: 10        readinessProbe:          httpGet:            path: /actuator/health            port: 8080          initialDelaySeconds: 20          periodSeconds: 5


الآن أنشئ service.yaml لجعل التطبيق متاحًا داخل المجموعة:



apiVersion: v1kind: Servicemetadata:  name: java-app-servicespec:  selector:    app: java-app  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: ClusterIP


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



3. النشر في المجموعة



تأكد من أن لديك إمكانية الوصول إلى مجموعة Kubernetes (على سبيل المثال، Minikube المحلي أو خدمة سحابية). قم بتطبيق البيانات (manifests):



kubectl apply -f deployment.yamlkubectl apply -f service.yaml

المدونات

توصيات الكتب