كلاود
أدلة

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

كلاود|٢٢ يناير ٢٠٢٦|4 دقائق قراءة|٤٧٧ مشاهدة
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 كامل عندما يحتاج تطبيقك ذلك.


ابدأ الآن

جاهز تبني مشروعك؟ اختر خادمك السحابي بالمواصفات اللي يحتاجها تطبيقك، أو راجع الباقات والأسعار.

مشاركة