Wiki workshop · Ελληνικά

Εργαστήριο Kubernetes: Professional – Ασκήσεις με ενδεικτικές λύσεις

Δώδεκα ασκήσεις και ενδεικτικές λύσεις για αρχιτεκτονική, λειτουργία, upgrades, observability, GitOps, disaster recovery και κόστος.

Παραδείγματα workshop σε ZIP
Πρόοδος μάθησης στη web app

Σημειώστε κεφάλαια ως αναγνωσμένα, δείτε την πρόοδο ανάγνωσης και ολοκληρώστε πρακτικές ενότητες αφού ενεργοποιήσετε την προαιρετική web app. Η πρόοδος του workshop υπολογίζεται από τα κεφάλαια όλων των σελίδων τεκμηρίωσης. Οι επιλογές μένουν σε αυτή τη συσκευή· δεν υπάρχει λογαριασμός ή συγχρονισμός με server. Δεν απαιτείται εγκατάσταση. Η ανάκληση στις Ρυθμίσεις απορρήτου διαγράφει την πρόοδο.

Πρόοδος ανάγνωσης0%
0%
0 / 27 κεφάλαια που διαβάστηκαν
Άλλη γλωσσική έκδοσηΓερμανικά ↗Αγγλικά ↗

Εργαστήριο Kubernetes: Professional – Ασκήσεις με ενδεικτικές λύσεις

Αναφορά: Εργαστήριο Professional Επίπεδο δυσκολίας: Professional Μορφή: ασκήσεις αρχιτεκτονικής και λειτουργίας, πρακτική καθοδήγηση και ενδεικτικές λύσεις

Σκοπός αυτού του φύλλου ασκήσεων

Αυτό το φύλλο συμπληρώνει το εργαστήριο Professional με εργασίες προσανατολισμένες στην παραγωγή. Εστιάζει στο platform blueprint, στο μοντέλο λειτουργίας, στη σύγκριση managed/self-managed/hybrid, στα Node Pools, στο Cluster Sizing, στα upgrades, στα API deprecations, στο observability, στο autoscaling, στο GitOps, στο multi-tenancy, στους Operators, στα CRDs, στα backup, στο disaster recovery, στη διαχείριση κόστους και στα runbooks.

Εδώ το επίπεδο Professional σημαίνει ότι δεν αποδεικνύεις απλώς πως εκτελείται μια εφαρμογή. Ορίζεις πώς λειτουργεί, αναβαθμίζεται, παρακολουθείται, κλιμακώνεται και επαναφέρεται μια πλατφόρμα για πολλές ομάδες, με επίγνωση του κόστους.

01 / 27

Προϋποθέσεις

Χρειάζεσαι:

  • ένα lab cluster ή προσομοιωμένα cluster contexts,
  • kubectl,
  • προαιρετικά Helm και Kustomize,
  • προαιρετικά Metrics Server, Prometheus/Grafana ή έτοιμο περιβάλλον observability,
  • προαιρετικά GitOps Controllers όπως Argo CD ή Flux,
  • προαιρετικά Velero ή επίδειξη backup.

Προτεινόμενος κατάλογος εργασίας:

text
kubernetes/professional-exercises/
  platform-blueprint.md
  upgrade-runbook.md
  observability-slo.md
  autoscaling-review.md
  gitops-flow.md
  tenant-template/
  operator-review.md
  dr-runbook.md
  cost-review.md
02 / 27

Επισκόπηση ασκήσεων

Αρ. Θέμα Αποτέλεσμα
1 Platform blueprint πρότυπο cluster προσανατολισμένο στην παραγωγή
2 Μοντέλο λειτουργίας αξιολόγηση managed, self-managed και hybrid
3 Node Pools και sizing απόφαση χωρητικότητας και pools
4 Upgrade runbook minor upgrade με έλεγχο deprecations
5 Observability και SLO metrics, logs, Events, alerts και σύνδεσμος προς runbook
6 Autoscaling αξιολόγηση HPA, VPA, Cluster Autoscaler, Karpenter και KEDA
7 GitOps και CI/CD σαφής ροή προώθησης και rollback
8 Namespace για πολλούς tenants πρότυπο Namespace με κανόνες διακυβέρνησης
9 Operators και CRDs λειτουργική αξιολόγηση επέκτασης API
10 Backup και disaster recovery σενάρια restore για Namespace και cluster
11 Διαχείριση κόστους σημείωμα rightsizing και showback
12 Παράδοση λειτουργίας runbook, κριτήρια διακοπής και τεκμήρια

Μέρος Α – Ασκήσεις

03 / 27

Άσκηση 1: Δημιουργία platform blueprint

Στόχος

Περιγράφεις ένα επαναλήψιμο πρότυπο για Kubernetes cluster προσανατολισμένο στην παραγωγή.

Εργασία

