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

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

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

ابدأ الدورة

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

\n\n

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

\n\n

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

\n\n

لنبدأ بتطبيق Spring Boot بسيط. قم بإنشاء ملف Dockerfile في الدليل الجذر للمشروع:

\n\n
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\n
mvn clean package -DskipTests\ndocker build -t myregistry/my-java-app:v1 .\ndocker push myregistry/my-java-app:v1
\n\n

تأكد من أن الصورة تعمل محليًا:

\n\n
docker run -p 8080:8080 myregistry/my-java-app:v1
\n\n

2. الكائنات الأساسية في Kubernetes

\n\n

لنشر تطبيق Java، سنحتاج إلى ثلاثة موارد رئيسية:

\n\n
    \n
  • Deployment — يدير النسخ والتحديثات
  • \n
  • Service — يوفر الوصول الشبكي إلى البودات
  • \n
  • Ingress — (اختياري) توجيه حركة المرور الخارجية
  • \n
\n\n

إنشاء Deployment (deployment.yaml)

\n\n
apiVersion: 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\n
apiVersion: 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\n

3. النشر على مجموعة Kubernetes

\n\n

طبق المانيفستات على مجموعتك (تأكد من أن kubectl مهيأ):

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

تحقق من حالة البودات والخدمة:

\n\n
kubectl get pods\nkubectl get svc java-app-service
\n\n

للوصول من الخارج (مثلًا للاختبار)، استخدم port-forward:

\n\n
kubectl port-forward service/java-app-service 8080:80
\n\n

الآن التطبيق متاح على العنوان http://localhost:8080.

\n\n

4. التوسع والتحديث

\n\n

يتيح Kubernetes توسيع التطبيق بسهولة:

\n\n
kubectl scale deployment java-app-deployment --replicas=5
\n\n

لتحديث الصورة (rolling update)، قم بتغيير العلامة في Deployment وطبق:

\n\n
kubectl set image deployment/java-app-deployment java-app=myregistry/my-java-app:v2\nkubectl rollout status deployment/java-app-deployment
\n\n

عند الحاجة، يمكن التراجع عن التغييرات:

\n\n
kubectl rollout undo deployment/java-app-deployment
\n\n

الخاتمة

\n\n

لقد استعرضنا العملية الأساسية لنشر تطبيق Java على Kubernetes

المدونات

توصيات الكتب