Kubernetes وتنسيق الحاويات

الغوص العميق في معمارية Kubernetes

4 دقيقة للقراءة

فهم معمارية K8s ضروري لأي مقابلة DevOps/SRE. دعنا نستكشف كل مكون.

مكونات Control Plane

┌─────────────────── Control Plane ───────────────────┐
│                                                      │
│  ┌──────────────┐  ┌──────────────┐                │
│  │ kube-apiserver│  │    etcd      │                │
│  └──────────────┘  └──────────────┘                │
│                                                      │
│  ┌──────────────┐  ┌──────────────┐                │
│  │ kube-scheduler│ │kube-controller│                │
│  │               │  │   -manager   │                │
│  └──────────────┘  └──────────────┘                │
│                                                      │
└──────────────────────────────────────────────────────┘

kube-apiserver

الباب الأمامي لـ Kubernetes:

المسؤوليةالتفاصيل
نقطة APIكل اتصالات K8s تمر من خلاله
المصادقةيتحقق من هوية المستخدم/الخدمة
التفويضتطبيق سياسة RBAC
التحكم بالقبولwebhooks المعدلة والمتحققة
اتصال etcdالمكون الوحيد الذي يتحدث لـ etcd

etcd

مخزن مفتاح-قيمة موزع لجميع بيانات الكلستر:

# etcd يخزن كل شيء:
# - تعريفات Pod
# - تكوينات Service
# - الأسرار
# - ConfigMaps
# - حالة الكلستر

# تحقق من صحة etcd (إذا كان لديك وصول)
etcdctl endpoint health
etcdctl endpoint status

سؤال مقابلة: "ماذا يحدث إذا توقف etcd؟"

الجواب: الكلستر يصبح للقراءة فقط. أحمال العمل الجارية تستمر، لكن لا يمكن إجراء تغييرات. لهذا يجب أن يكون etcd عالي التوفر (عدد فردي من العقد: 3، 5، 7).

kube-scheduler

يقرر أي عقدة تشغل كل pod:

خطوات الجدولة:

  1. الترشيح: استبعاد العقد التي لا تستطيع تشغيل pod
    • موارد غير كافية
    • Node selectors لا تتطابق
    • Taints غير متحملة
  2. التقييم: ترتيب العقد المتبقية
    • توازن الموارد
    • Pod affinity/anti-affinity
    • قرب البيانات
  3. الربط: تعيين pod لأعلى عقدة تقييماً

kube-controller-manager

يشغل حلقات التحكم:

المتحكمما يُديره
Node Controllerصحة العقدة، الإخلاء
Deployment ControllerReplicaSets، التحديثات المتدرجة
ReplicaSet Controllerصيانة عدد Pod
Service Controllerتوفير LoadBalancer
Endpoints Controllerتحديثات نقاط نهاية Service

مكونات العقدة

┌─────────────────── Worker Node ─────────────────────┐
│                                                      │
│  ┌──────────────┐  ┌──────────────┐                │
│  │   kubelet    │  │  kube-proxy  │                │
│  └──────────────┘  └──────────────┘                │
│                                                      │
│  ┌──────────────────────────────────┐              │
│  │     Container Runtime (containerd)│              │
│  │  ┌─────┐ ┌─────┐ ┌─────┐        │              │
│  │  │ Pod │ │ Pod │ │ Pod │        │              │
│  │  └─────┘ └─────┘ └─────┘        │              │
│  └──────────────────────────────────┘              │
│                                                      │
└──────────────────────────────────────────────────────┘

kubelet

وكيل العقدة:

# مسؤوليات kubelet:
# - تسجيل العقدة مع الكلستر
# - مراقبة API لتعيينات pod
# - بدء/إيقاف الحاويات عبر CRI
# - الإبلاغ عن حالة العقدة وpod
# - تنفيذ فحوصات liveness/readiness

# تحقق من سجلات kubelet
journalctl -u kubelet -f

kube-proxy

وكيل الشبكة على كل عقدة:

الوضعكيف يعملحالة الاستخدام
iptablesيُنشئ قواعد iptablesالافتراضي، معظم الكلسترات
IPVSيستخدم IPVS النواةكلسترات واسعة النطاق
userspaceقديم، وكيل userspaceمُهمل
# تحقق من وضع kube-proxy
kubectl get configmap kube-proxy -n kube-system -o yaml | grep mode

تدفق طلب API

kubectl apply → API Server → المصادقة → التفويض
            متحكمات القبول (التعديل → التحقق)
                  etcd
            المتحكم يلاحظ التغيير
            المجدول يعين للعقدة
            kubelet على العقدة يبدأ pod

أسئلة المقابلة

س: "أرشدني خلال ما يحدث عند تشغيل kubectl create deployment nginx --image=nginx"

  1. kubectl يرسل POST إلى /apis/apps/v1/namespaces/default/deployments
  2. API server يُصادق (kubeconfig) ويُفوّض (RBAC)
  3. متحكمات القبول تعالج (تعديل، تحقق)
  4. كائن Deployment يُخزن في etcd
  5. متحكم Deployment يرى deployment جديد، يُنشئ ReplicaSet
  6. متحكم ReplicaSet يرى RS جديد، يُنشئ كائنات Pod
  7. المجدول يرى pods غير مجدولة، يعينها للعقد
  8. kubelet على العقدة الهدف يرى pod المعين
  9. kubelet يُخبر containerd بسحب الصورة وبدء الحاوية
  10. kubelet يُبلغ حالة pod إلى API server

س: "كيف يحقق Kubernetes التوفر العالي؟"

المكوناستراتيجية HA
etcdكلستر عدد فردي (3، 5، 7)، إجماع Raft
API serverنسخ متعددة خلف موازن حمل
المتحكماتانتخاب القائد (واحد نشط فقط)
المجدولانتخاب القائد (واحد نشط فقط)
العقدمتعددة، أحمال العمل موزعة

س: "ما الفرق بين Deployment وStatefulSet؟"

الميزةDeploymentStatefulSet
أسماء Podلاحقة عشوائيةمرتبة (pod-0، pod-1)
التوسعمتوازيتتابعي
التخزينمشترك أو لا شيءPVC لكل pod
هوية الشبكةعشوائيةأسماء DNS مستقرة
حالة الاستخدامتطبيقات عديمة الحالةقواعد البيانات، Kafka

التالي، سنغطي أحمال العمل والشبكات في Kubernetes. :::

مراجعة سريعة: كيف تجد هذا الدرس؟

اختبار

الوحدة 4: Kubernetes وتنسيق الحاويات

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.