Δημιούργησε το platform-blueprint.md με τις εξής ενότητες:

  1. Στόχος της πλατφόρμας.
  2. Μοντέλο cluster: κοινό cluster ή cluster ανά περιβάλλον.
  3. Διαχωρισμός περιβαλλόντων: dev, test, stage, prod.
  4. Αρμοδιότητες: platform team, application team, security και operations.
  5. Βασικά add-ons: CNI, CSI, CoreDNS, Ingress/Gateway, metrics, observability, GitOps και backup.
  6. Πρότυπο Namespace: Labels, owner, RBAC, Quotas, LimitRanges, NetworkPolicy και Pod Security.
  7. Διαδικασία upgrades και deprecations.
  8. Μοντέλο observability και SLO.
  9. Μοντέλο backup και restore.
  10. Μοντέλο κόστους: showback ή chargeback.

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

Ένα δεύτερο άτομο μπορεί, με βάση το blueprint, να κατανοήσει πώς πρέπει να δημιουργηθεί και να λειτουργεί ένα νέο cluster.


04 / 27

Άσκηση 2: Αξιολόγηση managed, self-managed και hybrid

Στόχος

Λαμβάνεις μια τεκμηριωμένη απόφαση για την πλατφόρμα και καταγράφεις τα πλεονεκτήματα και τα μειονεκτήματα κάθε επιλογής.

Εργασία

Δημιούργησε πίνακα αποφάσεων για τρία σενάρια:

  1. Managed Kubernetes για τυπικές web εφαρμογές.
  2. Self-managed Kubernetes για ιδιαίτερα εξειδικευμένα bare-metal workloads.
  3. Hybrid μοντέλο για components στο cloud και σε on-premises περιβάλλον.

Αξιολόγησε:

  • την ευθύνη για το Control Plane,
  • την προσπάθεια για upgrades,
  • την ευθύνη ασφάλειας,
  • το κόστος και την εξάρτηση από τον πάροχο,
  • τον λειτουργικό κίνδυνο,
  • τις δεξιότητες που χρειάζεται η ομάδα.

05 / 27

Άσκηση 3: Σχεδιασμός Node Pools και Cluster Sizing

Στόχος

Σχεδιάζεις Node Pools, εφεδρική χωρητικότητα και πόρους για add-ons σε μια πλατφόρμα προσανατολισμένη στην παραγωγή.

Σενάριο

Η πλατφόρμα πρέπει να φιλοξενεί:

  • 20 τυπικές web υπηρεσίες,
  • 5 workers με υψηλές απαιτήσεις CPU,
  • 3 stateful υπηρεσίες με PVC,
  • ένα observability stack,
  • έναν Ingress/Gateway Controller,
  • έναν GitOps Controller,
  • έναν backup controller.

Εργασία

  1. Σχεδίασε τουλάχιστον τρία Node Pools.
  2. Υπολόγισε την επιβάρυνση από το σύστημα και τα add-ons.
  3. Όρισε εφεδρική χωρητικότητα για rollouts και αστοχίες Nodes.
  4. Κατάγραψε τα cloud provider quotas που πρέπει να ελεγχθούν.
  5. Σύνταξε κριτήρια διακοπής για την κλιμάκωση.

06 / 27

Άσκηση 4: Σύνταξη upgrade runbook με έλεγχο API deprecations

Στόχος

Σχεδιάζεις ένα Kubernetes minor upgrade ως ελεγχόμενη αλλαγή με διαδρομή επικύρωσης και rollback.

Εργασία

Δημιούργησε το upgrade-runbook.md με:

  1. τρέχουσα έκδοση και έκδοση στόχο,
  2. έλεγχο version skew,
  3. έλεγχο API deprecations,
  4. έλεγχο CRDs και webhooks,
  5. συμβατότητα add-ons,
  6. backup και σημείο restore,
  7. test cluster ή staging,
  8. upgrade του Control Plane,
  9. έλεγχο add-ons,
  10. upgrade των Node Pools με cordon και drain,
  11. smoke tests,
  12. κριτήρια διακοπής,
  13. σχέδιο rollback ή ανάκαμψης,
  14. τελική αναφορά.

07 / 27

Άσκηση 5: Ορισμός μοντέλου observability και SLO

Στόχος

Περιγράφεις το observability ως μοντέλο λειτουργίας με σήματα, SLOs, alerts και runbooks, όχι απλώς ως κατάλογο εργαλείων.

Εργασία

Για μια ενδεικτική εφαρμογή checkout-api όρισε:

  • Service Level Objective,
  • Service Level Indicator,
  • metrics,
  • logs,
  • traces,
  • Kubernetes Events,
  • dashboards,
  • alerts,
  • σύνδεσμο προς runbook,
  • χρόνο διατήρησης δεδομένων.

Πρόσθεσε επίσης σήματα πλατφόρμας για API Server, CoreDNS, Ingress, Nodes και PVCs.


08 / 27

Άσκηση 6: Αξιολόγηση autoscaling

Στόχος

Κατατάσσεις HPA, VPA, Cluster Autoscaler, Karpenter και KEDA ανά σκοπό, προϋποθέσεις και κίνδυνο.

Σενάριο

