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

الفصل 7.3 - الوظائف

أهداف التعلم​

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

  • فهم ما هي الوظيفة
  • إنشاء وإدارة الوظائف
  • تكوين الإكمال والتوازي
  • إدارة الإخفاقات والمحاولات
  • فهم الأنواع المختلفة من الوظائف
  • استخدام الوظائف لمعالجة الدُفعات

مقدمة​

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


ما هي الوظيفة؟​

تقوم الوظيفة بإنشاء واحد أو أكثر من الـ Pods وتضمن أن عددًا معينًا منهم ينتهي بنجاح. لا يتم حذف الـ Pods التي تم إنشاؤها بواسطة الوظيفة تلقائيًا، مما يسمح برؤية السجلات وتصحيح الأخطاء.

الخصائص​

  • مهمة مؤقتة: تنفيذ مهمة والانتهاء
  • الإكمالات: عدد النجاحات المطلوبة
  • التوازي: عدد الـ Pods بالتوازي
  • المحاولات: إنشاء Pods جديدة في حالة الفشل

أنواع الوظائف​

1. وظيفة بسيطة (غير متوازية)​

Pod واحد يجب أن ينجح:

apiVersion: batch/v1
kind: Job
metadata:
name: simple-job
spec:
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["sh", "-c", "echo 'Job completed' && sleep 30"]
restartPolicy: Never

2. وظيفة مع الإكمالات​

عدة Pods يجب أن تنجح:

apiVersion: batch/v1
kind: Job
metadata:
name: completion-job
spec:
completions: 5 # 5 Pods يجب أن تنجح
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["sh", "-c", "echo Processing item $JOB_COMPLETION_INDEX"]
restartPolicy: Never

3. وظيفة متوازية​

عدة Pods بالتوازي:

apiVersion: batch/v1
kind: Job
metadata:
name: parallel-job
spec:
completions: 10 # 10 Pods يجب أن تنجح
parallelism: 3 # 3 Pods بالتوازي
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["sh", "-c", "echo Processing && sleep 10"]
restartPolicy: Never

العملية:


مثال: معالجة البيانات​

وظيفة معالجة الدُفعات​

apiVersion: batch/v1
kind: Job
metadata:
name: data-processing
spec:
completions: 100 # معالجة 100 عنصر
parallelism: 10 # 10 عمال بالتوازي
backoffLimit: 3 # 3 محاولات كحد أقصى
template:
spec:
containers:
- name: processor
image: data-processor:1.0
env:
- name: JOB_COMPLETION_INDEX
valueFrom:
fieldRef:
fieldPath: metadata.labels['batch.kubernetes.io/job-completion-index']
- name: TOTAL_ITEMS
value: "100"
command:
- /app/process.sh
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1000m
memory: 1Gi
restartPolicy: Never

إدارة الإخفاقات​

حد المحاولات​

العدد الأقصى للمحاولات:

apiVersion: batch/v1
kind: Job
metadata:
name: retry-job
spec:
backoffLimit: 5 # 5 محاولات كحد أقصى
template:
spec:
containers:
- name: task
image: my-app:1.0
command: ["/app/run.sh"]
restartPolicy: Never

السلوك:

  • إذا فشل Pod، يتم إنشاء Pod جديد
  • تأخير أسي بين المحاولات
  • بعد backoffLimit من الإخفاقات، يتم وضع علامة على الوظيفة كفاشلة

الثواني النشطة للموعد النهائي​

مهلة للوظيفة:

apiVersion: batch/v1
kind: Job
metadata:
name: timeout-job
spec:
activeDeadlineSeconds: 300 # 5 دقائق كحد أقصى
template:
spec:
containers:
- name: task
image: my-app:1.0
restartPolicy: Never

النتيجة: يتم إلغاء الوظيفة بعد 5 دقائق.


مثال: النسخ الاحتياطي​

وظيفة النسخ الاحتياطي​

apiVersion: batch/v1
kind: Job
metadata:
name: database-backup
spec:
template:
spec:
containers:
- name: backup
image: postgres:14
command:
- /bin/bash
- -c
- |
pg_dump -h postgres-service -U postgres mydb > /backup/backup-$(date +%Y%m%d).sql
gzip /backup/backup-$(date +%Y%m%d).sql
aws s3 cp /backup/backup-$(date +%Y%m%d).sql.gz s3://backups/
env:
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: postgres-secret
key: password
volumeMounts:
- name: backup-storage
mountPath: /backup
volumes:
- name: backup-storage
emptyDir: {}
restartPolicy: Never

الأوامر المفيدة​

الإنشاء والإدارة​

# إنشاء وظيفة
kubectl apply -f job.yaml

# عرض الوظائف
kubectl get jobs

# التفاصيل
kubectl describe job data-processing

# عرض الـ Pods
kubectl get pods -l job-name=data-processing

# السجلات
kubectl logs -l job-name=data-processing

الحذف​

# حذف وظيفة (يحذف أيضًا الـ Pods)
kubectl delete job data-processing

# الحذف مع الـ Pods
kubectl delete job data-processing --cascade=foreground

عرض النتائج​

# عرض الحالة
kubectl get job data-processing -o yaml

# عرض الـ Pods المكتملة
kubectl get pods --field-selector=status.phase=Succeeded

الممارسات الجيدة​

1. RestartPolicy​

استخدام Never أو OnFailure، أبدًا Always.

2. الموارد​

تحديد حدود الموارد لتجنب الاستنزاف.

3. المهلات​

استخدام activeDeadlineSeconds لتجنب الوظائف التي تعمل بلا نهاية.

4. التنظيف​

حذف الوظائف المكتملة لتحرير الموارد.

5. المراقبة​

مراقبة الوظائف لاكتشاف الإخفاقات.


الملخص​

في هذا الفصل، تعلمت:

الوظيفة: مهمة مؤقتة تنشئ Pods حتى النجاح
الأنواع: بسيطة، مع الإكمالات، متوازية
الإكمالات: عدد النجاحات المطلوبة
التوازي: عدد الـ Pods بالتوازي
إدارة الإخفاقات: backoffLimit، activeDeadlineSeconds
حالات الاستخدام: معالجة الدُفعات، النسخ الاحتياطي، الترحيل
RestartPolicy: Never أو OnFailure
الممارسات الجيدة: الموارد، المهلات، التنظيف


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

الفصل 7.4: الوظائف المجدولة
المختبر 7.3: الوظائف والوظائف المجدولة


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