Σημειώσεις εντολών — Υπηρεσίες Kubernetes

2 λεπτά

Έργο projet11-kubernetes-services · όλες οι εντολές για ανάπτυξη, έκθεση και δοκιμή των Services.

Πίνακας περιεχομένων


1. Κατασκευή της εικόνας και ανάπτυξη

Από τον φάκελο του έργου (projet11-kubernetes-services):

powershell
kubectl config use-context docker-desktop
docker build -t demo-k8s:1.0 ./app          # (αν δεν έχει ήδη κατασκευαστεί στο έργο 10)
kubectl apply -f k8s/                        # deployment + 3 services
kubectl get pods                             # 3 Pods Running

2. Παρατήρηση των Services

powershell
kubectl get svc                              # TYPE, CLUSTER-IP, EXTERNAL-IP, PORT(S)
kubectl get svc -o wide
kubectl describe svc demo-clusterip          # λεπτομέρειες + Endpoints

Ανάγνωση του kubectl get svc:

ΣτήληΣημασία
TYPEClusterIP / NodePort / LoadBalancer
CLUSTER-IPΕσωτερική IP (πάντα παρούσα)
EXTERNAL-IPΕξωτερική IP (LoadBalancer) ή <none>
PORT(S)port του Service (και :nodePort για NodePort)

3. ClusterIP: ανακάλυψη υπηρεσιών (DNS)

Ένα ClusterIP δεν είναι προσβάσιμο από τον οικοδεσπότη: το καλούμε από ένα Pod, με το όνομά του.

powershell
# Προσωρινό Pod πελάτη (--rm : διαγράφεται στην έξοδο)
kubectl run client --rm -it --image=curlimages/curl -- sh

Έπειτα, στο κέλυφος του Pod:

sh
curl http://demo-clusterip           # κλήση ΜΕ ΟΝΟΜΑ (επιλύεται από το CoreDNS)
curl http://demo-clusterip           # ξανατρέξτε : το όνομα του Pod αλλάζει
exit

Δοκιμή της επίλυσης DNS:

powershell
kubectl run dnstest --rm -it --image=busybox:1.36 -- sh
# μέσα στο Pod :
nslookup demo-clusterip
wget -qO- http://demo-clusterip

4. NodePort: εξωτερική πρόσβαση

powershell
kubectl get svc demo-nodeport
# Άνοιγμα στον περιηγητή :
start http://localhost:30082
# ή δοκιμή από τη γραμμή εντολών :
curl http://localhost:30082

5. LoadBalancer: εξωτερική IP

powershell
kubectl 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 (βλ. παράρτημα).


6. Endpoints και επιλογείς

powershell
kubectl get endpoints demo-clusterip         # IP των Pods πίσω από το Service
kubectl get pods -o wide --show-labels       # ετικέτες των Pods
kubectl get pods --selector app=demo-back    # ίδια Pods με τον επιλογέα του Service

Προβολή της κατανομής (10 αιτήματα μέσω port-forward):

powershell
kubectl port-forward svc/demo-clusterip 8091:80
# σε ΑΛΛΟ τερματικό :
1..10 | ForEach-Object { (Invoke-WebRequest -Headers @{Accept="application/json"} http://localhost:8091).Content }

7. Εκκαθάριση

powershell
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 (Service) και 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
powershell
# Καθολική λύση προσωρινής πρόσβασης σε οποιοδήποτε Service :
kubectl port-forward svc/demo-clusterip 8091:80   # -> http://localhost:8091

Μάθημα δημιουργημένο από τον Dr. Haythem REHOUMA — Ανάπτυξη και ανάπτυξη λύσεων δεδομένων