Μια εφαρμογή workers επεξεργάζεται εργασίες από ουρά, με ακανόνιστο ρυθμό. Κατά τη διάρκεια της ημέρας υπάρχουν αιχμές φορτίου. Τη νύχτα η πλατφόρμα πρέπει να μειώνει το κόστος.

Εργασία

  1. Όρισε CPU και memory requests.
  2. Σχεδίασε στρατηγική HPA.
  3. Αποφάσισε αν είναι χρήσιμο το KEDA.
  4. Περιέγραψε την αλληλεπίδραση με το Node autoscaling.
  5. Κατάγραψε κινδύνους όπως ταλαντώσεις, αύξηση κόστους και ελλιπή metrics.

09 / 27

Άσκηση 7: Σχεδίαση ροής GitOps και CI/CD

Στόχος

Διαχωρίζεις καθαρά το CI από το GitOps και αποφεύγεις μόνιμα εκτεταμένα δικαιώματα cluster για το CI pipeline.

Εργασία

Δημιούργησε το gitops-flow.md με τη ροή:

  1. commit του κώδικα,
  2. CI: build, test, scan,
  3. push του image στο registry,
  4. προσδιορισμός digest,
  5. pull request για αλλαγή στο manifest,
  6. review και έγκριση,
  7. GitOps sync,
  8. ανίχνευση drift,
  9. rollback μέσω Git revert.

Τεκμηρίωσε ποια identity χρειάζεται ποια δικαιώματα.


10 / 27

Άσκηση 8: Δημιουργία προτύπου Namespace για πολλούς tenants

Στόχος

Δημιουργείς πρότυπο Namespace για μια ομάδα που μπορεί να κάνει deploy με περιορισμένα δικαιώματα χωρίς πρόσβαση σε ολόκληρο το cluster.

Εργασία

Δημιούργησε manifests για:

  • Namespace με Labels,
  • ResourceQuota,
  • LimitRange,
  • Role,
  • RoleBinding,
  • NetworkPolicy Default Deny,
  • Pod Security Labels,
  • owner annotation.

Τεκμηρίωσε ποιοι έλεγχοι προετοιμάζονται μόνο στο επίπεδο Professional και εφαρμόζονται αυστηρότερα στο Advanced.


11 / 27

Άσκηση 9: Αξιολόγηση Operator και CRD

Στόχος

Εξετάζεις αν ένας Operator μπορεί να λειτουργεί αξιόπιστα στην πλατφόρμα.

Εργασία

Επίλεξε έναν υποθετικό Operator database-operator και τεκμηρίωσε:

  1. τα εγκατεστημένα CRDs,
  2. τα απαιτούμενα ClusterRoles,
  3. τα Custom Resources που διαχειρίζεται,
  4. τα Conditions και Events,
  5. τη σημασία του για τα backup,
  6. τους κινδύνους upgrade,
  7. τους κινδύνους απεγκατάστασης,
  8. τη δυνατότητα multi-tenancy,
  9. τα κριτήρια διακοπής πριν από τη χρήση σε παραγωγή.

12 / 27

Άσκηση 10: Σχεδιασμός backup και disaster recovery

Στόχος

Διακρίνεις την κατάσταση Git, το etcd, τα δεδομένα PVC, τα Secrets, τα CRDs και τα εξωτερικά συστήματα.

Εργασία

Δημιούργησε το dr-runbook.md με δύο σενάρια:

  1. Restore ενός μεμονωμένου Namespace.
  2. Restore ολόκληρου cluster.

Για κάθε σενάριο περιέγραψε:

  • τις κατηγορίες δεδομένων που επηρεάζονται,
  • τα απαιτούμενα backups,
  • τη σειρά restore,
  • την επικύρωση,
  • τις παραδοχές RTO/RPO,
  • τους κινδύνους,
  • τα τεκμήρια.

13 / 27

Άσκηση 11: Ανάλυση κόστους και rightsizing

Στόχος

Αναλύεις τους παράγοντες κόστους και προτείνεις τεχνικές ενέργειες rightsizing.

Σενάριο

Ένα cluster εμφανίζει:

  • πολλά Pods με υψηλά requests και χαμηλή πραγματική χρήση,
  • αρκετά αχρησιμοποίητα PVCs,
  • αρκετούς εξωτερικούς Load Balancers,
  • dev workloads που εκτελούνται συνεχώς,
  • καμία αντιστοίχιση showback ανά Namespace.

Εργασία

Δημιούργησε το cost-review.md με:

  • πηγές κόστους,
  • τεχνικά σημεία μέτρησης,
  • προτάσεις rightsizing,
  • κινδύνους από ανεπαρκή requests,
  • μοντέλο showback,
  • σχέδιο ενεργειών.

14 / 27

Άσκηση 12: Προετοιμασία παράδοσης της λειτουργίας

Στόχος

Δημιουργείς ένα έγγραφο παράδοσης που μπορεί να χρησιμοποιήσει άλλο άτομο σε βάρδια on-call ή κατά τη λειτουργία της πλατφόρμας.

Εργασία

