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

الفصل 2.5 - المجدول

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

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

  • فهم دور المجدول
  • شرح عملية التخطيط
  • فهم الفلاتر والنقاط
  • تحديد قيود التخطيط

ما هو المجدول؟​

المجدول (Scheduler) (kube-scheduler) مسؤول عن تعيين الـ Pods غير المخطط لها إلى الـ nodes المناسبة في العنقود. يأخذ في الاعتبار قيود الموارد، التآلفات، والسياسات.


عملية التخطيط​

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

1. التصفية (Filtering)​

يتم استبعاد الـ nodes التي لا يمكنها تشغيل الـ Pod:

  • المسند 1: موارد كافية (CPU، ذاكرة)
  • المسند 2: احترام التآلفات/التنافرات
  • المسند 3: البقع والتحملات
  • المسند 4: محددات الـ node

2. التسجيل (Prioritization)​

تقييم كل node مؤهل (0-10):

  • الأولوية 1: توازن الموارد
  • الأولوية 2: التآلف مع الـ Pods الأخرى
  • الأولوية 3: محلية البيانات
  • الأولوية 4: تفضيلات المستخدم

3. الاختيار​

يتم اختيار الـ node الذي لديه أعلى درجة.


مثال على التخطيط​

السيناريو​

apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: app
image: nginx
resources:
requests:
cpu: "500m"
memory: "512Mi"

العملية​


قيود التخطيط​

1. الموارد (Requests/Limits)​

resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"

يتحقق المجدول من أن الـ node لديه موارد كافية متاحة.

2. محددات الـ Node​

spec:
nodeSelector:
disktype: ssd
zone: us-east-1a

سيتم تخطيط الـ Pod فقط على الـ nodes التي تحتوي على هذه التسميات.

3. التآلفات (Affinity)​

affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: zone
operator: In
values:
- us-east-1a

4. البقع والتحملات​

# بقعة على الـ node
kubectl taint nodes node1 key=value:NoSchedule

# تحمل في الـ Pod
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"

استراتيجيات التخطيط​

توازن الموارد​

يحاول المجدول توازن الحمل بين الـ nodes:

تفضيلات المحلية​

يفضل المجدول تخطيط الـ Pods بالقرب من بياناتها (تآلف المنطقة).


مجدول مخصص​

يمكنك إنشاء مجدول خاص بك لاحتياجات محددة:

apiVersion: v1
kind: Pod
spec:
schedulerName: my-custom-scheduler
containers:
- name: app
image: nginx

أوامر مفيدة​

# عرض سجلات المجدول
kubectl logs -n kube-system kube-scheduler-<node>

# معرفة سبب عدم تخطيط Pod
kubectl describe pod <pod-name>

# عرض أحداث التخطيط
kubectl get events --field-selector involvedObject.name=<pod-name>

ملخص​

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

المجدول: يعين الـ Pods إلى الـ nodes المناسبة
العملية: التصفية → التسجيل → الاختيار → الربط
القيود: الموارد، المحددات، التآلفات، البقع
التوازن: التوزيع الأمثل للحمل
التخصيص: إمكانية وجود مجدولات مخصصة


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

الآن بعد أن فهمت المجدول:

الفصل 2.6: kubelet - وكيل الـ Worker Nodes
الفصل 2.7: kube-proxy


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