Scheduling و Autoscaling
Scheduling ببساطة
Section titled “Scheduling ببساطة”عندما تنشئ Pod جديدا، scheduler يختار Node مناسب بناء على:
- الموارد المطلوبة.
- القيود مثل nodeSelector أو affinity.
- taints و tolerations.
- حالة Node.
nodeSelector
Section titled “nodeSelector”nodeSelector: disk: ssdهذا يعني أن Pod يجب أن يعمل على Node عليها label disk=ssd.
Affinity
Section titled “Affinity”Affinity طريقة أكثر مرونة من nodeSelector. تستخدم عندما تريد قواعد مثل:
- شغل Pod قريب من Pods معينة.
- ابعد Pod عن Pods معينة.
- اختر Nodes عليها labels محددة.
Taints و Tolerations
Section titled “Taints و Tolerations”Taint يوضع على Node ليمنع Pods عادية من العمل عليه. Toleration يوضع على Pod ليقول: “أنا أقبل هذا الـ taint”.
Horizontal Pod Autoscaler
Section titled “Horizontal Pod Autoscaler”HPA يزيد أو يقلل عدد Pods حسب metrics مثل CPU.
kubectl autoscale deployment web --cpu-percent=60 --min=2 --max=10kubectl get hpaيحتاج HPA إلى Metrics Server حتى يعمل.
PodDisruptionBudget
Section titled “PodDisruptionBudget”PDB يحمي التطبيق أثناء صيانة Nodes أو عمليات disruption.
apiVersion: policy/v1kind: PodDisruptionBudgetmetadata: name: web-pdbspec: minAvailable: 2 selector: matchLabels: app: webLab: إضافة HPA
الهدف: إنشاء HPA لتطبيق web ومشاهدة الإعدادات.
kubectl autoscale deployment web --cpu-percent=60 --min=2 --max=10kubectl get hpakubectl describe hpa webلو ظهرت metrics كـ unknown، تأكد أن Metrics Server مثبت ويعمل.
معيار الإتقان
Section titled “معيار الإتقان”تكون فاهم هذا الدرس عندما تعرف لماذا قد يبقى Pod في حالة Pending رغم أن YAML صحيح.