انتقل إلى المحتوى الرئيسي

المختبر 7.3 - الوظائف و CronJobs

أهداف المختبر​

في نهاية هذا المختبر، ستكون قادرًا على:

  • إنشاء وتشغيل الوظائف للمهام الفردية.
  • فهم الأنواع المختلفة من الوظائف (كاملة، متوازية).
  • إنشاء CronJobs للمهام المجدولة.
  • إدارة تاريخ الوظائف.
  • مراقبة تنفيذ الوظائف و CronJobs.

المدة المقدرة​

45-60 دقيقة

المتطلبات المسبقة​

  • تثبيت وتكوين kubectl.
  • تشغيل عنقود Kubernetes محلية (minikube أو kind).
  • معرفة حول الوظائف و CronJobs (الفصل 7.3).

الجزء 1: إنشاء وظيفة بسيطة​

تقوم الوظيفة بإنشاء واحد أو أكثر من الـ Pods وتضمن أن عددًا معينًا منها ينتهي بنجاح.

الخطوة 1.1: إنشاء وظيفة بسيطة​

قم بإنشاء ملف job-simple.yaml:

# job-simple.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-simple
spec:
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'تمت المهمة بنجاح!' && date"]
restartPolicy: Never # الوظائف تستخدم Never أو OnFailure

التفسير:

  • restartPolicy: Never: لن يتم إعادة تشغيل الـ Pod تلقائيًا إذا فشل. للوظائف، استخدم Never أو OnFailure.
  • تقوم الوظيفة بإنشاء Pod ينفذ الأمر وينتهي.

قم بتطبيق الوظيفة:

kubectl apply -f job-simple.yaml

الخطوة 1.2: التحقق من التنفيذ​

تحقق من حالة الوظيفة:

kubectl get jobs

تحقق من الـ Pods التي تم إنشاؤها:

kubectl get pods -l job-name=job-simple

بمجرد انتهاء الـ Pod، تحقق من السجلات:

kubectl logs -l job-name=job-simple

يجب أن ترى الرسالة "تمت المهمة بنجاح!" والتاريخ.

الخطوة 1.3: التحقق من الحالة الكاملة​

تحقق من تفاصيل الوظيفة:

kubectl describe job job-simple

يجب أن ترى أن الوظيفة Complete مع 1/1 مكتملة.


الجزء 2: وظيفة مع عدة إكمالات​

يمكن تكوين وظيفة لتعمل عدة مرات (بالتوازي أو بالتسلسل).

الخطوة 2.1: إنشاء وظيفة مع إكمالات​

قم بإنشاء ملف job-multiple.yaml:

# job-multiple.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-multiple
spec:
completions: 5 # يجب أن تعمل الوظيفة 5 مرات بنجاح
parallelism: 2 # تشغيل 2 Pods بالتوازي في وقت واحد
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'مهمة $(date +%s)' && sleep 2"]
restartPolicy: Never

التفسير:

  • completions: 5: يجب أن تكمل الوظيفة 5 عمليات تنفيذ ناجحة.
  • parallelism: 2: بحد أقصى 2 Pods تعمل بالتوازي في وقت واحد.

قم بتطبيق الوظيفة:

kubectl apply -f job-multiple.yaml

الخطوة 2.2: مراقبة التنفيذ​

راقب الـ Pods في الوقت الحقيقي:

kubectl get pods -l job-name=job-multiple -w

يجب أن ترى 2 Pods تعمل بالتوازي، ثم يتم إنشاء أخرى حتى يتم الوصول إلى 5 إكمالات.

تحقق من حالة الوظيفة:

kubectl get job job-multiple

بمجرد الانتهاء، يجب أن ترى 5/5 إكمالات.


الجزء 3: وظيفة مع حد التراجع​

يحدد backoffLimit عدد المحاولات في حالة الفشل.

الخطوة 3.1: إنشاء وظيفة تفشل​

قم بإنشاء ملف job-failure.yaml:

# job-failure.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-failure
spec:
backoffLimit: 3 # بحد أقصى 3 محاولات في حالة الفشل
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["exit 1"] # يفشل عن قصد
restartPolicy: Never

قم بتطبيق الوظيفة:

kubectl apply -f job-failure.yaml

الخطوة 3.2: مراقبة المحاولات​

راقب الـ Pods:

