نشر تطبيقات Java على Kubernetes: دليل خطوة بخطوة

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

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

ابدأ الدورة

نشر تطبيقات Java على Kubernetes: من Dockerfile إلى خدمة عاملة

\n\n

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

\n\n

1. تحضير تطبيق Java وملف Dockerfile

\n\n

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

\n\n

بناء المشروع

\n

لنفترض أن لدينا مشروعًا يتم بناؤه عبر Maven. قم بتنفيذ الأمر في جذر المشروع:

\n
mvn clean package -DskipTests
\n

نتيجة لذلك، سيظهر ملف my-app-1.0.0.jar في مجلد target/.

\n\n

إنشاء Dockerfile

\n

لتقليل حجم الصورة وزيادة الأمان، نستخدم البناء متعدد المراحل (multi-stage build).

\n
# المرحلة 1: البناء\nFROM maven:3.8.6-openjdk-17 AS builder\nWORKDIR /app\nCOPY pom.xml .\nRUN mvn dependency:go-offline -B\nCOPY src ./src\nRUN mvn package -DskipTests\n\n# المرحلة 2: الصورة النهائية\nFROM openjdk:17-jdk-slim\nWORKDIR /app\nCOPY --from=builder /app/target/my-app-1.0.0.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]
\n\n

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

\n
docker build -t my-java-app:1.0.0 .\ndocker tag my-java-app:1.0.0 your-dockerhub/my-java-app:1.0.0\ndocker push your-dockerhub/my-java-app:1.0.0
\n\n

2. إنشاء ملفات تعريف Kubernetes

\n\n

يستخدم Kubernetes نهجًا تصريحيًا. سنصف الحالة المرغوبة للنظام في ملفات YAML.

\n\n

Deployment - إدارة البودات

\n

قم بإنشاء ملف deployment.yaml:

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: java-app-deployment\n  labels:\n    app: java-app\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: your-dockerhub/my-java-app:1.0.0\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 - ضمان الوصول

\n

قم بإنشاء ملف service.yaml:

\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

ConfigMap - استخراج التكوين

\n

لتخزين متغيرات البيئة، قم بإنشاء configmap.yaml:

\n
apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: app-config\ndata:\n  SPRING_PROFILES_ACTIVE: "prod"\n  DB_URL: "jdbc:postgresql://postgres-service:5432/mydb"
\n\n

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

\n\n

الآن سنطبق جميع الملفات التعريفية على المجموعة. تأكد من أن kubectl مهيأ وأنك متصل بالسياق الصحيح.

\n\n

تطبيق الملفات التعريفية

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

التحقق من الحالة

\n
kubectl get pods\nkubectl get deployments\nkubectl get services
\n

يجب أن

المدونات

توصيات الكتب