Σύνταξε σύντομη παράδοση με:

  • επισκόπηση πλατφόρμας,
  • κρίσιμα add-ons,
  • γνωστά SLOs,
  • διαδρομές alerting,
  • παράθυρα upgrades,
  • ευθύνη για backup και restore,
  • τα 5 σημαντικότερα runbooks,
  • κριτήρια διακοπής,
  • ανοιχτούς κινδύνους.

Μέρος Β – Ενδεικτικές λύσεις και αναλυτική καθοδήγηση

15 / 27

Λύση 1: Platform blueprint

Ενδεικτική δομή:

markdown
# Platform Blueprint

## 1. Στόχος

Η πλατφόρμα παρέχει τυποποιημένα περιβάλλοντα Kubernetes για πολλές ομάδες εφαρμογών. Προσφέρει ασφαλή Namespaces, deployments μέσω GitOps, κεντρικό observability, Ingress/Gateway, storage, backup και τεκμηριωμένες διαδικασίες upgrade.

## 2. Μοντέλο cluster

- Dev/test: κοινό cluster με απομόνωση μέσω Namespaces.
- Stage/prod: χωριστά clusters ανάλογα με την κρισιμότητα ή το περιβάλλον.
- Clusters παραγωγής σε τουλάχιστον τρεις Availability Zones.

## 3. Αρμοδιότητες

| Πεδίο | Υπεύθυνος |
| --- | --- |
| Control Plane | πάροχος ή platform team |
| Nodes και Node Pools | platform team |
| CNI/CSI/CoreDNS | platform team |
| Περιεχόμενο Namespace | application team |
| Πολιτικές ασφάλειας | platform team και security |
| SLOs εφαρμογών | application team |
| SLOs πλατφόρμας | platform team |

## 4. Βασικά add-ons

| Add-on | Σκοπός | Υπεύθυνος | SLO |
| --- | --- | --- | --- |
| CNI | δίκτυο Pods και NetworkPolicy | platform | διαθεσιμότητα δικτύου Pods |
| CSI | δημιουργία PV | platform | αξιόπιστη δημιουργία PVC |
| CoreDNS | service discovery | platform | καθυστέρηση DNS και ποσοστό σφαλμάτων |
| Ingress/Gateway | εξωτερική πρόσβαση HTTP | platform | διαθεσιμότητα routing 99,9% |
| Observability | metrics/logs/traces/Events | platform | διαθεσιμότητα σημάτων |
| GitOps | συγχρονισμός επιθυμητής κατάστασης | platform | αξιόπιστος συγχρονισμός |
| Backup | δυνατότητα restore | platform | δοκιμασμένο restore |

## 5. Πρότυπο Namespace

Κάθε Namespace ενός tenant λαμβάνει:

- Labels υπευθύνου,
- ResourceQuota,
- LimitRange,
- Role/RoleBinding,
- NetworkPolicy Default Deny,
- Pod Security Labels,
- Label κόστους.

## 6. Κύκλος ζωής

- μηνιαίος έλεγχος deprecations,
- τριμηνιαίο παράθυρο για Kubernetes minor upgrade,
- δοκιμή στο staging πριν από το prod,
- τεκμηριωμένα κριτήρια διακοπής,
- smoke tests μετά από κάθε βήμα upgrade.

Αξιολόγηση:

Ένα καλό blueprint δεν εξαρτάται από ένα συγκεκριμένο εργαλείο. Περιγράφει υπευθύνους, SLOs, διαδρομές upgrade, απομόνωση, κόστος και ανάκαμψη.


16 / 27

Λύση 2: Managed, self-managed και hybrid

Ενδεικτικός πίνακας αποφάσεων:

Κριτήριο Managed Self-managed Hybrid
Control Plane πάροχος εσωτερική ομάδα κατανεμημένη ευθύνη
Προσπάθεια upgrade μικρότερη μεγάλη μέτρια έως μεγάλη
Έλεγχος περιορισμένος μέγιστος διαφοροποιημένος
Ευθύνη ασφάλειας μοιρασμένη κυρίως εσωτερική μοιρασμένη και σύνθετη
Εξάρτηση από πάροχο μεγάλη μικρότερη μέτρια
Λειτουργικός κίνδυνος όρια του παρόχου λειτουργικά σφάλματα σφάλματα ενσωμάτωσης
Δεξιότητες ομάδας βασική λειτουργία Kubernetes βαθιά γνώση Kubernetes/etcd/PKI cloud, on-prem και networking

Ενδεικτική αξιολόγηση:

  • Το managed Kubernetes αποτελεί συνήθως την προεπιλογή για web εφαρμογές, εφόσον τα όρια του παρόχου είναι αποδεκτά.
  • Το self-managed είναι χρήσιμο μόνο όταν ειδικές απαιτήσεις δικαιολογούν την πρόσθετη πολυπλοκότητα.
  • Το hybrid δεν είναι συμβιβασμός χωρίς κόστος: αυξάνει τις απαιτήσεις διακυβέρνησης, δικτύωσης και λειτουργίας.

17 / 27

