ملخص الأوامر - Kubernetes

2 دقيقة

المشروع projet10-kubernetes-deploiements · كل الأوامر للتشغيل والاختبار والعمل مع العنقود.

جدول المحتويات


0. تفعيل Kubernetes (Docker Desktop)

Docker Desktop → Settings (⚙️) → Kubernetes → ✅ Enable Kubernetes → Apply & Restart.

powershell
kubectl get nodes                 # يجب أن يعرض docker-desktop  Ready
kubectl config current-context    # يجب أن يعرض docker-desktop
kubectl version --short

لا شيء آخر تثبّته: يأتي kubectl مع Docker Desktop.


1. بناء الصورة

من مجلد المشروع (projet10-kubernetes-deploiements):

powershell
docker build -t demo-k8s:1.0 ./app

مع Docker Desktop، الصورة المحلية ظاهرة مباشرة للعنقود (نفس عفريت Docker). لذلك يستخدم البيان imagePullPolicy: IfNotPresent.


2. نشر التطبيق

powershell
kubectl apply -f k8s/                 # يطبّق configmap + deployment + service

أو ملفاً بملف:

powershell
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml

ثم افتح المتصفح: http://localhost:30080


3. المراقبة (pods، services، deployments)

powershell
kubectl get all                       # نظرة عامة
kubectl get pods -o wide              # الـ Pods (IP، عقدة، حالة)
kubectl get deployment demo-web
kubectl get service demo-web
kubectl describe deployment demo-web  # تفاصيل + أحداث
kubectl describe pod <nom-du-pod>     # تفاصيل Pod (مسابير، صورة، أحداث)
kubectl get pods --watch             # متابعة التغييرات مباشرة (Ctrl+C للخروج)

4. اختبار توزيع الحمل

أعد تحميل http://localhost:30080 عدة مرات: اسم الـ Pod يتغيّر.

من سطر الأوامر (PowerShell):

powershell
1..10 | ForEach-Object { (Invoke-WebRequest -Headers @{Accept="application/json"} http://localhost:30080).Content }

في bash:

bash
for i in $(seq 1 10); do curl -s -H "Accept: application/json" http://localhost:30080; echo; done

5. العمل على Pod (exec، logs، port-forward)

powershell
kubectl logs <nom-du-pod>                      # سجلات Pod
kubectl logs -l app=demo-web --tail=20        # سجلات كل Pods الوسم
kubectl exec -it <nom-du-pod> -- sh           # فتح صدفة في الـ Pod
kubectl exec <nom-du-pod> -- env              # رؤية متغيرات البيئة المحقونة
kubectl port-forward svc/demo-web 8080:80     # الوصول إلى الخدمة عبر http://localhost:8080

6. تغيير الضبط (ConfigMap / الخلفية)

  1. حرّر k8s/configmap.yaml (مثلاً BG_COLOR: "#7c3aed").
  2. أعد التطبيق ثم أعد تشغيل الـ Pods لإعادة تحميل المتغيرات:
powershell
kubectl apply -f k8s/configmap.yaml
kubectl rollout restart deployment demo-web
kubectl rollout status deployment demo-web
  1. أعد تحميل الصفحة: تغيّرت الخلفية.

رؤية القيمة النشطة في Pod:

powershell
kubectl exec <nom-du-pod> -- env | Select-String BG_COLOR

7. التوسيع والتحديث التدريجي والتراجع

powershell
# توسيع يدوي
kubectl scale deployment demo-web --replicas=5
kubectl get pods                              # 5 Pods الآن
kubectl scale deployment demo-web --replicas=3

# تحديث تدريجي: غيّر APP_VERSION في ConfigMap ثم
kubectl apply -f k8s/configmap.yaml
kubectl rollout restart deployment demo-web
kubectl rollout status deployment demo-web    # يتابع النشر التدريجي

# التاريخ والتراجع
kubectl rollout history deployment demo-web
kubectl rollout undo deployment demo-web      # يعود إلى الإصدار السابق

8. الإصلاح التلقائي

powershell
kubectl get pods
kubectl delete pod <nom-du-pod>               # نحذف واحداً يدوياً
kubectl get pods --watch                      # يعيد Kubernetes إنشاء واحد تلقائياً

9. التنظيف

powershell
kubectl delete -f k8s/                        # يحذف service + deployment + configmap
# أو فردياً:
kubectl delete service demo-web
kubectl delete deployment demo-web
kubectl delete configmap demo-config

الملحق أ — minikube / kind

إن لم تستخدم Kubernetes في Docker Desktop، الصورة المحلية غير ظاهرة للعنقود: يلزم تحميلها.

minikube :

powershell
minikube start
minikube image load demo-k8s:1.0             # يجعل الصورة متاحة في العنقود
kubectl apply -f k8s/
minikube service demo-web --url              # يحصل على عنوان الوصول

kind :

powershell
kind create cluster
kind load docker-image demo-k8s:1.0          # يحمّل الصورة في العنقود
kubectl apply -f k8s/
kubectl port-forward svc/demo-web 8080:80    # http://localhost:8080

الملحق ب — استكشاف الأخطاء

العَرَضالسبب المحتملالحل
ErrImagePull / ImagePullBackOffالعنقود لا يجد الصورةتحقق من imagePullPolicy: IfNotPresent + الصورة demo-k8s:1.0 مبنية؛ في minikube/kind حمّل الصورة (الملحق أ)
Pod في CrashLoopBackOffالتطبيق يتعطل عند التشغيلkubectl logs <pod> لقراءة الخطأ
Pod Pendingموارد غير كافيةkubectl describe pod <pod> (قسم Events)
localhost:30080 غير متاحالخدمة غير منشأة / منفذ خاطئkubectl get svc؛ وإلا kubectl port-forward svc/demo-web 8080:80
kubectl لا يجيبسياق خاطئkubectl config use-context docker-desktop
مسبار يفشل/health غير قابل للوصولتحقق من المنفذ 5000 والمسار /health
powershell
# تشخيص سريع
kubectl get events --sort-by=.lastTimestamp
kubectl describe pod <nom-du-pod>

دورة من إعداد د. هيثم رحومة — تطوير ونشر حلول البيانات