June 28, 2026
مين اللي بيشغل الـ API Server لو الـ API Server نفسه لسه واقع؟ 🤔
مين اللي بيشغل الـ API Server لو الـ API Server نفسه لسه واقع؟ 🤔 هنتكلم في البوست ده عن الـ Static Pods أكتر.

في Kubernetes كلنا عارفين إن الـ API Server هو المدير، بتبعتله command بـ kubectl يروح يسجل في الـ etcd وبعدين يكلم الـ kubelet عشان يكريت الـ Pod.
هنا بتظهر فزورة البيضة والفرخة:
مكونات الـ Control Plane نفسها زي kube-apiserver و etcd و kube-scheduler عبارة عن Pods!
مين اللي هيكريت الـ Pods دي أول مرة لو المدير نفسه لسه مش موجود عشان يستقبل الأوامر؟
هنا بييجي دور الـ Static Pods! 🦸♂️
1️⃣ يعني إيه Static Pod؟
دي Pods استثنائية جداً مابتتعملش عن طريق الـ API Server خالص، الـ kubelet اللي شغال كـ Service على نظام التشغيل نفسه هو اللي بيكريتها وبيديرها بنفسه بشكل مباشر ومستقل تماماً عن باقي الكلاستر.
2️⃣ بتشتغل إزاي؟
الـ kubelet بيكون متبرمج إنه يراقب فولدر معين على السيرفر/الـ Node. أول ما تحط أي ملف YAML جوه الفولدر ده الـ kubelet بياخده ويكريت منه Pod فوراً ولو مسحت الفايل هيمسح الـ Pod.
الـ Default Path 📂 ده هو:
/etc/kubernetes/manifests/
علشان كده Tool زي kubeadm أول ما بتيجي تسطب الكلاستر كل اللي بتعمله إنها بترمي ملفات الـ YAML بتاعة الـ Control Plane جوه الفولدر ده والـ kubelet بيقوم بالباقي والكلاستر بيصحى!
3️⃣ الـ Troubleshooting:
تخيل إنك بتكتب kubectl get pods فطلعلك الإيرور ده:
The connection to the server <ip>:6443 was refused
ده معناه إن الـ API Server واقع، طيب هتحل المشكلة إزاي وإنت أصلاً مش قادر تستخدم kubectl؟
المفروض هتتصرف كالتالي: هتعمل SSH وتدخل على الـ Master Node نفسها.
هتروح تراجع الفايل في الـ Default Path:
cat /etc/kubernetes/manifests/kube-apiserver.yaml
غالباً هتلاقي Typo في الـ Configurations زي حرف ناقص أو Path غلط، بمجرد ما تصلحه وتعمل Save الـ kubelet هيعمل Restart للـ Pod لوحده في ثواني.
طيب لو الفايل سليم بس الـ Pod مش قايم مستحيل تستخدم kubectl logs وهنا لازم تنزل لمستوى الـ Container Runtime وتسأله عن:
crictl ps -a (عشان تجيب الـ Container ID)
crictl logs <container-id>
علشان تشوف الـ logs الخاصة بالـ Container لو فيها أي إيرور.
أو تراجع الـ kubelet نفسه عشان تشوف لو واجه مشكلة وهو بيقرأ الفايل:
journalctl -u kubelet
💡 طب إزاي بتشوف الـ Static Pods لما بنكتب kubectl get pods مع إن الـ API Server مش هو اللي مكريتها؟
الـ kubelet بيعمل حركة ذكية اسمها Mirror Pod بيكريت نسخة وهمية Read-only بيبعتها للـ API Server عشان بس تظهر على الشاشة وتقدر تشوف حالتها، لكن لو حد حاول يمسحها بـ kubectl delete مش هتتمسح وهترجع تاني الطريقة الوحيدة لمسحها هي إننا نمسح الـ YAML فايل من الفولدر.