Λύση 3: Node Pools και sizing

Ενδεικτικά Node Pools:

Node Pool Σκοπός Χαρακτηριστικά
system-pool CoreDNS, CNI, CSI, Ingress, Observability Agents Taints για add-ons συστήματος, υψηλή σταθερότητα
app-general τυπικές web υπηρεσίες οριζόντια κλιμάκωση, κατανομή μεταξύ ζωνών
worker-cpu workers με υψηλές απαιτήσεις CPU περισσότερη CPU, πιθανώς spot με PDB/retry
stateful stateful υπηρεσίες με PVC Nodes κοντά στο storage, χωρίς επιθετική χρήση spot

Λίστα ελέγχου sizing:

  • Άθροισε τα requests των εφαρμογών και την επιβάρυνση των DaemonSets.
  • Πρόβλεψε χώρο για rolling updates: χρειάζεται επιπλέον χωρητικότητα για νέα Pods κατά το rollout.
  • Πρόβλεψε χώρο για αστοχία ζώνης ή Node, ανάλογα με το SLA.
  • Μη λειτουργείς CoreDNS, logging, metrics και Ingress με τις ελάχιστες τιμές που αρκούν μόνο για μικρά clusters.
  • Έλεγξε cloud quotas για compute, IPs, volumes, Load Balancers, firewall rules και egress.

Κριτήρια διακοπής:

  • Ο Cluster Autoscaler δεν μπορεί πλέον να προσθέσει Nodes.
  • Ο διαθέσιμος χώρος διευθύνσεων IP εξαντλήθηκε.
  • Το CoreDNS ή το CNI εμφανίζει υψηλό ποσοστό σφαλμάτων.
  • Τα Pods παραμένουν σε κατάσταση Pending λόγω έλλειψης πόρων.
  • Τα add-ons παρουσιάζουν OOMKill ή CPU throttling.

18 / 27

Λύση 4: Upgrade runbook

Ενδεικτικό περιεχόμενο:

markdown
# Upgrade Runbook

## Στόχος

Upgrade από Kubernetes v1.x σε v1.y.

## Έλεγχος πριν από το upgrade

- kubectl version
- kubectl get nodes -o wide
- kubectl get pods -A
- kubectl get apiservices
- kubectl get crds
- kubectl get validatingwebhookconfigurations,mutatingwebhookconfigurations

## Έλεγχος API deprecations

- Αναζήτησε παλαιά API versions σε Git repositories.
- Κάνε render και έλεγχο στα Helm charts.
- Κάνε render και έλεγχο στα Kustomize overlays.
- Έλεγξε τις εκδόσεις CRD και τα conversion webhooks.

## Backup

- Backup του etcd ή snapshot του παρόχου.
- Backup Velero/Namespace, εφόσον είναι διαθέσιμο.
- PV snapshots για stateful workloads.
- Καταγραφή της έκδοσης του GitOps repository.

## Ακολουθία

1. Ανακοίνωσε την αλλαγή.
2. Δοκίμασε στο staging.
3. Αναβάθμισε το Control Plane.
4. Επικύρωσε τα add-ons.
5. Αναβάθμισε τα Node Pools ένα προς ένα.
6. Για κάθε Node: cordon, drain, upgrade, uncordon.
7. Εκτέλεσε smoke tests.
8. Σύνταξε τελική αναφορά.

## Κριτήρια διακοπής

- Αυξήθηκε το ποσοστό σφαλμάτων του API Server.
- Το CoreDNS δεν είναι σταθερό.
- Το CNI/CSI δεν είναι συμβατό.
- Κρίσιμα workloads δεν βρίσκονται σε κατάσταση Ready.
- Ένα webhook εμποδίζει τα deployments.
- Ένα εύρημα deprecation δεν έχει διορθωθεί.

Ενδεικτικές εντολές:

bash
kubectl api-resources
kubectl api-versions
kubectl get apiservices
kubectl get crds
kubectl get events -A --sort-by=.metadata.creationTimestamp
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
kubectl uncordon <node>

19 / 27

Λύση 5: Observability και SLO

Ενδεικτικό SLO:

markdown
# Observability SLO checkout-api

## SLO

Το 99,9% των HTTP requests προς το `/checkout` ολοκληρώνεται επιτυχώς μέσα σε 300 ms, σε κυλιόμενο διάστημα 30 ημερών.

## SLI

- Ποσοστό επιτυχίας: HTTP 2xx/3xx διαιρεμένα με όλα τα requests, εξαιρώντας τα 4xx που έχουν αποκλειστεί ρητά.
- Καθυστέρηση: διάρκεια request στο p95.

## Σήματα

| Σήμα | Πηγή | Σκοπός |
| --- | --- | --- |
| Ρυθμός requests | Ingress/app metrics | προφίλ φορτίου |
| Ποσοστό σφαλμάτων | app/Ingress metrics | διαθεσιμότητα |
| Διάρκεια p95/p99 | app/Ingress metrics | καθυστέρηση |
| Logs | app logs | ανάλυση βασικής αιτίας |
| Traces | OpenTelemetry | ανάλυση εξαρτήσεων |
| Events | Kubernetes API | scheduling, probes, image pulls, PVC |
| Χρήση πόρων | cAdvisor/kubelet | CPU, μνήμη και throttling |

