تخطَّ إلى المحتوى

StatefulSet و DaemonSet و Jobs

Deployment ممتاز للتطبيقات stateless مثل APIs و frontends. لكن هناك حالات تحتاج أنواع أخرى.

StatefulSet يستخدم عندما تحتاج Pods إلى هوية ثابتة وتخزين ثابت.

مناسب لـ:

  • قواعد بيانات.
  • أنظمة queue.
  • تطبيقات تحتاج ترتيب ثابت أو اسم ثابت لكل نسخة.
db-0
db-1
db-2

كل Pod يحتفظ باسمه وترتيبه.

DaemonSet يشغل Pod على كل Node أو على مجموعة Nodes محددة.

أمثلة:

  • Logging agent.
  • Monitoring agent.
  • Network plugin.
  • Storage plugin.

Job يشغل مهمة حتى تنتهي بنجاح.

أمثلة:

  • Database migration.
  • Import data.
  • Generate report.
apiVersion: batch/v1
kind: Job
metadata:
name: hello-job
spec:
template:
spec:
restartPolicy: Never
containers:
- name: hello
image: busybox:1.36
command: ["sh", "-c", "echo hello from job"]

CronJob يشغل Job في أوقات محددة.

apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cron
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: hello
image: busybox:1.36
command: ["sh", "-c", "date && echo backup"]

Lab: تشغيل Job

المستوى: مبتدئ الوقت: 20 دقيقة الأدوات: kubectl

الهدف: تنفيذ مهمة قصيرة ومشاهدة logs الخاصة بها.

Terminal window
kubectl apply -f job.yaml
kubectl get jobs
kubectl get pods
kubectl logs job/hello-job
kubectl delete -f job.yaml
النوعاستخدمه عندما
Deploymentالتطبيق stateless ويمكن استبدال أي نسخة
StatefulSetكل نسخة لها هوية أو تخزين ثابت
DaemonSetتحتاج Pod على كل Node
Jobمهمة تنتهي مرة واحدة
CronJobمهمة متكررة بجدول