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

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

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

ابدأ الدورة

مقدمة: لماذا Kubernetes لمطور Java؟

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



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

قبل الوصول إلى Kubernetes، يجب حزم تطبيق Java في حاوية. لننظر في مثال بسيط على Spring Boot.



1.1. مثال على تطبيق Java

لننشئ وحدة تحكم REST بسيطة تعيد إصدار التطبيق:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication@RestControllerpublic class App { public static void main(String[] args) { SpringApplication.run(App.class, args); }

@GetMapping("/") public String home() { return "Java App running on Kubernetes v1.0"; }}


1.2. إنشاء Dockerfile

لتطبيقات Java، من الأفضل استخدام بناء متعدد المراحل (multi-stage build) لتقليل حجم الصورة النهائية:

FROM maven:3.8.6-eclipse-temurin-17 AS builderWORKDIR /appCOPY pom.xml .RUN mvn dependency:go-offline -BCOPY src ./srcRUN mvn package -DskipTests

FROM eclipse-temurin:17-jre-alpineWORKDIR /appCOPY --from=builder /app/target/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


1.3. بناء الصورة ونشرها

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

docker build -t yourusername/java-k8s-demo:1.0 .docker push yourusername/java-k8s-demo:1.0


2. كائنات Kubernetes الأساسية لنشر Java

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



2.1. بيان Deployment

أنشئ ملف deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: java-app  labels:    app: java-appspec:  replicas: 2  selector:    matchLabels:      app: java-app  template:    metadata:      labels:        app: java-app    spec:      containers:      - name: java-app        image: yourusername/java-k8s-demo:1.0        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

هام: بالنسبة لـ Spring Boot، استخدم Actuator لفحوصات الصحة. حدد requests و limits لتوزيع الموارد بشكل صحيح بواسطة Kubernetes.



2.2. بيان Service

أنشئ service.yaml للوصول الداخلي إلى البودات:

apiVersion: v1kind: Servicemetadata:  name: java-app-servicespec:  selector:    app: java-app  ports:    - protocol: TCP      port                

المدونات

توصيات الكتب