kubectl get pods -l job-name=job-failure -w

يجب أن ترى عدة Pods يتم إنشاؤها (حتى 3 محاولات) قبل أن يتم وضع علامة على الوظيفة كـ Failed.

تحقق من حالة الوظيفة:

kubectl get job job-failure
kubectl describe job job-failure

الجزء 4: إنشاء CronJob​

يقوم CronJob بإنشاء وظائف بشكل متكرر وفقًا لجدول زمني (تنسيق cron).

الخطوة 4.1: إنشاء CronJob​

قم بإنشاء ملف cronjob-example.yaml:

# cronjob-example.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-example
spec:
schedule: "*/1 * * * *" # كل دقيقة (للاختبار)
jobTemplate:
spec:
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'تنفيذ CronJob - $(date)'"]
restartPolicy: OnFailure
successfulJobsHistoryLimit: 3 # الاحتفاظ بـ 3 وظائف ناجحة في السجل
failedJobsHistoryLimit: 1 # الاحتفاظ بوظيفة واحدة فاشلة في السجل

التفسير:

  • schedule: "*/1 * * * *": تنسيق cron (دقيقة ساعة يوم شهر يوم-الأسبوع). هنا، كل دقيقة.
  • successfulJobsHistoryLimit: 3: يحتفظ بآخر 3 وظائف ناجحة.
  • failedJobsHistoryLimit: 1: يحتفظ بآخر وظيفة فاشلة.

قم بتطبيق الـ CronJob:

kubectl apply -f cronjob-example.yaml

الخطوة 4.2: التحقق من الـ CronJob​

تحقق من حالة الـ CronJob:

kubectl get cronjob cronjob-example
# أو
kubectl get cj cronjob-example

انتظر دقيقة، ثم تحقق من إنشاء الوظائف:

kubectl get jobs

يجب أن ترى وظائف مسماة cronjob-example-<timestamp>.

تحقق من الـ Pods التي تم إنشاؤها بواسطة الوظائف:

kubectl get pods

تحقق من سجلات إحدى الوظائف:

JOB_NAME=$(kubectl get jobs -o jsonpath='{.items[0].metadata.name}')
kubectl logs -l job-name=$JOB_NAME

الجزء 5: تعليق CronJob​

يمكنك تعليق CronJob مؤقتًا دون حذفه.

الخطوة 5.1: تعليق الـ CronJob​

تعليق الـ CronJob:

kubectl patch cronjob cronjob-example -p '{"spec":{"suspend":true}}'

تحقق من أن الـ CronJob معلق:

kubectl get cronjob cronjob-example

يجب أن ترى True في عمود SUSPEND.

الخطوة 5.2: استئناف الـ CronJob​

استئناف الـ CronJob:

kubectl patch cronjob cronjob-example -p '{"spec":{"suspend":false}}'

الجزء 6: أمثلة على جداول Cron​

إليك بعض الأمثلة على جداول cron الشائعة:

schedule: "0 0 * * *"        # كل يوم عند منتصف الليل
schedule: "0 */6 * * *" # كل 6 ساعات
schedule: "0 9 * * 1" # كل يوم اثنين عند الساعة 9 صباحًا
schedule: "0 0 1 * *" # اليوم الأول من كل شهر عند منتصف الليل
schedule: "*/30 * * * *" # كل 30 دقيقة

الجزء 7: التنظيف​

احذف الموارد التي تم إنشاؤها:

# حذف الـ CronJobs (يحذف أيضًا الوظائف المرتبطة)
kubectl delete cronjob cronjob-example

# حذف الوظائف
kubectl delete job job-simple job-multiple job-failure

# حذف الـ Pods المتبقية (اختياري، عادة ما يتم حذفها تلقائيًا)
kubectl delete pods -l job-name

ملخص المختبر​

في هذا المختبر، استكشفت الوظائف و CronJobs. تعلمت كيفية إنشاء وظائف للمهام الفردية، وتكوين وظائف متوازية، وإدارة الفشل مع backoffLimit، وإنشاء CronJobs للمهام المجدولة المتكررة.


الخطوات التالية​

سيعرض لك المختبر الأخير في هذه الوحدة كيفية استخدام Init Containers و Sidecars لأنماط متقدمة.

المختبر 7.4: Init Containers و Sidecars


تم إنشاء المختبر في: ديسمبر 2024