Docker: أساسيات Kubernetes

آخر تحديث: 2026-08-26

⚠️ المتطلبات الموصى بها: يجب أن تأخذ هذا الدرس فقط إذا كنت في المواقف التالية:

  • مثيل Docker واحد لم يعد قادرًا على التعامل مع حركة المرور
  • يتطلب توسعًا تلقائيًا وشفاء ذاتيًا وتوفرًا عاليًا متعدد العقد
  • قرر الفريق الهجرة إلى K8s

إذا كان Docker + Compose كافيًا لمشروعك، تخطَّ هذا الدرس وانتقل مباشرة إلى الدرس 24.

1. ما ستتعلمه



2. قصة توسيع مجموعة

(1) نقطة الألم: Swarm لم يعد كافيًا

مجموعة Swarm التي نشرتها أليس لم تعد كافية — خمس نسخ لا يمكنها التعامل مع حركة المرور، التحديثات المتدرجة لم تكن مرنة بما يكفي، لم يكن هناك توسع تلقائي، وكانت إدارة التكوين غير كافية. قرر الفريق الهجرة إلى Kubernetes، لكن أليس كانت تائهة تمامًا مع مفاهيم K8s Pods و Deployments و Services.

(2) حل تعلم minikube محليًا

أعد بوب بيئة تطوير K8s باستخدام minikube على حاسوب أليس المحمول.

BASH
# بدء مجموعة K8s محلية
minikube start --driver=docker

# نشر تطبيق
kubectl create deployment nginx --image=nginx:1.25-alpine --replicas=3
kubectl expose deployment nginx --port=80 --type=NodePort

(3) الفوائد: فهم المفاهيم الأساسية لـ K8s في 5 دقائق

اكتشفت أليس أن Pods في K8s وحاويات Docker بينهما تشابهات كثيرة: Deployment يقابل replicas في Compose، و Service يقابل الشبكة وتعيين المنافذ في Docker.



3. البنية الأساسية لـ K8s

(1) نظرة عامة على البنية

100%
graph TB
    K["kubectl CLI"] --> API["API Server<br/>مدخل REST API"]
    API --> SCHED["Scheduler<br/>جدولة Pods"]
    API --> ETCD["etcd<br/>تخزين حالة المجموعة"]
    API --> CTRL["Controller Manager<br/>Deployment/ReplicaSet"]
    API --> KUBELET["Kubelet<br/>وكيل العقدة"]
    KUBELET --> CRI["Container Runtime<br/>containerd/Docker"]
    CRI --> POD["Pod<br/>مجموعة حاويات"]

(2) مكونات K8s الأساسية

المكون الوظيفة التشبيه مع Docker
API Server نقطة دخول API للمجموعة Docker Daemon API
etcd تخزين الحالة حالة Docker الداخلية
Scheduler جدولة Pods Swarm Scheduler
Kubelet وكيل العقدة Docker Daemon (عقدة واحدة)
Kube-proxy وكيل الشبكة Docker Routing Mesh


4. المفاهيم الأساسية لـ K8s

(1) Pod / Deployment / Service

مفهوم K8s الغرض التشبيه مع Docker
Pod أصغر وحدة جدولة (حاوية واحدة أو أكثر) Container (لكن قد يحتوي على عدة)
Deployment إدارة تعريفية للنسخ Compose replicas + restart
Service معرفات شبكة مستقرة + موازنة حمل Docker DNS + Routing Mesh
Ingress مسار دخول HTTP Nginx reverse proxy
ConfigMap إدارة التكوين متغيرات البيئة / env_file
Secret معلومات حساسة Docker Secret
PV/PVC تخزين دائم Named Volume

(2) خريطة مفاهيم Docker Compose ← K8s

Docker Compose Kubernetes الوصف
service Deployment + Service تعريف الخدمة
replicas Deployment.spec.replicas عدد النسخ
ports Service.spec.ports تعيين المنافذ
environment ConfigMap + Secret إدارة التكوين
depends_on initContainers / بدء متسلسل التحكم في التبعيات
healthcheck livenessProbe + readinessProbe فحص الصحة


5. أوامر kubectl الشائعة

▶ مثال: بدء مجموعة بـ minikube (الصعوبة: ⭐⭐)

BASH
# بدء مجموعة K8s محلية
minikube start --driver=docker --kubernetes-version=v1.28.0

# التحقق من حالة المجموعة
kubectl cluster-info
kubectl get nodes
💻 المخرجات:

TEXT 📖 للعرض فقط
Kubernetes control plane is running at https://127.0.0.1:32768
CoreDNS is running at https://127.0.0.1:32768/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   60s   v1.28.0

▶ مثال: kubectl create deployment (الصعوبة: ⭐⭐)

BASH
# إنشاء deployment بـ 3 نسخ
kubectl create deployment nginx --image=nginx:1.25-alpine --replicas=3

# التحقق من حالة deployment
kubectl get deployments
kubectl get pods
💻 المخرجات:

TEXT 📖 للعرض فقط
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            3           30s

NAME                     READY   STATUS    RESTARTS   AGE
nginx-6c8b5f4d8f-abc12   1/1     Running   0          30s
nginx-6c8b5f4d8f-def34   1/1     Running   0          30s
nginx-6c8b5f4d8f-ghi56   1/1     Running   0          30s

▶ مثال: kubectl expose service (الصعوبة: ⭐⭐)

BASH
# كشف deployment كخدمة
kubectl expose deployment nginx --port=80 --type=NodePort

# الحصول على رابط الخدمة
minikube service nginx --url

