kubectl get all # نظرة عامةkubectl get pods -o wide # الـ Pods (IP، عقدة، حالة)kubectl get deployment demo-webkubectl get service demo-webkubectl describe deployment demo-web # تفاصيل + أحداثkubectl describe pod <nom-du-pod> # تفاصيل Pod (مسابير، صورة، أحداث)kubectl get pods --watch # متابعة التغييرات مباشرة (Ctrl+C للخروج)
4. اختبار توزيع الحمل
أعد تحميل http://localhost:30080 عدة مرات: اسم الـ Pod يتغيّر.
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> # سجلات Podkubectl logs -l app=demo-web --tail=20 # سجلات كل Pods الوسمkubectl exec -it <nom-du-pod> -- sh # فتح صدفة في الـ Podkubectl exec <nom-du-pod> -- env # رؤية متغيرات البيئة المحقونةkubectl port-forward svc/demo-web 8080:80 # الوصول إلى الخدمة عبر http://localhost:8080
# توسيع يدويkubectl scale deployment demo-web --replicas=5kubectl get pods # 5 Pods الآنkubectl scale deployment demo-web --replicas=3# تحديث تدريجي: غيّر APP_VERSION في ConfigMap ثمkubectl apply -f k8s/configmap.yamlkubectl rollout restart deployment demo-webkubectl rollout status deployment demo-web # يتابع النشر التدريجي# التاريخ والتراجعkubectl rollout history deployment demo-webkubectl rollout undo deployment demo-web # يعود إلى الإصدار السابق
8. الإصلاح التلقائي
powershell
kubectl get podskubectl delete pod <nom-du-pod> # نحذف واحداً يدوياًkubectl get pods --watch # يعيد Kubernetes إنشاء واحد تلقائياً
9. التنظيف
powershell
kubectl delete -f k8s/ # يحذف service + deployment + configmap# أو فردياً:kubectl delete service demo-webkubectl delete deployment demo-webkubectl delete configmap demo-config
الملحق أ — minikube / kind
إن لم تستخدم Kubernetes في Docker Desktop، الصورة المحلية غير ظاهرة للعنقود: يلزم تحميلها.
minikube :
powershell
minikube startminikube image load demo-k8s:1.0 # يجعل الصورة متاحة في العنقودkubectl apply -f k8s/minikube service demo-web --url # يحصل على عنوان الوصول
kind :
powershell
kind create clusterkind 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=.lastTimestampkubectl describe pod <nom-du-pod>
دورة من إعداد د. هيثم رحومة — تطوير ونشر حلول البيانات