Kubernetes Assessment: 01 Fundamentals
Επίπεδο δυσκολίας: Fundamentals
Γλώσσα: Ελληνικά
Μορφή: γραπτό Assessment με μικρό πρακτικό μέρος
Προτεινόμενη διάρκεια: 90 έως 120 λεπτά
Μέγιστη βαθμολογία: 100 μονάδες
Όριο επιτυχίας: 70 μονάδες
Αυτό το Assessment περιλαμβάνει εργασίες, απαιτήσεις υποβολής και κριτήρια βαθμολόγησης. Δεν περιλαμβάνει την πλήρη ενδεικτική λύση.
1. Στόχος του Assessment
Αυτό το Assessment ελέγχει αν μπορείτε να κατανοείτε αξιόπιστα τις βασικές έννοιες του Kubernetes και να εκτελείτε Rollout απλών Workloads με ελεγχόμενο τρόπο. Εστιάζει στη βασική ορολογία, στο μοντέλο Kubernetes Objects, στο kubectl, στα Namespaces, Pods, Deployments, ReplicaSets, Services, Labels, Selectors, ConfigMaps, Secrets, Rollouts και στο αρχικό Troubleshooting.
Μετά το Assessment πρέπει να είναι σαφές ότι μπορείτε να:
- εξηγείτε τον σκοπό του Kubernetes και την αρχή του Desired State,
- αναγνωρίζετε σωστά τα βασικά Cluster Components,
- διαβάζετε και να δημιουργείτε απλά YAML Manifests,
- αναπτύσσετε Resources σε ξεχωριστό Namespace,
- συνδέετε Services με Pods μέσω Labels και Selectors,
- χρησιμοποιείτε Logs, Events και Rollout Status για διάγνωση,
- διερευνάτε συστηματικά απλά σφάλματα όπως λάθος Image, λάθος Selector και
CrashLoopBackOff, - τεκμηριώνετε και να καθαρίζετε σωστά τα Lab Resources.
2. Προαπαιτούμενα και επιτρεπόμενοι πόροι
Χρειάζεστε:
- ένα ασφαλές Kubernetes Lab Cluster, για παράδειγμα
kind,minikube,k3dή ένα παρεχόμενο Lab Environment, kubectl,- δικαιώματα εγγραφής στο δικό σας Namespace,
- ένα Shell και έναν Text Editor.
Επιτρέπονται:
- η επίσημη τεκμηρίωση του Kubernetes,
- οι δικές σας σημειώσεις από το workshop,
- τα
kubectl explain,kubectl api-resources,kubectl describe,kubectl logsκαιkubectl get events.
Δεν επιτρέπονται:
- Production Cluster Contexts,
- πραγματικά Credentials, Tokens ή Private Keys,
- έτοιμες ενδεικτικές λύσεις από προηγούμενα Assessments,
- αλλαγές εκτός του Namespace του Assessment.
Προτεινόμενο Namespace:
export NS=exam-fundamentals
3. Σενάριο
Μια ομάδα θέλει να λειτουργήσει μια πολύ απλή εσωτερική Web Application στο Kubernetes. Η εφαρμογή πρέπει να αποτελείται από ένα Deployment με δύο Replicas και να είναι προσβάσιμη εσωτερικά μέσω ενός ClusterIP Service. Μέρος του Configuration παρέχεται μέσω ενός ConfigMap και ενός δοκιμαστικού Secret.
Το Cluster είναι Lab Cluster. Στόχος δεν είναι η High Availability επιπέδου Production, αλλά ο σωστός χειρισμός των βασικών εννοιών, τα κατανοητά Manifests και η καθαρή διάγνωση.
4. Αναμενόμενη υποβολή
Υποβάλετε έναν φάκελο ή ένα Archive με τα ακόλουθα αρχεία:
01-fundamentals-submission/
answers.md
namespace.yml
deployment.yml
service.yml
configmap.yml
secret.yml
evidence.md
cleanup.md
Το answers.md περιέχει τις απαντήσεις στις ερωτήσεις γνώσεων και στην ανάλυση του Manifest.
Το evidence.md περιέχει σχετικά αποτελέσματα ή σύντομες περιλήψεις από kubectl get, describe, logs, Events και Rollout Status.
Το cleanup.md περιγράφει τη διαδικασία Cleanup.
5. Μέρος A: Ερωτήσεις γνώσεων
Απαντήστε με ακρίβεια. Μια καλή απάντηση αναφέρει τον σκοπό, το σχετικό Resource ή Component, μια συνηθισμένη αιτία σφάλματος και τουλάχιστον μία δυνατότητα επαλήθευσης.
- Ποιος είναι ο σκοπός του Kubernetes και τι σημαίνει Declarative Desired State;
- Ποιος είναι ο ρόλος του API Server;
- Γιατί είναι κρίσιμο το
etcdγια ένα Kubernetes Cluster; - Ποιους ρόλους έχουν ο Scheduler, ο Controller Manager και το kubelet;
- Ποια είναι η διαφορά μεταξύ Pod, ReplicaSet και Deployment;
- Γιατί τα Pods σπάνια δημιουργούνται απευθείας στην κανονική λειτουργία;
- Πώς βρίσκει ένα Service τα Pods του;
- Ποια είναι η διαφορά μεταξύ Label και Annotation;
- Τι είναι ένα Namespace και ποιο όριο ασφαλείας δεν αντικαθιστά;
- Σε τι χρησιμοποιούνται τα ConfigMaps και σε τι τα Secrets;
- Γιατί το Base64 στα Kubernetes Secrets δεν αποτελεί Encryption;
- Ποιες εντολές χρησιμοποιείτε πρώτες για
ImagePullBackOff,CrashLoopBackOffκαι Service χωρίς Endpoints;
6. Μέρος B: Ανάλυση Manifest
Αναλύστε γραπτώς το ακόλουθο Manifest.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
namespace: exam-fundamentals
labels:
app: web
tier: frontend
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
tier: frontend
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
Απαντήστε:
- Ποιο API Group και ποια Version χρησιμοποιούνται;
- Ποιο Resource δημιουργείται;
- Πού ορίζεται το Desired State;
- Ποια Labels λαμβάνει το Deployment και ποια τα Pods;
- Ποιος είναι ο ρόλος του
spec.selector.matchLabels; - Γιατί πρέπει να ταιριάζουν ο Selector και τα Labels του Pod Template;
- Ποιο Resource δημιουργεί έμμεσα το Deployment;
- Πώς θα ελέγχατε αν το Rollout ολοκληρώθηκε επιτυχώς;
7. Μέρος C: Πρακτική εργασία
Εργασία C1: Προετοιμασία του Namespace
- Ελέγξτε το ενεργό Context.
- Δημιουργήστε το Namespace
exam-fundamentals. - Ορίστε αυτό το Namespace για το τρέχον Context ή χρησιμοποιείτε με συνέπεια το
-n exam-fundamentals. - Τεκμηριώστε το όνομα του Cluster, τον αριθμό Nodes και την Client Version.
Αναμενόμενα Evidence:
kubectl config current-context
kubectl get nodes -o wide
kubectl get namespace exam-fundamentals
Εργασία C2: Rollout του Deployment
Δημιουργήστε το deployment.yml για μια Web Application με τις ακόλουθες απαιτήσεις:
- Resource:
Deployment - όνομα:
web - Namespace:
exam-fundamentals - Image:
nginx:1.27 - Replicas:
2 - Labels:
app=web,tier=frontend,environment=exam - Container Port:
80
Εφαρμόστε το Manifest και ελέγξτε το:
kubectl apply --dry-run=server -f deployment.yml
kubectl apply -f deployment.yml
kubectl rollout status deployment/web -n exam-fundamentals
kubectl get deployment,replicaset,pod -n exam-fundamentals
Εργασία C3: Δημιουργία του Service
Δημιουργήστε το service.yml με τις ακόλουθες απαιτήσεις:
- Resource:
Service - όνομα:
web - τύπος:
ClusterIP - Selector:
app=web - Port:
80 - TargetPort:
80
Ελέγξτε το Service, τα Endpoints και τα EndpointSlices.
kubectl get svc,endpoints,endpointslices -n exam-fundamentals
kubectl describe svc web -n exam-fundamentals
Εργασία C4: Προσάρτηση ConfigMap και Secret
Δημιουργήστε ένα ConfigMap web-config με:
APP_MODE=exam
WELCOME_TEXT=Hello from the Fundamentals assessment
Δημιουργήστε ένα Secret web-secret με stringData:
DEMO_PASSWORD=not-a-real-secret
Επεκτείνετε το Deployment ώστε:
- το
APP_MODEνα είναι διαθέσιμο ως Environment Variable μέσα στο Container, - το Secret να προσαρτάται ως αρχείο Read-Only στη διαδρομή
/etc/demo-secret.
Σημαντικό: Μη χρησιμοποιείτε πραγματικό Password ή Token.
Εργασία C5: Rollout, Scaling και Rollback
- Αυξήστε τα Replicas του Deployment σε τρία.
- Αλλάξτε το Image σε
nginx:1.26. - Ελέγξτε το Rollout Status και το Rollout History.
- Εκτελέστε Rollback.
- Τεκμηριώστε ποιο Image είναι ενεργό μετά το Rollback.
Κατάλληλες εντολές:
kubectl scale deployment/web --replicas=3 -n exam-fundamentals
kubectl set image deployment/web nginx=nginx:1.26 -n exam-fundamentals
kubectl rollout status deployment/web -n exam-fundamentals
kubectl rollout history deployment/web -n exam-fundamentals
kubectl rollout undo deployment/web -n exam-fundamentals
8. Μέρος D: Διάγνωση και σύντομη λειτουργική σημείωση
Εργασία D1: Service χωρίς Endpoints
Αλλάξτε σκόπιμα τον Service Selector σε λανθασμένη τιμή, για παράδειγμα:
selector:
app: wrong-web
Τεκμηριώστε:
- το σύμπτωμα,
- την εντολή διάγνωσης,
- την αιτία,
- τη διόρθωση,
- την επαλήθευση μετά τη διόρθωση.
Εργασία D2: Εξήγηση μοτίβων σφαλμάτων
Εξηγήστε σύντομα τη διάγνωση και την πιθανότερη αιτία για κάθε περίπτωση:
| Μοτίβο σφάλματος | Αναμενόμενη διάγνωση |
|---|---|
ImagePullBackOff |
Ποια Events ελέγχετε; |
CrashLoopBackOff |
Ποια Logs ελέγχετε; |
| Service χωρίς Endpoints | Ποια Labels, Selector και Endpoints ελέγχετε; |
Το Pod παραμένει Pending |
Ποια Events και ποιες πληροφορίες για Nodes και Resources ελέγχετε; |
Εργασία D3: Λειτουργική σημείωση
Δημιουργήστε μια σύντομη λειτουργική σημείωση στο evidence.md που περιλαμβάνει:
- το Context και το Namespace,
- τα Manifests που εφαρμόστηκαν,
- τα Resources που δημιουργήθηκαν,
- τις σημαντικότερες εντολές επαλήθευσης,
- το σφάλμα που εντοπίστηκε και τη διόρθωσή του,
- τη διαδικασία Cleanup.
9. Βαθμολόγηση
| Πεδίο | Μονάδες | Προσδοκία |
|---|---|---|
| Ερωτήσεις γνώσεων | 24 | Σωστή, σύντομη εξήγηση των όρων μέσα στο πλαίσιο Kubernetes |
| Ανάλυση Manifest | 16 | Κατανόηση των apiVersion, kind, metadata, spec, Selector και Rollout |
| Πρακτική εργασία | 34 | Λειτουργούν τα Namespace, Deployment, Service, ConfigMap, Secret, Scaling και Rollback |
| Διάγνωση | 16 | Συστηματική χρήση Logs, Events, Rollout Status, Selector και Endpoints |
| Τεκμηρίωση και Cleanup | 10 | Η υποβολή είναι ιχνηλατήσιμη, δεν περιέχει πραγματικά Secrets και τεκμηριώνει το Cleanup |
| Σύνολο | 100 |
Κλίμακα βαθμολόγησης:
| Μονάδες | Αποτέλεσμα |
|---|---|
| 90-100 | πολύ καλά |
| 80-89 | καλά |
| 70-79 | επιτυχία |
| 0-69 | αποτυχία |
10. Κριτήρια άμεσης αποτυχίας
Το Assessment θεωρείται αποτυχημένο ανεξάρτητα από τις μονάδες, αν ισχύει ένα από τα παρακάτω:
- χρησιμοποιείται ή τροποποιείται Production Context,
- πραγματικά Credentials, Tokens ή Private Keys καταχωρίζονται στο Version Control ή υποβάλλονται,
- δημιουργούνται Resources εκτός του Namespace του Assessment χωρίς έγκριση,
- ο εξεταζόμενος δεν μπορεί να εξηγήσει τα Manifests που υπέβαλε,
- δεν παρέχεται διαδικασία Cleanup.
11. Λίστα ελέγχου εξεταστή
- Ο εξεταζόμενος έλεγξε το Context πριν αρχίσει.
- Όλα τα Manifests χρησιμοποιούν το Namespace
exam-fundamentals. - Το Deployment έχει δύο ή τρία Replicas, ανάλογα με το στάδιο της εργασίας.
- Το Service επιλέγει τα σωστά Pods μέσω
app=web. - Τα ConfigMap και Secret προσαρτώνται ή αναφέρονται σωστά.
- Το Rollout, η αλλαγή Image και το Rollback επαληθεύτηκαν.
- Η διάγνωση του εσφαλμένου Service Selector είναι τεχνικά σωστή.
- Δεν υπάρχουν πραγματικά Secrets.
- Το Cleanup είναι πλήρες και επαναλήψιμο.