Kubernetes للمبتدئين: ايش هو ومتى تحتاجه

Kubernetes يدير containers على نطاق واسع. لكن مو للكل. نشرح المفهوم ومتى يكون الحل المناسب — ومتى Docker Compose يكفي.
ما هو Kubernetes؟
Kubernetes (يُختصر K8s) نظام مفتوح المصدر لإدارة الحاويات (containers) تلقائياً. طوّرته Google ثم أصبح مشروعاً مستقلاً تحت مؤسسة CNCF. إذا كان Docker يبني ويشغّل حاوية واحدة، فإن Kubernetes يدير عشرات أو مئات الحاويات — يوزّعها على السيرفرات، يعيد تشغيلها عند السقوط، ويوسّعها عند ارتفاع الحمل.
متى تحتاج Kubernetes؟
- تطبيقك يتكون من عدة خدمات مصغّرة (Microservices)
- تحتاج توسّع تلقائي حسب الحمل
- تحتاج نشر بدون توقف (Zero-Downtime Deployment)
- تدير أكثر من 10 حاويات
متى لا تحتاجه؟
- تطبيق واحد بسيط — Docker Compose يكفي
- فريق صغير بدون خبرة في إدارة البنية التحتية
- ميزانية محدودة — Kubernetes يحتاج موارد إضافية للـ Control Plane
المكونات الأساسية
الـ Cluster
┌─────────────────────────────────────────────┐
│ Cluster │
│ │
│ ┌──────────────────────┐ │
│ │ Control Plane │ │
│ │ ┌─────────────────┐ │ │
│ │ │ API Server │ │ │
│ │ │ Scheduler │ │ │
│ │ │ Controller Mgr │ │ │
│ │ │ etcd │ │ │
│ │ └─────────────────┘ │ │
│ └──────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Node 1 │ │ Node 2 │ │ Node 3 │ │
│ │ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ │ │
│ │ │ Pod │ │ │ │ Pod │ │ │ │ Pod │ │ │
│ │ │ Pod │ │ │ │ Pod │ │ │ │ Pod │ │ │
│ │ └──────┘ │ │ └──────┘ │ │ └──────┘ │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────┘
المصطلحات الأساسية
| المصطلح | الوصف |
|---|---|
| Cluster | مجموعة السيرفرات التي يديرها Kubernetes |
| Node | سيرفر واحد داخل الـ Cluster |
| Pod | أصغر وحدة — حاوية واحدة أو أكثر تعمل معاً |
| Deployment | يصف كم Pod تريد وكيف يعمل |
| Service | يوفر عنوان ثابت للوصول إلى مجموعة Pods |
| Namespace | تقسيم منطقي داخل الـ Cluster |
| ConfigMap | إعدادات التطبيق (غير حساسة) |
| Secret | بيانات حساسة مشفرة (كلمات مرور، مفاتيح) |
تثبيت بيئة تطوير محلية
minikube (للتعلم والتجربة)
# تثبيت على Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# تشغيل Cluster محلي
minikube start --driver=docker
# التحقق
kubectl cluster-info
kubectl get nodes
kubectl (أداة سطر الأوامر)
# تثبيت
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/kubectl
# التحقق
kubectl version --client
أول Deployment
ملف Deployment
# ملف: deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: my-laravel-app:1.0
ports:
- containerPort: 9000
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
env:
- name: APP_ENV
value: "production"
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: app-config
key: db-host
ملف Service
# ملف: service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9000
type: LoadBalancer
التطبيق
# نشر التطبيق
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# عرض الحالة
kubectl get deployments
kubectl get pods
kubectl get services
# تفاصيل Pod معين
kubectl describe pod my-app-xxxxx
# سجلات Pod
kubectl logs my-app-xxxxx
kubectl logs -f my-app-xxxxx # متابعة مباشرة
ConfigMaps و Secrets
# ملف: configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
db-host: "mysql-service"
cache-driver: "redis"
app-url: "https://example.com"
# إنشاء Secret
kubectl create secret generic app-secrets \
--from-literal=db-password=my_secure_password \
--from-literal=redis-password=redis_secure_pass
# أو من ملف
kubectl create secret generic app-secrets --from-file=.env
التوسّع (Scaling)
# توسّع يدوي
kubectl scale deployment my-app --replicas=5
# توسّع تلقائي حسب استخدام المعالج
kubectl autoscale deployment my-app --min=2 --max=10 --cpu-percent=70
ملف HorizontalPodAutoscaler
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
التحديث والتراجع
# تحديث صورة التطبيق
kubectl set image deployment/my-app app=my-laravel-app:2.0
# مراقبة حالة التحديث
kubectl rollout status deployment/my-app
# التراجع عن آخر تحديث
kubectl rollout undo deployment/my-app
# عرض تاريخ التحديثات
kubectl rollout history deployment/my-app
أوامر مفيدة
# الدخول داخل Pod
kubectl exec -it my-app-xxxxx -- bash
# نسخ ملف من/إلى Pod
kubectl cp my-app-xxxxx:/var/log/app.log ./app.log
# عرض الأحداث
kubectl get events --sort-by=.metadata.creationTimestamp
# حذف كل الموارد من ملف
kubectl delete -f deployment.yaml
Kubernetes وكلاود
لتشغيل Kubernetes في بيئة الإنتاج تحتاج على الأقل 3 سيرفرات — واحد لـ Control Plane واثنان كـ Workers. مع كلاود (cloud.net.sa)، تقدر تطلب عدة سيرفرات VPS في الرياض بشبكة داخلية سريعة وتبني Cluster خاص بك بالكامل.
ابدأ بـ minikube على سيرفر تطوير من كلاود وتعلّم الأساسيات، ثم وسّع لـ Cluster كامل عندما يحتاج تطبيقك ذلك.
ابدأ الآن
جاهز تبني مشروعك؟ اختر خادمك السحابي بالمواصفات اللي يحتاجها تطبيقك، أو راجع الباقات والأسعار.
