نشر تطبيقات Java على Kubernetes: دليل أساسي للمبتدئين
\n\nتطوير Java الحديث لا يمكن تصوره بدون الحاويات والتنسيق. أصبح Kubernetes (K8s) المعيار الفعلي لإدارة التطبيقات المحوسبة. في هذا الدليل، سنشرح خطوة بخطوة عملية نشر تطبيق Java بسيط على مجموعة Kubernetes. ستتعلم كيفية حزم الكود في صورة Docker، وإنشاء المانيفستات اللازمة، وتشغيل التطبيق في بيئة تشبه بيئة الإنتاج.
\n\n1. تحضير تطبيق Java وصورة Docker
\n\nلنبدأ بتطبيق Spring Boot بسيط. قم بإنشاء ملف Dockerfile في الدليل الجذر للمشروع:
FROM openjdk:17-jdk-alpine\nWORKDIR /app\nCOPY target/my-app.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]\n\nقم ببناء الصورة وإرسالها إلى السجل (مثل Docker Hub):
\n\nmvn clean package -DskipTests\ndocker build -t myregistry/my-java-app:v1 .\ndocker push myregistry/my-java-app:v1\n\nتأكد من أن الصورة تعمل محليًا:
\n\ndocker run -p 8080:8080 myregistry/my-java-app:v1\n\n2. الكائنات الأساسية في Kubernetes
\n\nلنشر تطبيق Java، سنحتاج إلى ثلاثة موارد رئيسية:
\n\n- \n
- Deployment — يدير النسخ والتحديثات \n
- Service — يوفر الوصول الشبكي إلى البودات \n
- Ingress — (اختياري) توجيه حركة المرور الخارجية \n
إنشاء Deployment (deployment.yaml)
\n\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: java-app-deployment\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: java-app\n template:\n metadata:\n labels:\n app: java-app\n spec:\n containers:\n - name: java-app\n image: myregistry/my-java-app: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: /actuator/health\n port: 8080\n initialDelaySeconds: 30\n periodSeconds: 10\n readinessProbe:\n httpGet:\n path: /actuator/health\n port: 8080\n initialDelaySeconds: 20\n periodSeconds: 5\n\nإنشاء Service (service.yaml)
\n\napiVersion: v1\nkind: Service\nmetadata:\n name: java-app-service\nspec:\n selector:\n app: java-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 8080\n type: ClusterIP\n\n3. النشر على مجموعة Kubernetes
\n\nطبق المانيفستات على مجموعتك (تأكد من أن kubectl مهيأ):
kubectl apply -f deployment.yaml\nkubectl apply -f service.yaml\n\nتحقق من حالة البودات والخدمة:
\n\nkubectl get pods\nkubectl get svc java-app-service\n\nللوصول من الخارج (مثلًا للاختبار)، استخدم port-forward:
\n\nkubectl port-forward service/java-app-service 8080:80\n\nالآن التطبيق متاح على العنوان http://localhost:8080.
4. التوسع والتحديث
\n\nيتيح Kubernetes توسيع التطبيق بسهولة:
\n\nkubectl scale deployment java-app-deployment --replicas=5\n\nلتحديث الصورة (rolling update)، قم بتغيير العلامة في Deployment وطبق:
\n\nkubectl set image deployment/java-app-deployment java-app=myregistry/my-java-app:v2\nkubectl rollout status deployment/java-app-deployment\n\nعند الحاجة، يمكن التراجع عن التغييرات:
\n\nkubectl rollout undo deployment/java-app-deployment\n\nالخاتمة
\n\nلقد استعرضنا العملية الأساسية لنشر تطبيق Java على Kubernetes