الفصل 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