Docker: أساسيات Kubernetes
آخر تحديث: 2026-08-26
⚠️ المتطلبات الموصى بها: يجب أن تأخذ هذا الدرس فقط إذا كنت في المواقف التالية:
- مثيل Docker واحد لم يعد قادرًا على التعامل مع حركة المرور
- يتطلب توسعًا تلقائيًا وشفاء ذاتيًا وتوفرًا عاليًا متعدد العقد
- قرر الفريق الهجرة إلى K8s
إذا كان Docker + Compose كافيًا لمشروعك، تخطَّ هذا الدرس وانتقل مباشرة إلى الدرس 24.
1. ما ستتعلمه
- البنية الأساسية والمفاهيم لـ K8s
- Pod / Deployment / Service — ثلاثة كائنات أساسية
- أوامر kubectl الشائعة
- نهج للهجرة من Compose إلى K8s
- إعداد مجموعة Minikube محلية
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) نظرة عامة على البنية
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 للتعلم.
📖 ملخص
- البنية الأساسية لـ K8s: API Server + etcd + Scheduler + Kubelet + Kube-proxy
- Pod (أصغر وحدة جدولة) ≈ Container، Deployment (إدارة النسخ) ≈ Compose replicas، Service (الشبكة) ≈ Docker DNS
- kubectl هي CLI لـ K8s، تعادل أمر docker
- minikube: ابدأ مجموعة K8s محلية بأمر واحد — مثالي للتعلم
- تكوين YAML التعريفي لـ K8s يقابل
docker-compose.ymlفي Compose - الهجرة من Docker إلى K8s: Compose service → Deployment + Service، Volume → PV/PVC، env → ConfigMap + Secret
📝 تمارين
- تمرين أساسي (الصعوبة: ⭐): استخدم minikube لبدء مجموعة K8s محلية، وانشر مثيل Nginx، واصل إليه عبر توجيه المنفذ.
- تمرين متقدم (الصعوبة: ⭐⭐): أنشئ Deployment و Service باستخدام ملف YAML، وانشر بـ
kubectl apply -f، واكشف المنافذ. - تحدٍ (الصعوبة: ⭐⭐⭐): نفذ تحديثًا متدرجًا (nginx: 1.25 ← 1.26)، ولاحظ
kubectl rollout status، ثم تراجع باستخدامkubectl rollout undo.