المختبر 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