## Alerts

- Ποσοστό σφαλμάτων > 2% για 10 λεπτά.
- p95 > 300 ms για 15 λεπτά.
- Το Deployment δεν είναι πλήρως διαθέσιμο για 10 λεπτά.
- Το HPA βρίσκεται στο μέγιστο για 15 λεπτά.

## Runbooks

- checkout-api-high-error-rate.md
- checkout-api-latency.md
- checkout-api-rollout-failure.md

Σήματα πλατφόρμας:

Component πλατφόρμας Metrics/σήματα
API Server καθυστέρηση, ποσοστό σφαλμάτων, ρυθμός requests
CoreDNS σφάλματα DNS, καθυστέρηση, replicas
Ingress/Gateway 5xx, καθυστέρηση, υγεία backends
Nodes Ready, MemoryPressure, DiskPressure, PIDPressure
PVC/CSI PVCs σε κατάσταση Pending, σφάλματα attach/detach

20 / 27

Λύση 6: Autoscaling

Ενδεικτική αξιολόγηση:

Μηχανισμός Χρήση στο σενάριο Προϋπόθεση Κίνδυνος
HPA κλιμακώνει worker Pods βάσει CPU ή custom metric Metrics API, requests ακατάλληλο metric, ταλαντώσεις
VPA προτείνει requests για workers VPA Recommender σύγκρουση με HPA στη CPU
Cluster Autoscaler προσθέτει Nodes για Pods σε κατάσταση Pending ενσωμάτωση cloud/Node group αργή αντίδραση, quotas
Karpenter δημιουργεί Nodes με ευελιξία υποστηριζόμενο cloud, πολιτικές έλεγχος κόστους, σχεδιασμός NodeClass
KEDA κλιμακώνει βάσει μήκους ουράς scaler και εξωτερικό metric διαθεσιμότητα εξωτερικού metric

Ενδεικτικό HPA:

yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: worker
  namespace: worker-prod
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: worker
  minReplicas: 2
  maxReplicas: 30
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300

Ενδεικτική απόφαση:

Για φορτίο που προέρχεται από ουρά, το KEDA είναι συχνά τεχνικά καταλληλότερο από την κλιμάκωση μόνο βάσει CPU, επειδή το μήκος της ουράς αποτυπώνει πιο άμεσα τις εκκρεμείς εργασίες. Το HPA μπορεί να το συμπληρώνει όταν η χρήση CPU διαφέρει σημαντικά από εργασία σε εργασία.


21 / 27

Λύση 7: GitOps και CI/CD

Ενδεικτική ροή:

text
Commit κώδικα
  -> Το CI δημιουργεί το image
  -> Το CI εκτελεί tests και scan
  -> Το CI προωθεί το image στο registry
  -> Το CI προσδιορίζει το image digest
  -> Το CI δημιουργεί pull request στο repository των manifests
  -> Το review ελέγχει manifest, πολιτική και diff
  -> Το merge ενημερώνει την επιθυμητή κατάσταση
  -> Ο GitOps Controller συγχρονίζει το cluster
  -> Το Drift Detection αναφέρει αποκλίσεις
  -> Το rollback γίνεται μέσω Git Revert

Δικαιώματα:

Identity Δικαιώματα
CI Build Identity push στο registry, scan, δημιουργία PR
Reviewer review και έγκριση στο Git
GitOps Controller περιορισμένα δικαιώματα cluster στα Namespaces στόχου
Application team δικαιώματα deploy στο δικό της Namespace ή δικαιώματα PR
Platform team controllers, πολιτικές και πόροι cluster

Κριτήριο διακοπής:

Το CI pipeline δεν λαμβάνει μόνιμα δικαιώματα cluster-admin. Η κατάσταση του cluster συγχρονίζεται μέσω GitOps και όχι μέσω επιτακτικών deployments από το CI.


22 / 27

Λύση 8: Namespace για πολλούς tenants

Namespace:

yaml
apiVersion: v1
kind: Namespace
metadata:
  name: team-a
  labels:
    owner: team-a
    environment: prod
    cost-center: cc-1234
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted
  annotations:
    platform.example.com/owner-email: team-a@example.com

ResourceQuota:

yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: team-a-quota
  namespace: team-a
spec:
  hard:
    pods: "20"
    requests.cpu: "4"
    requests.memory: 8Gi
    limits.cpu: "8"
    limits.memory: 16Gi
    persistentvolumeclaims: "5"

LimitRange:

yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: team-a-defaults
  namespace: team-a
spec:
  limits:
    - type: Container
      defaultRequest:
        cpu: 100m
        memory: 128Mi
      default:
        cpu: 500m
        memory: 512Mi

Role και RoleBinding:

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: app-deployer
  namespace: team-a
