المشروع projet11-kubernetes-services · كل الأوامر للنشر والعرض واختبار الخدمات.
من مجلد المشروع (projet11-kubernetes-services):
kubectl config use-context docker-desktop
docker build -t demo-k8s:1.0 ./app # (إن لم تُبنَ بعد في المشروع 10)
kubectl apply -f k8s/ # deployment + 3 خدمات
kubectl get pods # 3 Pods Runningkubectl get svc # TYPE، CLUSTER-IP، EXTERNAL-IP، PORT(S)
kubectl get svc -o wide
kubectl describe svc demo-clusterip # تفاصيل + Endpointsقراءة kubectl get svc:
| العمود | المعنى |
|---|---|
TYPE | ClusterIP / NodePort / LoadBalancer |
CLUSTER-IP | IP داخلي (حاضر دائماً) |
EXTERNAL-IP | IP خارجي (LoadBalancer) أو <none> |
PORT(S) | port الخدمة (و :nodePort لـ NodePort) |
ClusterIP غير قابل للوصول من المضيف: يُستدعى من Pod، باسمه.
# Pod عميل يُرمى (--rm : يُحذف عند الخروج)
kubectl run client --rm -it --image=curlimages/curl -- shثم، في صدفة الـ Pod:
curl http://demo-clusterip # استدعاء بالاسم (يحله CoreDNS)
curl http://demo-clusterip # أعد التشغيل: يتغيّر اسم الـ Pod
exitاختبار حل DNS:
kubectl run dnstest --rm -it --image=busybox:1.36 -- sh
# في الـ Pod:
nslookup demo-clusterip
wget -qO- http://demo-clusteripkubectl get svc demo-nodeport
# افتح في المتصفح:
start http://localhost:30082
# أو اختبر من سطر الأوامر:
curl http://localhost:30082kubectl get svc demo-lb # يجب أن يصير EXTERNAL-IP "localhost"
start http://localhost:8090
curl http://localhost:8090إن بقي
EXTERNAL-IPعلى<pending>، انتظر بضع ثوانٍ (يوفّر Docker Desktop الـ LB). في عنقود kind يبقى نوع LoadBalancer على<pending>بلا MetalLB: استخدمkubectl port-forward(انظر الملحق).
kubectl get endpoints demo-clusterip # عناوين IP للـ Pods خلف الخدمة
kubectl get pods -o wide --show-labels # وسوم الـ Pods
kubectl get pods --selector app=demo-back # الـ Pods نفسها التي ينتقيها الخدمةرؤية التوزيع (10 طلبات عبر port-forward):
kubectl port-forward svc/demo-clusterip 8091:80
# في طرفية أخرى:
1..10 | ForEach-Object { (Invoke-WebRequest -Headers @{Accept="application/json"} http://localhost:8091).Content }kubectl delete -f k8s/
# أو حسب الكائن:
kubectl delete svc demo-clusterip demo-nodeport demo-lb
kubectl delete deployment demo-back| العَرَض | السبب المحتمل | الحل |
|---|---|---|
يفشل curl http://demo-clusterip | ليس من Pod، أو الخدمة غائبة | الاستدعاء من Pod؛ تحقق من kubectl get svc |
| Endpoints فارغة | المُنتقي لا يطابق أي وسم Pod | محاذاة selector (الخدمة) و labels (الـ Pods) |
EXTERNAL-IP على <pending> | لا موزّع حمل (kind، سحابة غير مضبوطة) | Docker Desktop: انتظر؛ وإلا kubectl port-forward |
localhost:30082 غير متاح | NodePort غير منشأة / منفذ مشغول | kubectl get svc demo-nodeport؛ غيّر nodePort |
ImagePullBackOff | الصورة demo-k8s:1.0 غائبة عن العنقود | ابنِها؛ في kind: kind load docker-image demo-k8s:1.0 |
# حل عام لوصول مؤقت إلى أي خدمة:
kubectl port-forward svc/demo-clusterip 8091:80 # -> http://localhost:8091دورة من إعداد د. هيثم رحومة — تطوير ونشر حلول البيانات