Εκφώνηση — Έργο: Πρώτα βήματα με το Kubernetes (Pods, Deployments, Services)

4 λεπτά

Πρακτική · Ενότητα 07 — Kubernetes : concepts de base · Επίπεδο αρχάριο → ενδιάμεσο

Δοκιμάστε πρώτα μόνοι! Πραγματοποιήστε το έργο με αυτή μόνο την εκφώνηση. Η διόρθωση (σχολιασμένα μανιφέστα YAML + εντολές kubectl) βρίσκεται στο README.md, διπλωμένη. Μην την ανοίξετε παρά αφού έχετε προσπαθήσει.


Δεν χρειάζεστε minikube!

Δεν έχετε τίποτε επιπλέον να εγκαταστήσετε: το Docker Desktop περιέχει ένα ενσωματωμένο σύμπλεγμα Kubernetes.

  1. Ανοίξτε Docker Desktop → Settings (⚙️) → Kubernetes.
  2. Τσεκάρετε το « Enable Kubernetes », κάντε κλικ στο Apply & Restart, περιμένετε να γίνει το δείκτη πράσινο.
  3. Επαληθεύστε σε ένα τερματικό:
    powershell
    kubectl get nodes
    Πρέπει να δείτε έναν κόμβο docker-desktop σε κατάσταση Ready.

(Δυνατές εναλλακτικές: minikube start ή kind create cluster. Το έργο λειτουργεί επίσης, με την προϋπόθεση φόρτωσης της εικόνας — βλ. 02-COMMANDES.md.)


Στόχος

Να αναπτύξετε μια μικρή εφαρμογή ιστού στο Kubernetes σε πολλά αντίγραφα (Pods), να την εκθέσετε μέσω ενός Service και έπειτα να εξασκηθείτε στις καθημερινές κινήσεις: scaling, rolling update, rollback και αυτο-επιδιόρθωση.


Το αναμενόμενο αποτέλεσμα

Όταν ανανεώνετε τη σελίδα, το όνομα του Pod που απαντά αλλάζει: απόδειξη ότι το Service κατανέμει το φορτίο μεταξύ των Pods.


Εργασία προς πραγματοποίηση

Μέρος 1 — Κατασκευή της εικόνας

  1. Πάρτε την εφαρμογή ιστού της ενότητας 06 (ή γράψτε μια εφαρμογή που, στο /, εμφανίζει το hostname της = το όνομα του Pod).
  2. Κατασκευάστε την εικόνα τοπικά και ονομάστε την demo-k8s:1.0.

Μέρος 2 — Το Deployment (τα Pods)

  1. Γράψτε ένα μανιφέστο Deployment με 3 αντίγραφα, συνεκτικές ετικέτες (app: demo-web) και έναν ανιχνευτή (readinessProbe / livenessProbe) στο /health.
  2. Εφαρμόστε το και έπειτα λιστάρετε και επιθεωρήστε τα Pods σας (kubectl get pods, kubectl describe pod ..., kubectl logs ...).

Μέρος 3 — Το Service (έκθεση + κατανομή)

  1. Γράψτε ένα Service τύπου NodePort (θύρα 30080) που δείχνει προς τα Pods μέσω του επιλογέα ετικετών.
  2. Ανοίξτε το http://localhost:30080 και ανανεώστε: επαληθεύστε ότι το όνομα του Pod αλλάζει.

Μέρος 4 — Η διαμόρφωση (ConfigMap + μεταβλητές περιβάλλοντος)

  1. Δημιουργήστε ένα ConfigMap που περιέχει APP_TITLE, APP_VERSION και BG_COLOR, και εγχύστε το στα Pods (envFrom).
  2. Αλλάξτε το BG_COLOR, εφαρμόστε ξανά το ConfigMap, επανεκκινήστε τα Pods (kubectl rollout restart) και παρατηρήστε το νέο χρώμα.

Μέρος 5 — Οι καθημερινές κινήσεις

  1. Scaling: περάστε σε 5 αντίγραφα (kubectl scale) και έπειτα επιστρέψτε στα 3.
  2. Rolling update: αλλάξτε το APP_VERSION, εφαρμόστε και ακολουθήστε τη σταδιακή ανάπτυξη (kubectl rollout status).
  3. Rollback: επιστρέψτε στην προηγούμενη έκδοση (kubectl rollout undo).
  4. Αυτο-επιδιόρθωση: διαγράψτε ένα Pod με το χέρι (kubectl delete pod ...) και διαπιστώστε ότι το Kubernetes δημιουργεί ξανά ένα μόνο του.

Ερωτήσεις προβληματισμού

  • Ποια είναι η διαφορά ανάμεσα σε ένα Pod, ένα ReplicaSet και ένα Deployment;
  • Γιατί περνάμε από ένα Service αντί να επικοινωνούμε με ένα Pod απευθείας μέσω της IP του;
  • Σε τι χρησιμεύει ο επιλογέας ετικετών μεταξύ του Service και των Pods;
  • Γιατί να χωρίσουμε τη διαμόρφωση (ConfigMap) από τον κώδικα (εικόνα Docker);
  • Τι κάνει το Kubernetes όταν ένα Pod πέσει; Και κατά τη διάρκεια ενός rolling update;

Παραδοτέα

  • Ο φάκελος app/ (κώδικας + Dockerfile) και ο φάκελος k8s/ (configmap.yaml, deployment.yaml, service.yaml).
  • Ένα στιγμιότυπο που δείχνει τουλάχιστον 2 διαφορετικά ονόματα Pods στον περιηγητή (ή μέσω curl).
  • Την έξοδο του kubectl get pods που δείχνει 3/3 Pods Running.
  • Ένα στιγμιότυπο ενός kubectl rollout status κατά τη διάρκεια ενός rolling update.

Κριτήρια επιτυχίας

ΚριτήριοΑναμενόμενο
Εικόνα κατασκευασμένηdemo-k8s:1.0 διαθέσιμη για το σύμπλεγμα
Deployment3 Pods Running, ανιχνευτές OK
ServiceΣελίδα προσβάσιμη στο localhost:30080, το όνομα του Pod αλλάζει
ConfigMapΑλλαγή του BG_COLOR ορατή μετά την επανεφαρμογή
Κύκλος ζωήςScaling, rolling update, rollback και αυτο-επιδιόρθωση επιδειγμένα

Κολλήσατε; Το README.md περιέχει την πλήρη διόρθωση (σχολιασμένα μανιφέστα + εντολές) και το υπόμνημα εντολών λιστάρει όλο το χρήσιμο kubectl — να τα συμβουλευτείτε αφού έχετε προσπαθήσει.