Σημειώσεις εντολών — Kubernetes

3 λεπτά

Έργο 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 (ανιχνευτές, εικόνα, events)
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     # πρόσβαση στο Service μέσω 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. Scaling, rolling update, rollback

powershell
# Χειροκίνητο scaling
kubectl scale deployment demo-web --replicas=5
kubectl get pods                              # 5 Pods πλέον
kubectl scale deployment demo-web --replicas=3

# Rolling update : αλλάξτε το APP_VERSION στο ConfigMap και έπειτα
kubectl apply -f k8s/configmap.yaml
kubectl rollout restart deployment demo-web
kubectl rollout status deployment demo-web    # ακολουθεί τη σταδιακή ανάπτυξη
powershell
# Ιστορικό και rollback
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

Παράρτημα A — 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              # λαμβάνει το 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

Παράρτημα B — αντιμετώπιση προβλημάτων

ΣύμπτωμαΠιθανή αιτίαΛύση
ErrImagePull / ImagePullBackOffΤο σύμπλεγμα δεν βρίσκει την εικόναΕπαληθεύστε imagePullPolicy: IfNotPresent + εικόνα demo-k8s:1.0 κατασκευασμένη· σε minikube/kind, φορτώστε την εικόνα (Παράρτημα A)
Pod σε CrashLoopBackOffΗ εφαρμογή καταρρέει στην εκκίνησηkubectl logs <pod> για να διαβάσετε το σφάλμα
Pod PendingΑνεπαρκείς πόροιkubectl describe pod <pod> (ενότητα Events)
localhost:30080 απρόσιτοService μη δημιουργημένο / λάθος θύρα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>

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