StatefulSet و DaemonSet و Jobs
Deployment ليس كل شيء
Section titled “Deployment ليس كل شيء”Deployment ممتاز للتطبيقات stateless مثل APIs و frontends. لكن هناك حالات تحتاج أنواع أخرى.
StatefulSet
Section titled “StatefulSet”StatefulSet يستخدم عندما تحتاج Pods إلى هوية ثابتة وتخزين ثابت.
مناسب لـ:
- قواعد بيانات.
- أنظمة queue.
- تطبيقات تحتاج ترتيب ثابت أو اسم ثابت لكل نسخة.
db-0db-1db-2كل Pod يحتفظ باسمه وترتيبه.
DaemonSet
Section titled “DaemonSet”DaemonSet يشغل Pod على كل Node أو على مجموعة Nodes محددة.
أمثلة:
- Logging agent.
- Monitoring agent.
- Network plugin.
- Storage plugin.
Job يشغل مهمة حتى تنتهي بنجاح.
أمثلة:
- Database migration.
- Import data.
- Generate report.
apiVersion: batch/v1kind: Jobmetadata: name: hello-jobspec: template: spec: restartPolicy: Never containers: - name: hello image: busybox:1.36 command: ["sh", "-c", "echo hello from job"]CronJob
Section titled “CronJob”CronJob يشغل Job في أوقات محددة.
apiVersion: batch/v1kind: CronJobmetadata: name: hello-cronspec: schedule: "*/5 * * * *" jobTemplate: spec: template: spec: restartPolicy: Never containers: - name: hello image: busybox:1.36 command: ["sh", "-c", "date && echo backup"]Lab: تشغيل Job
الهدف: تنفيذ مهمة قصيرة ومشاهدة logs الخاصة بها.
kubectl apply -f job.yamlkubectl get jobskubectl get podskubectl logs job/hello-jobkubectl delete -f job.yamlمتى تختار كل نوع؟
Section titled “متى تختار كل نوع؟”| النوع | استخدمه عندما |
|---|---|
| Deployment | التطبيق stateless ويمكن استبدال أي نسخة |
| StatefulSet | كل نسخة لها هوية أو تخزين ثابت |
| DaemonSet | تحتاج Pod على كل Node |
| Job | مهمة تنتهي مرة واحدة |
| CronJob | مهمة متكررة بجدول |