rules:
  - apiGroups: ["", "apps", "batch", "networking.k8s.io"]
    resources: ["pods", "services", "configmaps", "deployments", "replicasets", "jobs", "cronjobs", "ingresses"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-deployer-binding
  namespace: team-a
subjects:
  - kind: Group
    name: team-a-developers
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: app-deployer
  apiGroup: rbac.authorization.k8s.io

NetworkPolicy Default Deny:

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: team-a
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress

Όριο του επιπέδου Professional:

  • Το Professional σχεδιάζει τη διακυβέρνηση των tenants.
  • Το Advanced + Security εξετάζει διεξοδικά διαδρομές κλιμάκωσης προνομίων στο RBAC, την επιβολή μέσω Admission, τα Secrets, το threat model και το incident response.

23 / 27

Λύση 9: Αξιολόγηση Operator

Ενδεικτική αξιολόγηση:

markdown
# Αξιολόγηση Operator: database-operator

## Σκοπός

Αυτοματοποιεί database instances μέσω Custom Resources.

## CRDs

- databases.example.com
- databasebackups.example.com
- databaserestores.example.com

## Δικαιώματα

Ο Operator χρειάζεται πρόσβαση σε StatefulSets, Services, Secrets, PVCs, Events και στα δικά του CRDs. Τα δικαιώματα σε ολόκληρο το cluster πρέπει να αιτιολογούνται.

## Conditions

- Ready
- Progressing
- Degraded
- BackupReady
- RestoreFailed

## Backup

Τα Custom Resources από μόνα τους δεν αρκούν. Πρέπει να συμπεριληφθούν τα δεδομένα PVC, τα Secrets και τα εξωτερικά backups.

## Κίνδυνοι upgrade

- αλλαγές στο schema των CRDs,
- conversion webhooks,
- finalizers που εμποδίζουν τη διαγραφή,
- ασύμβατο image του Operator,
- παλαιά Custom Resources που δεν μπορούν να μεταφερθούν.

## Κριτήρια διακοπής

- ασαφές ClusterRole με `*`,
- απουσία τεκμηριωμένης δοκιμής restore,
- απουσία στρατηγικής versioning για τα CRDs,
- απουσία οδηγού απεγκατάστασης,
- απουσία δυνατότητας multi-tenancy.

24 / 27

Λύση 10: Backup και disaster recovery

Restore Namespace:

markdown
# Restore Namespace

## Κατηγορίες δεδομένων

- manifests από το Git,
- Secrets από το σύστημα διαχείρισης μυστικών,
- δεδομένα PVC από VolumeSnapshot ή backup,
- CRDs, εφόσον το Namespace περιέχει Custom Resources.

## Σειρά

1. Δημιούργησε το Namespace στόχου.
2. Εφάρμοσε Quotas, RBAC και Policies.
3. Επανάφερε τα Secrets.
4. Επανάφερε PVCs ή VolumeSnapshots.
5. Συγχρόνισε τα workloads μέσω GitOps.
6. Έλεγξε τις διαδρομές Service και Ingress/Gateway.
7. Εκτέλεσε smoke tests.

## Τεκμήρια

- χρονική στιγμή του restore,
- Git revision,
- backup ID,
- επιτυχημένα smoke tests,
- ανοιχτές αποκλίσεις.

Restore cluster:

markdown
# Restore Cluster

## Κατηγορίες δεδομένων

- add-ons του cluster,
- CRDs,
- Namespaces,
- RBAC,
- Secrets,
- δεδομένα PV/PVC,
- εξωτερικά συστήματα: DNS, registry και identity provider.

## Σειρά

1. Δημιούργησε νέο cluster ή εκτέλεσε restore του etcd.
2. Επικύρωσε CNI, CSI και CoreDNS.
3. Εγκατάστησε τα CRDs.
4. Εγκατάστησε τον GitOps Controller.
5. Συγχρόνισε τα Namespaces της πλατφόρμας.
6. Συγχρόνισε τα Namespaces των tenants.
7. Επανάφερε τα δεδομένα PV.
8. Επικύρωσε Ingress και DNS.
9. Εκτέλεσε smoke tests για τα SLOs.

Βασικός κανόνας:

Ένα backup θεωρείται αξιόπιστο μόνο αφού πραγματοποιηθεί και τεκμηριωθεί δοκιμή restore.


25 / 27

Λύση 11: Ανάλυση κόστους και rightsizing

Ενδεικτική ανάλυση:

Πηγή κόστους Σημείο μέτρησης Ενέργεια
υπερβολικά CPU/memory requests requests έναντι πραγματικής χρήσης προσαρμογή requests βάσει p95/p99
ανενεργά workloads replicas χωρίς κίνηση χρονικά παράθυρα dev, έλεγχος scale-to-zero
PVCs PVC χωρίς συνδεδεμένο Pod έλεγχος υπευθύνου, snapshot και διαγραφής
Load Balancers Services τύπου LoadBalancer χρήση κοινόχρηστου Ingress/Gateway
Egress χρεώσεις cloud και flow logs βελτιστοποίηση διαδρομών δεδομένων
Spot/on-demand κόστος Node Pools εξέταση spot για workers που αντέχουν αστοχίες

Ενδεικτικό showback:

Κάθε Namespace χρειάζεται Labels:

yaml
metadata:
  labels:
    owner: team-a
    cost-center: cc-1234
    environment: prod

Κίνδυνος από ανεπαρκή requests:

Τα πολύ χαμηλά requests φαίνεται να εξοικονομούν χρήματα, αλλά μπορούν να επηρεάσουν αρνητικά το scheduling, το HPA, τη χρήση Nodes και τη σταθερότητα. Rightsizing δεν σημαίνει «όρισε τα requests στο ελάχιστο»· σημαίνει επιλογή ρεαλιστικών λειτουργικών τιμών.


26 / 27

Λύση 12: Παράδοση λειτουργίας

Ενδεικτικό έγγραφο παράδοσης:

markdown
# Παράδοση λειτουργίας της πλατφόρμας Kubernetes

## Επισκόπηση

- Cluster: prod-eu-1.
- Μοντέλο: Managed Kubernetes.
- Περιβάλλοντα: χωριστά stage/prod.
- GitOps: Argo CD.
- Ingress: Gateway Controller.
- Observability: Prometheus, Grafana, Loki, OpenTelemetry.

## Κρίσιμα add-ons

| Add-on | Υπεύθυνος | Runbook |
| --- | --- | --- |
| CoreDNS | platform | runbooks/coredns.md |
| CNI | platform | runbooks/network.md |
| CSI | platform | runbooks/storage.md |
| GitOps | platform | runbooks/gitops.md |
| Ingress/Gateway | platform | runbooks/ingress.md |

## Κριτήρια διακοπής

- Ο API Server δεν είναι προσβάσιμος.
- Το CoreDNS παρουσιάζει κρίσιμο ποσοστό σφαλμάτων.
- Το CNI εμποδίζει τη δικτύωση των Pods.
- Το CSI δεν μπορεί να συνδέσει volumes.
- Το GitOps συγχρονίζει λανθασμένη επιθυμητή κατάσταση.

## Ανοιχτοί κίνδυνοι

- Η τελευταία δοκιμή restore του cluster έγινε πριν από περισσότερες από 90 ημέρες.
- Ορισμένα Namespaces δεν έχουν Label κόστους.
- Βρέθηκαν δύο παλαιά API versions σε legacy chart.

Λίστα ελέγχου αξιολόγησης

Κριτήριο Ολοκληρώθηκε;
Ολοκληρωμένο platform blueprint ☐
Αιτιολογημένο μοντέλο λειτουργίας ☐
Τεκμηριωμένη απόφαση για Node Pools και sizing ☐
Upgrade runbook με κριτήρια διακοπής ☐
Έχει συμπεριληφθεί έλεγχος deprecations ☐
Observability με SLO και runbooks ☐
Αξιολόγηση autoscaling βάσει των εξαρτήσεών του από metrics ☐
Σαφής διαχωρισμός GitOps και CI/CD ☐
Σχεδιασμένο Namespace για πολλούς tenants ☐
Αξιολόγηση Operator με κινδύνους CRD/RBAC/backup ☐
Σενάρια disaster recovery με σειρά restore ☐
Ανάλυση κόστους με rightsizing και showback ☐
27 / 27

K8S · Orthevs Academy

31 modules ως ενιαία διαδρομή μάθησης.

Η σειρά παραμένει αμετάβλητη: από τη βασική δομή του lab μέσω τεχνικών θεμελίων και λειτουργικών μοντέλων έως το τελικό troubleshooting. Τα τεχνικά ονόματα καταλόγων διατηρούνται σκόπιμα.

Orthevs – Η μηχανική ως βάση για όσα ακολουθούν.

Το Orthevs ως εφαρμογή

Εγκατάσταση του Orthevs

Η web app του Orthevs μπορεί να εγκατασταθεί σε υποστηριζόμενες κινητές συσκευές και browsers υπολογιστή.

iPhone και iPad

Ανοίξτε το Orthevs στο Safari. Πατήστε Κοινή χρήση και μετά Προσθήκη στην οθόνη αφετηρίας. Ενεργοποιήστε το Άνοιγμα ως web app, αν εμφανίζεται, και πατήστε Προσθήκη.

Android

Για τη web app, ανοίξτε το μενού του browser και επιλέξτε Εγκατάσταση εφαρμογής ή Προσθήκη στην αρχική οθόνη. Επιβεβαιώστε την εγκατάσταση.

Browser υπολογιστή

Ανοίξτε το μενού του browser ή το εικονίδιο εγκατάστασης στη γραμμή διευθύνσεων και επιλέξτε Εγκατάσταση εφαρμογής ή Προσθήκη στο Dock.

Η εγκατάσταση της web app εξαρτάται από τον browser. Αν δεν εμφανιστεί διάλογος εγκατάστασης, ακολουθήστε τα βήματα του browser που αναφέρονται παραπάνω.