# أو استخدام توجيه المنفذ للوصول المحلي
kubectl port-forward svc/nginx 8080:80

▶ مثال: التوسع بـ kubectl scale (الصعوبة: ⭐⭐)

BASH
# التوسع إلى 5 نسخ
kubectl scale deployment nginx --replicas=5

# التحقق
kubectl get pods

▶ مثال: kubectl rollout (الصعوبة: ⭐⭐⭐)

BASH
# تحديث الصورة
kubectl set image deployment/nginx nginx=nginx:1.26-alpine

# التحقق من حالة التحديث المتدرج
kubectl rollout status deployment/nginx

# التراجع إذا حدث خطأ
kubectl rollout undo deployment/nginx

# عرض سجل التحديثات المتدرجة
kubectl rollout history deployment/nginx


6. التكوين التعريفي YAML

(1) Deployment + Service YAML

YAML
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25-alpine
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: "0.5"
            memory: "128Mi"
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: NodePort
BASH
# تطبيق YAML
kubectl apply -f nginx-deployment.yaml

# التحقق
kubectl get all


7. K8s بعقدة واحدة مقابل متعدد العقد

البُعد minikube kind مجموعة إنتاج
عدد العقد 1 1+ 3+
الغرض التعلم/التطوير اختبار CI الإنتاج
التثبيت minikube start kind create cluster kubeadm / خدمة سحابية
التوفر العالي
التوسع التلقائي ✅ (HPA)


8. مثال كامل: نشر تطبيق بـ minikube

BASH
# ============================================
# شرح كامل: K8s على minikube
# يغطي: cluster, deploy, service, scale, update
# ============================================

# 1. بدء مجموعة minikube
minikube start --driver=docker

# 2. إنشاء deployment
kubectl create deployment web --image=nginx:1.25-alpine --replicas=2

# 3. كشف كخدمة
kubectl expose deployment web --port=80 --type=NodePort

# 4. الوصول إلى التطبيق
minikube service web --url
# أو: kubectl port-forward svc/web 8080:80

# 5. التوسع إلى 5 نسخ
kubectl scale deployment web --replicas=5
kubectl get pods -w

# 6. تحديث متدرج
kubectl set image deployment/web nginx=nginx:1.26-alpine
kubectl rollout status deployment/web

# 7. التراجع
kubectl rollout undo deployment/web

# 8. التنظيف
kubectl delete deployment web
kubectl delete service web
minikube stop

❓ أسئلة شائعة

س أيهما أختار، K8s أم Docker Swarm؟
ج Swarm بسيط وسهل التعلم، مناسب للفرق الصغيرة (<20 شخصًا) وحالات الاستخدام البسيطة. K8s قوي لكنه معقد، مناسب للفرق الكبيرة والسيناريوهات التي تتطلب توسعًا تلقائيًا ونظامًا بيئيًا قويًا. قاعدة عامة: استخدم Swarm لـ 3-5 عقد على جهاز واحد؛ استخدم K8s لـ 5 عقد أو أكثر أو عند الحاجة إلى ميزات متقدمة.
س ما الفرق بين Pod و Container؟
ج Pod هو أصغر وحدة جدولة في K8s ويمكن أن يحتوي على حاوية واحدة أو أكثر. الحاويات داخل Pod تشارك الشبكة والتخزين. معظم Pods تحتوي على حاوية واحدة فقط — في هذه الحالة، Pod يعادل تقريبًا Container. Pods متعددة الحاويات تُستخدم في السيناريوهات المترابطة بشدة (مثل تطبيق و sidecar proxy).
س كم عدد الخوادم التي يتطلبها K8s؟
ج للتعلم: خادم واحد (Minikube). للتطوير: 1-3 خوادم. للإنتاج: 3+ عقد Master + N عقد Worker. مع خدمات K8s المدارة من مزودي السحابة (EKS/GKE/AKS)، لا تحتاج لإدارة عقد Master؛ عقدة Worker واحدة كحد أدنى كافية.
س هل يجب أن أتعلم K8s مباشرة من Compose؟
ج أوصي بإتقان Docker + Compose أولاً (الدروس 1-22 من هذه الدورة) قبل الانتقال إلى K8s. Compose يغطي 80% من حالات الاستخدام؛ K8s مطلوب فقط عندما تحتاج إلى مجموعة. إذا قفزت مباشرة إلى K8s، فمن المحتمل أن تغرق في المفاهيم — افهم أولاً أساسيات الحاويات والتنسيق، ثم تعلم تجريدات K8s.
س أيهما أفضل للتعلم — minikube أم kind؟
ج minikube يقدم ميزات أكثر (Dashboard، إضافات، محركات متعددة) وهو أكثر ملاءمة للمبتدئين. kind (Kubernetes in Docker) أخف وزنًا ويبدأ أسرع، مثالي لـ CI واختبار المجموعات المتعددة. نوصي بـ minikube للتعلم.

📖 ملخص


📝 تمارين

  1. تمرين أساسي (الصعوبة: ⭐): استخدم minikube لبدء مجموعة K8s محلية، وانشر مثيل Nginx، واصل إليه عبر توجيه المنفذ.
  2. تمرين متقدم (الصعوبة: ⭐⭐): أنشئ Deployment و Service باستخدام ملف YAML، وانشر بـ kubectl apply -f، واكشف المنافذ.
  3. تحدٍ (الصعوبة: ⭐⭐⭐): نفذ تحديثًا متدرجًا (nginx: 1.25 ← 1.26)، ولاحظ kubectl rollout status، ثم تراجع باستخدام kubectl rollout undo.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%