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

Scheduling و Autoscaling

عندما تنشئ Pod جديدا، scheduler يختار Node مناسب بناء على:

  • الموارد المطلوبة.
  • القيود مثل nodeSelector أو affinity.
  • taints و tolerations.
  • حالة Node.
nodeSelector:
disk: ssd

هذا يعني أن Pod يجب أن يعمل على Node عليها label disk=ssd.

Affinity طريقة أكثر مرونة من nodeSelector. تستخدم عندما تريد قواعد مثل:

  • شغل Pod قريب من Pods معينة.
  • ابعد Pod عن Pods معينة.
  • اختر Nodes عليها labels محددة.

Taint يوضع على Node ليمنع Pods عادية من العمل عليه. Toleration يوضع على Pod ليقول: “أنا أقبل هذا الـ taint”.

HPA يزيد أو يقلل عدد Pods حسب metrics مثل CPU.

Terminal window
kubectl autoscale deployment web --cpu-percent=60 --min=2 --max=10
kubectl get hpa

يحتاج HPA إلى Metrics Server حتى يعمل.

PDB يحمي التطبيق أثناء صيانة Nodes أو عمليات disruption.

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: web-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: web

Lab: إضافة HPA

المستوى: مبتدئ الوقت: 25 دقيقة الأدوات: kubectl, metrics-server

الهدف: إنشاء HPA لتطبيق web ومشاهدة الإعدادات.

Terminal window
kubectl autoscale deployment web --cpu-percent=60 --min=2 --max=10
kubectl get hpa
kubectl describe hpa web

لو ظهرت metrics كـ unknown، تأكد أن Metrics Server مثبت ويعمل.

تكون فاهم هذا الدرس عندما تعرف لماذا قد يبقى Pod في حالة Pending رغم أن YAML صحيح.